# 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:

### 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
# Compatible with existing auth
Composite MCP is fully compatible with Hotglue's existing authentication components. Tenants can link connectors the same way they already do today:
* **[Embedded widget](/widget-v3/overview)** — users connect integrations in your app
* **[Magic Links](/connection-methods/magic-links)** — share a branded URL for connection setup without embedding the widget
Once a tenant has linked a supported connector, Composite MCP can discover that link and route tool calls using the credentials stored in Hotglue. You do not need a separate OAuth flow inside the MCP client.
# How it works
```mermaid theme={null}
sequenceDiagram
participant Client as MCP Client
participant Composite as Composite MCP
participant Hotglue as Hotglue API
participant Upstream as Upstream MCP
Client->>Composite: POST /mcp (Bearer mcpToken)
Composite->>Hotglue: Resolve linked connectors
Hotglue-->>Composite: Linked connectors for tenant
Composite->>Hotglue: Resolve connector access tokens
Hotglue-->>Composite: Access tokens
Composite->>Upstream: tools/list
Upstream-->>Composite: Provider tools
Composite-->>Client: Namespaced tools (e.g. notion.*)
Client->>Composite: tools/call notion.search
Composite->>Upstream: tools/call search
Upstream-->>Composite: Result
Composite-->>Client: Proxied result
```
1. Your backend requests a per-tenant MCP token from the Hotglue API
2. Your MCP client connects to `https://mcp.hotglue.com/mcp` with that token as a Bearer credential
3. Composite MCP looks up the tenant's linked connectors and exposes tools from any that have a registered MCP backend
4. Tool calls are authenticated and forwarded to the upstream MCP, then returned to the client
# Get a per-tenant MCP token
Authentication is **per tenant**. Call the [`/mcpToken`](/api-reference/mcp/generate-mcp-token) endpoint with your API key to generate a bearer token for a specific environment, flow, and tenant:
```bash theme={null}
curl --request GET \
--url 'https://api.hotglue.com/{env_id}/{flow_id}/{tenant}/mcpToken' \
--header 'x-api-key: '
```
Example response:
```json theme={null}
{
"token": ""
}
```
Use the returned `token` value as the Bearer token when calling Composite MCP. Issue a token for each tenant whose connectors the agent should access — the token scopes discovery and tool calls to that tenant's linked credentials.
The MCP token encodes the environment, flow, tenant, public API key, and a JWT used to call the Hotglue API on the tenant's behalf. Treat it like a secret and store it securely on your backend.
# Connect an MCP client
Point any Streamable HTTP–compatible MCP client at the Composite MCP URL and pass the tenant token in the `Authorization` header.
Example configuration:
```json theme={null}
{
"mcpServers": {
"hotglue": {
"url": "https://mcp.hotglue.com/mcp",
"headers": {
"Authorization": "Bearer "
}
}
}
}
```
Replace `` with the `token` returned by `/mcpToken` for the tenant.
# Upstream MCP backends
Composite MCP routes to upstream MCP servers based on the connectors linked for the tenant. That can include:
* **Official provider MCPs** — for example Notion (`https://mcp.notion.com/mcp`) or Atlassian / Jira
* **Custom MCPs built by Hotglue** — for connectors where Hotglue maintains the MCP surface
Only linked connectors with a known MCP backend are exposed. Tools are namespaced as `{connector}.{tool_name}` so agents can tell providers apart when multiple connectors are linked.
# Quick start checklist
1. Let the tenant link connectors via the [widget](/widget-v3/overview) or a [Magic Link](/connection-methods/magic-links)
2. Generate an MCP token with [`GET /{env_id}/{flow_id}/{tenant}/mcpToken`](/api-reference/mcp/generate-mcp-token)
3. Configure your MCP client with `https://mcp.hotglue.com/mcp` and `Authorization: Bearer `
4. List tools — you should see namespaced tools for each supported linked connector
5. Call tools as usual; Composite MCP authenticates and proxies to the upstream MCP
# Changelog
Source: https://docs.hotglue.com/connection-methods/embedded-widget/changelog
This changelog documents the updates, enhancements, and bug fixes for the `@hotglue/widget` package.
### Fixed
* Improved accessibility with tooltips on Connections component.
### Fixed
* Improved accessibility with clearer aria labels for Connections component and updating colors to meet minimum contrast ratio thresholds.
### Fixed
* Improved accessibility with aria labels for Connections component `link` and `settings` buttons
### Fixed
* Added more accessibility improvements across the widget
### Fixed
* Improved accessibility with aria labels for sync status, icons, and buttons
* Enhanced icon and image components with alt text and aria descriptions
### Added
* Added support for connector-level schedules via the toggle in Settings > Widget, `Enable connector schedules`. The scheduling module continues to affect flow-level schedules, as normal, unless this toggle is enabled.
### Fixed
* Fixed an issue where `apiUrl` was required in the types
### Fixed
* HG-3639: Fixed linked state misalignment for targets in the target flow modal.
### Added
* HG-3641: Users are now redirected directly to select `options` after OAuth, when `options` are defined in an availableSource. This is currently only relevant for Xero (tenant selection) and Amazon Advertising (profile selection) integrations.
### Added
* Added support for OAuth in tap-faire
### Added
* HGI-6913: Added a copyable external ID in the S3 connector settings when using [Cross-account assumeRole authentication](https://docs.hotglue.com/connectors/s3#method-2-cross-account-assumerole-with-external-id)
### Added
* Added support for OAuth in tap-amazon-advertising
### Fixed
* HG-3567: Fixed missing loading state on job history tab of widget
### Fixed
* HG-3555: Fixed empty state misalignment on job history tab of widget
### Fixed
* HG-3506: Resolved React warning about missing key prop on job history tab.
### Added
* HG-3491: Introduced new `runJob` helper function which introduces support for running v2 flows and specifying the `jobType`, the signature is:
```javascript theme={null}
runJob: (
entityId: string,
flow: string,
tenant: string,
startDate: string,
jobType: 'read' | 'write',
) => Promise;
```
### Fixed
* HG-3496: Resolved bug where `onConnectorLinked` listener was not triggering when the widget was closed after making an OAuth connection
### Deprecated
* HG-3491: As part of introducing the `runJob` helper function we have deprecated `createJob` as it doesn't support v2 flows.
### Fixed
* HG-3398: Avoid undefined error when updating `isSelected` value in the field map component
### Fixed
* HG-3443: ensure `onLinkFailed` listeners still fire when invalid `connectValues` are passed to `HotGlue.link` function
### Fixed
* HG-3422: fixed bug where symlink screen would persist even after successfully linking a connector
# Javascript Reference
Source: https://docs.hotglue.com/connection-methods/embedded-widget/javascript
Using the hotglue widget with plain JavaScript
This page is a reference of all the functions accessible from the `HotGlue` object exposed by the `widgetv2.js` script.
After [installing the widget](https://docs.hotglue.com/docs/embed-hotglue#installation-vanilla-javascript) using plain JavaScript, you can reference the `HotGlue` (or `window.HotGlue`) object and all the utility functions included in the widget.
# open
## Usage
`HotGlue.open(user id, options)`
## Parameters
| Name | Type | Description |
| ------- | --------- | --------------------------------------- |
| user id | `string` | ID of current user of your application. |
| options | `objects` | option objects |
## Description
Launches the hotglue widget for user with specified options.
***
# close
## Usage
`HotGlue.close()`
## Description
Closes the hotglue widget.
***
# preload
## Usage
`HotGlue.preload(user id, flow id)`
## Parameters
| Name | Type | Description |
| ------- | -------- | --------------------------------------------------------------------------------------------------------------- |
| user id | `string` | ID of current user of your application. |
| flow id | `string` | ID of flow you wish to connect. Every flow in hotglue has an ID which can be found from the admin panel or API. |
## Description
Preloads the relevant user/flow data for usage with the HotGlue.link function.
***
# link
## Usage
`HotGlue.link(user id, flow id, source, preloaded, options)`
## Parameters
| Name | Type | Description |
| --------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| user id | `string` | ID of current user of your application. |
| flow id | `string` | ID of flow you wish to connect. Every flow in hotglue has an ID which can be found from the admin panel or API. source |
| source | `string` | ID of source you wish to connect – typically just the name of the source in lowercase. Full catalog is accessible via API. Ex. `salesforce` |
| preloaded | `boolean` | Mark this flag as `true` if you used the `HotGlue.preload` function to improve load time. Defaults to `false` |
| options | `object` | Object containing options to configure the form: `json { "helperText": "Need help finding credentials? [Read the docs](https://docs.hotglue.xyz)" }` |
## Description
If specified `source` is **not linked**, this will open a popup window for user to login
If specified `source` is **linked**, this will open the hotglue widget under specified flow so user can manage the source.
***
# reconnect
## Usage
`HotGlue.reconnect(user id, flow id, entity id, options)`
## Parameters
| Name | Type | Description |
| --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| user id | `string` | ID of current user of your application. |
| flow id | `string` | ID of flow you wish to reconnect. Every flow in hotglue has an ID which can be found from the admin panel or API. source |
| entity id | `string` | ID of source or target you wish to connect – typically just the name of the source in lowercase. Full catalog is accessible via API. Ex. `salesforce` |
| options | `object` | Object containing options to configure the form: `json { "isTarget": false }` |
## Description
Used to reconnect an OAuth entities. Note for non-OAuth sources or targets, this will have no effect. In order to reconnect a target, you must pass the `isTarget` parameter to the `options` object.
***
# disconnect
## Usage
`HotGlue.disconnect(user id, flow id, entity id, options)`
## Parameters
| Name | Type | Description |
| --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| user id | `string` | ID of current user of your application. |
| flow id | `string` | ID of flow you wish to disconnect. Every flow in hotglue has an ID which can be found from the admin panel or API source |
| entity id | `string` | ID of source or target you wish to disconnect – typically just the name of the source in lowercase. Full catalog is accessible via API. Ex. `salesforce` |
| options | `object` | Object containing options to configure the form: `json { "isTarget": false }` |
## Description
Used to disconnect an entity (source or target). Note you must pass the `isTarget` parameter to the `options` object if disconnecting a linked target.
***
# setListener
## Usage
`HotGlue.setListener(listener)`
## Parameters
| Name | Type | Description |
| ------------------------------------------------------------------------- | -------- | -------------------------------------------------------------------- |
| listener | `object` | Object containing all listeners. See list of available events below. |
| ex. | | |
| `{onSourceLinked: (source, flow) => console.log(JSON.stringify(source))}` | | |
## Description
Updates current listener configuration to specified listener object
***
# getLinkedSources
## Usage
`HotGlue.getLinkedSources(flow id, user id)`
## Parameters
| Name | Type | Description |
| ------- | -------- | ------------------- |
| flow id | `string` | ID of flow to query |
| user id | `string` | ID of user to query |
## Response
[](https://docs.hotglue.com/docs/embed-hotglue-javascript-reference#response)
Returns a Promise which must be awaited or assigned a callback to extract relevant data
```json JSON theme={null}
[{
"tap": "salesforce",
"domain": "salesforce.com",
"label": "Salesforce",
"icon": "https://s3.amazonaws.com/other.hotglue.xyz/images/salesforce.svg",
"tap_url": "https://login.salesforce.com/services/oauth2/authorize?response_type=code&client_id=...",
"auth_url": "https://login.salesforce.com/services/oauth2/token",
"type": "oauth",
"description": "Enable your customers to sync CRM data (Leads, Sales, etc.) directly from Salesforce using hotglue.",
"client_id": "...",
"fieldMap": {}
}]
```
## Description
Convenience function wrapping the hotglue API to check if user has linked sources.
***
# createJob
## Usage
`HotGlue.createJob(flowId, tenantId, startDate)`
## Parameters
| Name | Type | Required | Description |
| ----------- | ------------------- | -------- | ---------------------------------------------------------------------------- |
| `flowId` | `string` | Yes | ID of flow |
| `tenantId` | `string` | Yes | ID of user |
| `startDate` | `string` (ISO date) | No | Optional. Used to override start date of the job. ex: `2022-10-16T00:00:00Z` |
## Response
Returns a Promise which must be awaited or assigned a callback to extract relevant data
```json JSON theme={null}
{
"job_id": "lmaEbA",
"env_id": "dev.example-env.hotglue.xyz",
"job_name": "test_job:_V-vgdlLN",
"tenant": "default",
"started_by": "default",
"flow": "l8odS2mce",
"s3_root": "default/flows/l8odS2mce/jobs/lmaEbA",
"start_time": "2020-12-30T18:01:01.828266+00:00",
"state": {},
"tap": "quickbooks:sandbox",
"status": "ETL_FAILED",
"message": "ETL error...",
"last_updated": "2020-12-30T20:31:00.081282+00:00"
}`
```
## Description
Convenience function wrapping the hotglue API to run a job for the user.
***
# hasMounted
## Usage
`HotGlue.hasMounted()`
## Description
Returns `true` if the widget has mounted and is ready for use. `false` otherwise.
***
## localization
Object specifying localization overrides for text in the widget.
```json JSON theme={null}
{
"startingScreen": {
"header": "Add a Title Here",
"subtitle": "Put some caption here"
},
"connectSourceScreen": {
"instructionText": "Link your account below",
"connectDataButtonText": "Link my account now",
"saveConfigurationButtonText": "Save my configuration"
},
"copySourceScreen": {
"header": "Duplicate the same setup from this flow?",
"actionButton": "No, I'll use a different account"
},
"quickActions": {
"runJobsTitle": "Run Jobs",
"runJobsSubtitle": "Some instructions for your users to run jobs",
"editFieldMapTitle": "Field Map Editor",
"editFieldMapSubtitle": "Some instructions for your users to edit Field Map",
"reconnectTitle": "Reconnect Source",
"reconnectSubtitle": "Some instructions for your users to reconnect the source",
"editScheduleTitle": "Edit Time of Sync",
"editScheduleSubtitle": "Some instructions for your users to edit sync schedule",
"unlinkTitle": "Unlink Source",
"unlinkSubtitle": "Some instructions for your users to unlink the source"
},
"jobHistory": {
"noJobsCaption": "Add text to guide user/s to run jobs!"
},
"searchSource": {
"searchSourceText": "Search App",
"noSourceCaption": "Add text if there is no source upon search",
"noSourceAvailableCaption": "There are no source for this flow, try add on the dashboard"
},
"searchTarget": {
"searchTargetText": "Search Target App",
"noTargetCaption": "Add text if there is no target upon search",
"noTargetAvailableCaption": "There are no target for this flow, try add on the dashboard"
}
}
```
# Allow multiple sources
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/allow-multiple-sources
Allows tenants to connect to multiple distinct connectors in the same flow
By default, users are limited to one linked connector per flow. This is because most users need just one integration for each category of connector you use (e.g. 1 CRM, 1 accounting system).
`multipleSources` ignores these limits and allows users to link multiple connectors in the same flow (e.g. Hubspot and Salesforce).
## Syntax
```javascript javascript theme={null}
multipleSources: true
```
# Create metadata
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/create-metadata
Define tenant metadata like name, industry, or contact
`tenantMetadata` allows you to define additional data about your tenant, such as the company name.
This will not be visible to your user. It is only accessible via the hotglue dashboard and API.
## Syntax
```javascript javascript theme={null}
tenantMetadata: {
"Name": "Molot Industries",
"Contact": "David Molot"
}
```
# Custom Credential Validation
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/custom-credential-validation
Specify custom validation logic for credential input in the widget.
The `credentialsFormValidator` option allows developers to inject a custom asynchronous validation callback into the widget.
This callback will be called when the tenant submits their credentials in the widget. If the custom validator returns an `errorMessage`, it will be displayed to the tenant.
## Syntax
```typescript theme={null}
credentialsFormValidator?: (
oldConfig: TConfig,
newConfig: TConfig,
availableEntity: Record,
flowId: string,
tenantId: string
) => Promise<{ errorMessage?: string; success: boolean }>;
```
## Parameters
* `oldConfig`: The current configuration settings before the tenant's update.
* `newConfig`: The updated configuration settings after the tenant's modification.
* `availableEntity`: The availableSource, availableTarget, or availableConnector that they are attempting linking ot
* `flowId`
* `tenantId`
## Example Usage
Below is a simple example demonstrating how to implement the `credentialsFormValidator`:
```typescript theme={null}
const myValidator = async (
oldConfig,
newConfig,
availableEntity,
flowId,
tenantId
) => {
if(newConfig.api_version >= 25) {
return {
success: false,
errorMessage: "Invalid API version specified"
}
}
return { success: true };
};
hotglue.open(
"tenant-id",
{
credentialsFormValidator: myValidator
}
)
```
This example checks if a specific field has changed and returns an error message if so, ensuring tenants are informed of exact validation issues in the widget.
# Custom field mapping
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/custom-field-mapping
Allow users to map their fields to your schema
# Behavior
Custom field mapping allows your users to map fields in their connected system to your data model.
Your users will see your app's schema on the left, and available fields in their source system on the right.

# Uses
* Fetch available custom fields in your customer's external system without creating new custom fields in your app.
* Define schemas tenant-by-tenant for granular control over mapping.
If you need to fetch custom fields, hotglue will first need to fetch available fields in your user's account (a "discover"). There are two ways to do this, both of which can be turned on in your jobs settings:
* Trigger a discover when your user links.
* Force a discover on every job
# Syntax
Pass the `schemas` object as an option to the hotglue widget. There are three parameters in this object:
* **FlowId**: The shortcode for your flow
* **schema.table**: The name of the table inside your system. This can be any string.
* **Your data model's field `id`** and `name`: The `id` is the field name in your data model, as a string. The `name` is a user-friendly string that is familiar to your users.
Javascript
```javascript javascript theme={null}
{
"schemas": [
{
"flowId": "flowId",
"schema": [
{
"table": "Leads",
"fields": [
{
"id": "interest",
"name": "Interest Level"
},
{
"id": "cat",
"name": "Test Company category"
}
]
}
]
}
}
```
## One to One Mapping
To enforce a one-to-oe relationship between source and target tables you can use the `enforceOneToOneMapping` prop.
In the vanilla widget you can pass:
```javascript javascript theme={null}
{
"enforceOneToOneMapping": true, // default false
"schemas": [{...}]
}
```
In the React widget you can pass:
```jsx React theme={null}
const { setSchema } = useHotglue()
const schemas = {
"flowId": "flowId",
"schema": [{...}]
}
setSchema(schemas, { enforceOneToOneMapping: true })
```
Here's how it looks on the widget popup when the flag is passed
# Filter
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/filter
Object specifying filters
`flowFilter`
## Syntax
```javascript javascript theme={null}
flowFilter: (flow) => return flow.name === "Sales"
```
# Hide back buttons
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/hide-back-buttons
Hides back buttons in widget. Usually used for the `link` function
This is most commonly used with the `link` function to prevent users from moving backward to the flow page.
## Syntax
```javascript javascript theme={null}
hideBackButtons: true
```
# Listeners
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/listener
Use callbacks to respond to Widget events
The `listener` option can be passed in order to respond to various widget events.
## Syntax
```javascript javascript theme={null}
listener: {
onSourceLinked:
(source, flow) => console.log(JSON.stringify(source))
}
```
## Supported listeners
### onWidgetOpen
Signature `()`
### onWidgetClose
Signature `()`
### onReconnect
Signature `(entityId, flow)`
| Name | Type | Description |
| -------- | -------- | ------------------------------------------------------------ |
| entityId | `string` | ID of the entity (source/target/connector) being reconnected |
| flow | `string` | ID of the flow |
### onPopupClose
Signature `(id, flowId)`
| Name | Type | Description |
| ------ | -------- | -------------------------------- |
| id | `string` | ID of source/target being linked |
| flowId | `string` | ID of flow being linked |
### onSourceLinked
Signature `(source, flowId, tenantId)`
| Name | Type | Description |
| -------- | -------- | --------------------------------------------------------------------------------------- |
| source | `object` | The source that has been linked. Follows same response structure as linked sources API |
| flowId | `string` | ID of flow that has been linked |
| tenantId | `string` | ID of the tenant |
### onTargetLinked
Signature `(target, flowId)`
| Name | Type | Description |
| ------ | -------- | -------------------------------------------------------------------------------------- |
| target | `object` | The target that has been linked. Follows same response structure as linked targets API |
| flowId | `string` | ID of flow that has been linked |
### onConnectorLinked
Signature `(connector, flowId, tenantId)`
| Name | Type | Description |
| --------- | -------- | ---------------------------------- |
| connector | `object` | The connector that has been linked |
| flowId | `string` | ID of flow that has been linked |
| tenantId | `string` | ID of the tenant |
### onSourceLinkCanceled
Signature `(tapId, flowId)`
| Name | Type | Description |
| ------ | -------- | ------------ |
| tapId | `string` | ID of source |
| flowId | `string` | ID of flow |
### onConnectorLinkCanceled
Signature `(connectorId, flowId)`
| Name | Type | Description |
| ----------- | -------- | --------------- |
| connectorId | `string` | ID of connector |
| flowId | `string` | ID of flow |
### onSourceUnlinked
Signature `(source, flowId)`
| Name | Type | Description |
| ------ | -------- | --------------------------------- |
| source | `string` | The source that has been unlinked |
| flowId | `string` | ID of flow that has been unlinked |
### onConnectorUnlinked
Signature `(connector, flowId)`
| Name | Type | Description |
| --------- | -------- | ------------------------------------ |
| connector | `string` | The connector that has been unlinked |
| flowId | `string` | ID of flow that has been unlinked |
### onTargetUnlinked
Signature `(target, flowId)`
| Name | Type | Description |
| ------ | -------- | --------------------------------- |
| target | `string` | The target that has been unlinked |
| flowId | `string` | ID of flow that has been unlinked |
### onTargetLinkCanceled
Signature `(targetId, flowId)`
| Name | Type | Description |
| -------- | -------- | ------------ |
| targetId | `string` | ID of target |
| flowId | `string` | ID of flow |
### onSourceLinkFailed
Signature `(source, flowId, tenant, errorMessage)`
| Name | Type | Description |
| ------------ | ------------------ | ------------------------------------ |
| source | `string \| object` | The source that failed to link |
| flowId | `string` | ID of flow |
| tenant | `string` | ID of the tenant |
| errorMessage | `string` | Error message describing the failure |
### onConnectorLinkFailed
Signature `(connector, flowId, tenant, errorMessage)`
| Name | Type | Description |
| ------------ | ------------------ | ------------------------------------ |
| connector | `string \| object` | The connector that failed to link |
| flowId | `string` | ID of flow |
| tenant | `string` | ID of the tenant |
| errorMessage | `string` | Error message describing the failure |
### onTargetLinkFailed
Signature `(target, flowId, tenant, errorMessage)`
| Name | Type | Description |
| ------------ | ------------------ | ------------------------------------ |
| target | `string \| object` | The target that failed to link |
| flowId | `string` | ID of flow |
| tenant | `string` | ID of the tenant |
| errorMessage | `string` | Error message describing the failure |
### onStartJob
Signature `(tap_id, flow_id, user_id)`
| Name | Type | Description |
| -------- | -------- | ----------------------------------- |
| tap\_id | `string` | ID of source the job is running for |
| flow\_id | `string` | ID of flow source is linked under |
| user\_id | `string` | ID of the tenant who started job |
### onFieldMapSave
Signature `(entityId, flowId, tenantId)`
| Name | Type | Description |
| -------- | -------- | ---------------- |
| entityId | `string` | ID of the entity |
| flowId | `string` | ID of the flow |
| tenantId | `string` | ID of the tenant |
### onCustomMappingSave
Signature `(entityId, flowId, tenantId)`
| Name | Type | Description |
| -------- | -------- | ---------------- |
| entityId | `string` | ID of the entity |
| flowId | `string` | ID of the flow |
| tenantId | `string` | ID of the tenant |
### onScheduleSave
Signature `(oldSchedule, newSchedule, entityId, flowId, tenantId)`
| Name | Type | Description |
| ----------- | ---------------- | -------------------------------------------------------------------------------------------------------------- |
| oldSchedule | `object \| null` | The previous schedule configuration before the save. May be `null` if no schedule existed. |
| newSchedule | `object \| null` | The newly saved schedule configuration. May be `null` if schedule is cleared. |
| entityId | `string \| null` | ID of the entity (source / target / connector) the schedule applies to. May be `null` if using flow schedules. |
| flowId | `string` | ID of the flow |
| tenantId | `string` | ID of the tenant |
# Localization
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/override-default-text
`localization` overrides default headers, captions, and buttons in the widget
Define custom or branded text inside the widget.
## Syntax
```javascript Javascript theme={null}
localization: {
"startingScreen": {
"header": "Add a Title Here",
"subtitle": "Put some caption here"
},
"connectSourceScreen": {
"instructionText": "Link your account below",
"connectDataButtonText": "Link my account now",
"saveConfigurationButtonText": "Save my configuration"
},
"copySourceScreen": {
"header": "Duplicate the same setup from this flow?",
"actionButton": "No, I'll use a different account"
},
"quickActions": {
"runJobsTitle": "Run Jobs",
"runJobsSubtitle": "Some instructions for your users to run jobs",
"editFieldMapTitle": "Field Map Editor",
"editFieldMapSubtitle": "Some instructions for your users to edit Field Map",
"reconnectTitle": "Reconnect Source",
"reconnectSubtitle": "Some instructions for your users to reconnect the source",
"editScheduleTitle": "Edit Time of Sync",
"editScheduleSubtitle": "Some instructions for your users to edit sync schedule",
"unlinkTitle": "Unlink Source",
"unlinkSubtitle": "Some instructions for your users to unlink the source"
},
"jobHistory": {
"noJobsCaption": "Add text to guide user/s to run jobs!"
},
"searchSource": {
"searchSourceText": "Search App",
"noSourceCaption": "Add text if there is no source upon search",
"noSourceAvailableCaption": "There are no source for this flow, try add on the dashboard"
},
"searchTarget": {
"searchTargetText": "Search Target App",
"noTargetCaption": "Add text if there is no target upon search",
"noTargetAvailableCaption": "There are no target for this flow, try add on the dashboard"
},
"connectorManagementTabs": {
"quickActions": "Quick Actions",
"credentials": "Credentials",
"jobHistory": "Job History",
"mapping": "Field Mapping",
"triggers": "Triggers",
"uploadFiles": "Upload Files"
}
}
```
# Skip to flow
Source: https://docs.hotglue.com/connection-methods/embedded-widget/options/skip-to-flow
Instead of showing a list of flows, `flow` will open to a specific flow
This can be used with an `open` function to send tenants directly to a specific flow.
## Syntax
```javascript javascript theme={null}
flow: "h8Dksj2"
```
# Overview
Source: https://docs.hotglue.com/connection-methods/embedded-widget/overview
The hotglue widget allows you to offer native, inline integrations in your app with a few lines of code.
# Introduction to the widget
The hotglue widget is a white-labeled component that allows your users to integrate instantly, without leaving your app. You can embed the widget using a few lines of [Javascript](https://docs.hotglue.com/docs/embed-hotglue) or [React](https://docs.hotglue.com/docs/embed-hotglue).
***
# Installation (React)
## Install the @hotglue/widget package
If your project is built in React, you can install the [@hotglue/widget](https://www.npmjs.com/package/@hotglue/widget) package.
using npm
```
npm install @hotglue/widget
```
or using yarn
```
yarn add @hotglue/widget
```
## Launch the widget
First you must include the `HotglueConfig` provider as a higher order component in your React app. For example, in `index.js`:
```javascript index.js theme={null}
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import HotglueConfig from '@hotglue/widget';
ReactDOM.render(
,
document.getElementById('root')
);
```
Now you can launch the widget using the `useHotglue` hook:
```javascript App.js theme={null}
import { useHotglue } from '@hotglue/widget';
const App = (props) => {
const { openWidget } = useHotglue();
return
}
export default App;
```
You can also use the [Connections component](https://docs.hotglue.com/docs/connections) if you want to use the widget inline rather than in a modal.
# Installation (Next.js)
Just like above, begin by installing the [@hotglue/widget](https://www.npmjs.com/package/@hotglue/widget) package
using npm
```
npm install --save @hotglue/widget
```
or yarn
```
yarn add @hotglue/widget
```
Import `HotglueConfig` on your page and configure it.
```javascript next.js theme={null}
import dynamic from 'next/dynamic'
const HotglueConfig = dynamic(() => import('@hotglue/widget'), { ssr: false })
export default function Home() {
return (
)}
```
Create the `HomeComponent`. Inside of it you can launch the widget using the useHotglue hook:
```javascript next.js theme={null}
import { useHotglue } from '@hotglue/widget'
const HomeComponent = (props, ref) => {
const { openWidget } = useHotglue()
const handleOpenWidget = (tenant) => {
openWidget(tenant)
}
return (
)
}
export default HomeComponent
```
You can also use the `connections` component.
```javascript next.js theme={null}
import dynamic from 'next/dynamic'
const HotglueConfig = dynamic(() => import('@hotglue/widget'), { ssr: false })
import { Connections } from '@hotglue/widget'
export default function Home() {
return (
)
}
```
# Installation (Vanilla JavaScript)
[](https://docs.hotglue.com/docs/embed-hotglue#installation-vanilla-javascript)
## 1. Call and mount the widget
[](https://docs.hotglue.com/docs/embed-hotglue#1-call-and-mount-the-widget)
The first step of embedding hotglue is to add the widget to your web app. Simply copy the code generated from the hotglue environment dashboard into your HTML `head` tag.
```javascript HTML theme={null}
```
```javascript HTML theme={null}
```
## 2. Launch the widget
***Option 1 - HotGlue.link()***
Now that the hotglue widget is installed in your web app, open the widget by calling `HotGlue.link(, , , , )`. In the example below, we also use `options` to hide the back button and add a listener to close the widget once the source is successfully linked.
```HTML theme={null}
```
***Option 2 - HotGlue.open()***
Alternatively, you can open the widget "flows" menu by calling `HotGlue.open()`
```HTML theme={null}
```
# HotglueConfig
Source: https://docs.hotglue.com/connection-methods/embedded-widget/react/hotglue-config
HotglueConfig component reference
# Description
The `HotglueConfig` is a higher order component that must be included in order for the `@hotglue/widget` package to function correctly.
# Usage
Since the `HotglueConfig` is a provider, it should be included near the entrypoint of your React app. Below is an example of including in the `index.js` of a create-react-app structure.
```javascript index.js theme={null}
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import HotglueConfig from '@hotglue/widget';
ReactDOM.render(
,
document.getElementById('root')
);
```
# Properties
## config
The `config` property is an object which is used to connect to your hotglue environment. The object takes the following parameters:
| Name | Description | Required |
| --------- | --------------------------------------------------------------------------------------------- | -------- |
| `apiKey` | Your public environment api key | true |
| `envId` | Your environment id Usually something like `dev.hotglue.acme.com` | true |
| `options` | [An options object](https://docs.hotglue.com/docs/embed-hotglue-javascript-reference#options) | false |
## Implementation notes
* The `` component should live at a common ancestor of all the places in your code where you simultaneously use the widget. Multiple copies of the `` component **can not** be mounted simultaneously.
# Inline component
Source: https://docs.hotglue.com/connection-methods/embedded-widget/react/inline-component
Connections React component reference
# Description
Embeddable React component that allows users to connect and manage their connected integrations.
The Connections React component is an inline version of the hotglue widget. Rather than including the widget as a modal (dialog) in your web-app, the Connections component allows for a more native experience. See an example below:

# Usage
First you must include the `HotglueConfig` provider as a higher order component in your React app. For example, in `index.js`:
```javascript index.js theme={null}
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import HotglueConfig from '@hotglue/widget';
ReactDOM.render(
,
document.getElementById('root')
);
```
Then you can use the `Connections` component, as shown below:
```javascript App.js theme={null}
import React from 'react'
import { Connections } from '@hotglue/widget';
const App = (props) => {
return (
);
};
export default App;
```
# Properties
| Name | Type | Required | Description |
| --------------- | ------------------------------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------- |
| tenant | `string` | true | ID of current user of your application. |
| filterFlow | `function(flowId) => boolean` | false | Function to filter flows. By default renders all flows. `false` to hide, `true` to show. |
| filterEntity | `function(flowId, entityId, isTarget) => boolean` | false | Function to filter entities within flows (sources and targets). By default renders all entities. `false` to hide, `true` to show. |
| hideFlows | `boolean` | false | If true, will hide the flow container and only render the integrations. |
| hideBackButtons | `boolean` | false | If true, will hide the back buttons on the connection page. |
| multipleSources | `boolean` | false | If true, will allow tenants to link multiple sources to the same flow. |
| localization | `object` | false | A [localization object](https://docs.hotglue.com/docs/embed-hotglue-javascript-reference#localization) |
# Styling
The Connections component has defined CSS classes that can be used to override the component's styling to more closely match your own UI/UX.
## Flow Container
Each flow is rendered as a section within the Connections component. The classes are shown in the graphic below:

The classes are also defined in the table below:
| Class Name | Description |
| -------------------- | ------------------------------------------------ |
| `hg-flows-container` | Container of the entire flow section |
| `hg-flow-title` | Title of the flow |
| `hg-flow-subtitle` | Subtitle of the flow (description) |
| `hg-connectors` | Container for the connectors section of the flow |
##
Connector Card
Each connector (both sources and targets) are rendered as a card within the Flow Container. The classes are shown in the graphic below:

The classes are also defined in the table below:
| Class Name | Description |
| -------------------------- | --------------------------------------- |
| `hg-connector-card` | Card containing the connector |
| `hg-connector-card-linked` | Connector card for a linked integration |
| `hg-connector-name` | Connector name |
| `hg-connector-logo` | Connector logo |
| `hg-connector-settings` | Connector settings gear |
| `hg-connector-linked` | Connector linked label |
##
Example
[](https://docs.hotglue.com/docs/connections#example)
Included below is a stylesheet to give the `Connections` component a dark theme.
```css CSS theme={null}
.hg-flows-container {
background-color: #120c23;
color: #fff;
padding: 24px;
}
.hg-flows-container .hg-flow-title {
font-size: 16px;
color: #ddd;
}
.hg-flows-container .hg-flow-subtitle {
font-size: 14px;
font-weight: 300;
color: #aaa;
}
.hg-flows-container .hg-connector-card {
background: #2a233d;
border: none;
color: #fff;
}
.hg-connector-card:hover {
cursor: pointer;
box-shadow: 0px 4px 0px rgb(93 57 222 / 65%)
}
.hg-connector-card .hg-connector-name {
font-size: 14px;
}
.hg-connector-card .hg-connector-logo {
border-radius: 50%;
background-color: #fff;
}
.hg-connector-card .hg-connector-linked {
background: #FA5240;
}
.hg-connector-card .hg-connector-settings {
color: #fff;
border: 1px solid #777;
}
```
The result looks like below:

# Overview
Source: https://docs.hotglue.com/connection-methods/embedded-widget/react/overview
Using the hotglue widget with React
This section is a reference for all steps involved with using the hotglue widget after [installing the widget](https://docs.hotglue.com/docs/embed-hotglue#installation-react) using the [@hotglue/widget](https://www.npmjs.com/package/@hotglue/widget) package.
To start, you will need to utilize the `HotglueConfig` component near the entrypoint of your React app:
`HotglueConfig` is a higher order component that must be included in order for the `@hotglue/widget` package to function correctly.
After that, you can utilize `useHotglue` or `Connections` to display the widget in your app:
The `useHotglue` is the primary way of using the `@hotglue/widget` package outside of the inline `Connections` component. Use this to launch the widget and access utility functions.
The `Connections` React component is an inline version of the widget. Rather than opening a modal in your app, the Connections component allows for a more native experience.
# Use the widget
Source: https://docs.hotglue.com/connection-methods/embedded-widget/react/use-the-widget
useHotglue React hook reference
# Description
The `useHotglue` is the primary way of using the `@hotglue/widget` package outside of the inline `Connections` component. Use this to launch the widget and access utility functions.
## Usage
First you must include the `HotglueConfig` provider as a higher order component in your React app. For example, in `index.js`:
```javascript index.js theme={null}
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import HotglueConfig from '@hotglue/widget';
ReactDOM.render(
,
document.getElementById('root')
);
```
Then you can use the `useHotglue` hook anywhere, as shown below:
```javascript App.js theme={null}
import { Connections } from '@hotglue/widget';
const App = (props) => {
const { openWidget } = useHotglue();
return (
);
};
export default App;
```
# Functions
Below is a reference of all of the currently supported functions from the `useHotglue` hook.
***
## openWidget
Opens the widget for a user with options.
### Usage
`HotGlue.openWidget(user id, options)`
### Parameters
| Name | Type | Description |
| ------- | --------- | ------------------------------------------------------- |
| user id | `string` | ID of current user of your application. |
| options | `objects` | [option](https://docs.hotglue.com/docs/options) objects |
***
## link
### Usage
`HotGlue.link(user id, flow id, source, preloaded, options)`
### Parameters
| Name | Type | Description |
| --------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| user id | `string` | ID of current user of your application. |
| flow id | `string` | ID of flow you wish to connect. Every flow in hotglue has an ID which can be found from the admin panel or API. source |
| source | `string` | ID of source you wish to connect – typically just the name of the source in lowercase. Full catalog is accessible via API. Ex. `salesforce` |
| preloaded | `boolean` | Mark this flag as `true` if you used the `HotGlue.preload` function to improve load time. Defaults to `false` |
| options | `object` | Object containing options to configure the form: `json { "helperText": "Need help finding credentials? [Read the docs](https://docs.hotglue.xyz)" }` |
### Description
If specified `source` is **not linked**, this will open a popup window for user to login
If specified `source` is **linked**, this will open the hotglue widget under specified flow so user can manage the source.
***
## reconnect
### Usage
`HotGlue.reconnect(user id, flow id, entity id, options)`
### Parameters
| Name | Type | Description |
| --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| user id | `string` | ID of current user of your application. |
| flow id | `string` | ID of flow you wish to reconnect. Every flow in hotglue has an ID which can be found from the admin panel or API. source |
| entity id | `string` | ID of source or target you wish to connect – typically just the name of the source in lowercase. Full catalog is accessible via API. Ex. `salesforce` |
| options | `object` | Object containing options to configure the form: `json { "isTarget": false }` |
### Description
Used to reconnect an OAuth entities. Note for non-OAuth sources or targets, this will have no effect. In order to reconnect a target, you must pass the `isTarget` parameter to the `options` object.
***
## disconnect
### Usage
`HotGlue.disconnect(user id, flow id, entity id, options)`
### Parameters
| Name | Type | Description |
| --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| user id | `string` | ID of current user of your application. |
| flow id | `string` | ID of flow you wish to disconnect. Every flow in hotglue has an ID which can be found from the admin panel or API. |
| source | | |
| entity id | `string` | ID of source or target you wish to disconnect – typically just the name of the source in lowercase. Full catalog is accessible via API. Ex. `salesforce` |
| options | `object` | Object containing options to configure the form: `json { "isTarget": false }` |
### Description
Used to disconnect an entity (source or target). Note you must pass the `isTarget` parameter to the `options` object if disconnecting a linked target.
***
## setListener
### Usage
`HotGlue.setListener(listener)`
### Parameters
| Name | Type | Description |
| -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| listener | `object` | Object containing all listeners. See list of available events [here](/connection-methods/embedded-widget/options/listener). ex. `{onSourceLinked: (source, flow) => console.log(JSON.stringify(source))}` |
## Description
Updates current listener configuration to specified listener object
***
## createJob
### Usage
`HotGlue.createJob(flowId, tenantId, startDate)`
### Parameters
| Name | Type | Required | Description |
| ----------- | ------------------- | -------- | ---------------------------------------------------------------------------- |
| `flowId` | `string` | Yes | ID of flow |
| `tenantId` | `string` | Yes | ID of user |
| `startDate` | `string` (ISO date) | No | Optional. Used to override start date of the job. ex: `2022-10-16T00:00:00Z` |
### Response
Returns a Promise which must be awaited or assigned a callback to extract relevant data
```json JSON theme={null}
{
"job_id": "lmaEbA",
"env_id": "dev.example-env.hotglue.xyz",
"job_name": "test_job:_V-vgdlLN",
"tenant": "default",
"started_by": "default",
"flow": "l8odS2mce",
"s3_root": "default/flows/l8odS2mce/jobs/lmaEbA",
"start_time": "2020-12-30T18:01:01.828266+00:00",
"state": {},
"tap": "quickbooks:sandbox",
"status": "ETL_FAILED",
"message": "ETL error...",
"last_updated": "2020-12-30T20:31:00.081282+00:00"
}
```
### Description
Convenience function wrapping the hotglue API to run a job for the user.
## close()
### Usage
```js theme={null}
const { link, close } = useHotglue()
function onClick() {
link(tenantId, flowId, sourceId, false, {
hideBackButtons: true,
listener: {
onSourceLinked: () => {
close();
}
}
})
}
```
### Description
Closes the hotglue widget.
## setOptions
### Usage
```js theme={null}
const { setOptions } = useHotglue()
setOptions({
hideBackButtons: true,
listener: {
onSourceLinked: (source, flow) => console.log('Source linked!')
}
})
```
### Parameters
| Name | Type | Description |
| ------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| options | `Options` | Object containing widget configuration options. See [available options](/connection-methods/embedded-widget/options) for complete reference. |
### Description
Updates the current widget configuration with new options. This function allows you to widget behavior globally. The options object can contain any of the supported widget configuration parameters.
### Available Options
The `options` parameter accepts an object with the following properties:
| Option | Type | Description |
| -------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `hideBackButtons` | `boolean` | Hides back buttons in the widget. Useful for preventing users from navigating away from specific flows. |
| `listener` | `object` | Object containing event listeners. See [listener options](/connection-methods/embedded-widget/options/listener) for available events. |
| `multipleSources` | `boolean` | Allows tenants to connect multiple distinct connectors in the same flow. |
| `flow` | `string` | Opens the widget directly to a specific flow instead of showing the flow list. |
| `flowFilter` | `function` | Function to filter which flows are displayed. |
| `localization` | `object` | Object containing text overrides for widget UI elements. |
| `createMetadata` | `object` | Object containing metadata to be created with new connections. |
| `customFieldMapping` | `object` | Object containing custom field mapping configuration. |
### Example
```js theme={null}
const { setOptions, openWidget } = useHotglue()
// Configure widget options
setOptions({
hideBackButtons: true,
multipleSources: true,
flow: "h8Dksj2",
listener: {
onSourceLinked: (source, flowId, tenantId) => {
console.log(`Source ${source.name} linked to flow ${flowId}`)
},
onWidgetClose: () => {
console.log('Widget closed')
}
},
localization: {
startingScreen: {
header: "Connect Your Data",
subtitle: "Choose your integration below"
}
}
})
// Open widget with the configured options
openWidget('user-123')
```
***
## setSchema
### Usage
```js theme={null}
import { useHotglue } from '@hotglue/widget'
const { setSchema, openWidget } = useHotglue()
const schemas = [
{
flowId: 'flow_123',
schema: [
{
table: 'Leads',
fields: [
{ id: 'first_name', name: 'First Name' },
{ id: 'last_name', name: 'Last Name' },
{ id: 'email', name: 'Email' }
]
}
]
}
]
setSchema(schemas, { enforceOneToOneMapping: true })
openWidget('user-123')
```
### Parameters
| Name | Type | Description |
| --------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `schemas` | `Array` | Array of flow-level schema definitions. Each item includes `flowId` and a `schema` array with `table` and `fields` (`id`, `name`). |
| `options` | `SchemaOptions` | Optional behavior overrides for mapping. Currently supports `enforceOneToOneMapping` (`boolean`). |
### Description
Enables the custom mapping component and sets the source schema for the widget at runtime when using `@hotglue/widget` in React. Use this to define the fields your users map from before opening the widget.
When `enforceOneToOneMapping` is `true`, each source field can only map to one target field, preventing duplicate mappings in the UI.
For full schema structure details, see [custom field mapping](/connection-methods/embedded-widget/options/custom-field-mapping).
***
# Magic Links
Source: https://docs.hotglue.com/connection-methods/magic-links
Connect your customers to integrations with powerful links
# Overview
Magic Links are a streamlined way to connect your customers to integrations using a customizable URL. This eliminates the need to embed hotglue's widget, manage JWTs, or implement custom authentication workflows.
Magic Links allow you to:
* Generate secure, shareable URLs for integration setup
* Customize the appearance to match your brand
* Control which flows and connectors users can access
* Track and manage user connections
# Quick Start Guide
## 1. Brand your magic link
1. Go to **Settings** > **Widget**
2. Select your brand color and fonts
3. Go to **Settings** > **Magic Link**
4. Add your logo, with a title and description for your page.
5. Add custom helper buttons
## 2. Add a custom domain (Pro Plan)
If you don't see Custom Domain settings, ask the hotglue team to enable it!
1. **Choose Domain:**
* Go to **Settings > Magic Link**.
* Enter the full subdomain to deploy the magic link to (e.g., `links.example.com`).
2. **Verify Ownership:**
* Add the provided CNAME record via your DNS provider.
* Make sure you turn off proxying for the CNAME, if it's on by default.
3. **Route Traffic:**
* Once the first CNAME is detected, you will get a second CNAME record.
* Add the second record to route traffic through our secure servers.
It may take up to 10 minutes for your domain to propogate. If you are having trouble, ask the hotglue team!
## 3. Generate a Magic Link via your dashboard
1. Go to **Tenants** > **Create Magic Link**
2. Enter tenant ID (required)
3. To limit tenants to particular flows or connectors, select flows and connectors to display (optional)
4. Click a "Generate Link"
5. Send it to a customer! 🚀
## 4. Generate a Magic Link via API
To try out your own requests, check out the [API reference for Magic links](/api-reference/manage-tenants/create-magic-link).
1. `POST {env_id}/magicLink` with your **Personal Access Token** or **Secret API Key**, along with a `tenant` ID.
```bash Basic Magic Link theme={null}
curl --request POST \
--url https://api.hotglue.com/{env_id}/magicLink \
--header 'Content-Type: application/json' \
--header 'x-api-key: ' \
--data '{
"tenant": "test-user",
"type": "all"
}'
```
2. Optionally, restrict your tenant to a specific flow\...
```bash Flow-locked magic link theme={null}
curl --request POST \
--url https://api.hotglue.com/{env_id}/magicLink \
--header 'Content-Type: application/json' \
--header 'x-api-key: ' \
--data '{
"tenant": "test-user",
"flow": "",
"type": "flows"
}'
```
... or a specific connector
```bash Connector-locked magic link theme={null}
curl --request POST \
--url https://api.hotglue.com/{env_id}/magicLink \
--header 'Content-Type: application/json' \
--header 'x-api-key: ' \
--data '{
"tenant": "test-user",
"flow": "",
"entityId": "",
"type": "connector"
}'
```
3. Any of the above requests will return a `url` that you can share with customers.
```example Response theme={null}
{
"url": "https://connect.hotglue.com/?token=XXXXXXXXXXXXXXXXXXXXX"
}
```
## 5. Advanced settings
When generating a Magic Link, you can pass additional `options` to customize the integration experience. You can use any `options` control that's available to the React widget:
```typescript theme={null}
{
"tenant": "test-user",
"type": "all",
"options": {
// Your configuration options here
}
}
```
### Commonly used Options
* `checkLink` - Never show the configuration popup to your user. Just let the authorize.
* [`schemas`](/connection-methods/embedded-widget/options/custom-field-mapping) - Enable custom field mapping
* [`tenantMetadata`](/connection-methods/embedded-widget/options/create-metadata) - Add additional metadata about your customers, like company names
* [`listener`](/connection-methods/embedded-widget/options/listener) - Take action when users connect
* [`localization`](/connection-methods/embedded-widget/options/override-default-text) - Custom text and language settings
* [`multipleSources/multipleConnectors`](/connection-methods/embedded-widget/options/allow-multiple-sources) - Allow users to connect multiple integrations
* [`hideBackButtons`](/connection-methods/embedded-widget/options/hide-back-buttons) - Remove back navigation buttons
* `nextStep` - Define next step in flow
### Example Usage
The below Magic Link generation request would create a link that:
* Displays a mapping module to the user
* Redirects the user to the mapping module after they link
```bash theme={null}
curl --request POST \
--url https://api.hotglue.com/{env_id}/magicLink \
--header 'Content-Type: application/json' \
--header 'x-api-key: ' \
--data '{
"tenant": "test-user",
"type": "all",
"options": {
"nextStep": mapping,
"schemas": [
{
"flowId": "z_hoiFY_5",
"schema": [
{
"table": "Leads",
"fields": [
{
"id": "first_name",
"name": "First Name"
},
{
"id": "email",
"name": "Email"
}
]
}
]
}
]
}
}'
```
For detailed documentation on the documented options, click the links above or visit our [Options Reference](/connection-methods/embedded-widget/options).
## Tips
* Decide on a good convention for tenant IDs--it will be harder to change later! Org IDs that you use in other parts of your product will work well.
* Use the customizable buttons to link to documentation and your support.
Need help? Ask the hotglue team!
# Abicart
Source: https://docs.hotglue.com/connectors/abicart
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Abicart](https://abicart.se) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-abicart](https://gitlab.com/hotglue/tap-abicart) |
| Tap Metrics |
Usage: Success Rate:
|
# Abra
Source: https://docs.hotglue.com/connectors/abra
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Abra](https://abra.eu) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-abra](https://gitlab.com/hotglue/tap-abra) |
| Tap Metrics |
Usage: Success Rate:
|
# ActiveCampaign
Source: https://docs.hotglue.com/connectors/activecampaign
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [ActiveCampaign](https://activecampaign.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Triggers | Supported |
| Tap Repo | [https://github.com/hotgluexyz/tap-activecampaign](https://github.com/hotgluexyz/tap-activecampaign) |
| Target Repo | [https://gitlab.com/hotglue/target-activecampaign](https://gitlab.com/hotglue/target-activecampaign) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the ActiveCampaign connector.
The first thing you need to do to access your ActiveCampaign API url and API token is log in to [ActiveCampaign](https://www.activecampaign.com/login).

Once you are logged in, you should go ahead and click on the Settings button in the bottom left side of the page.

Next, you should now go ahead and click on the Developer tab within your settings.

On this page, you will be able to find both your ActiveCampaign API url and your API key. Copy these credentials into hotglue.
# Azure Active Directory
Source: https://docs.hotglue.com/connectors/activedirectory
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Azure Active Directory](https://azure.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-activedirectory](https://github.com/hotgluexyz/tap-activedirectory) |
| Tap Metrics |
Usage: Success Rate:
|
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------ | :-------- |
| [v0.0.2](https://github.com/hotgluexyz/tap-activedirectory/releases/tag/v0.0.2) | bug fixes |
| [v0.0.1](https://github.com/hotgluexyz/tap-activedirectory/releases/tag/v0.0.1) | |
# Google Adwords
Source: https://docs.hotglue.com/connectors/adwords
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Google Adwords](https://ads.google.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-adwords](https://github.com/hotgluexyz/tap-adwords) |
| Tap Metrics |
Usage: Success Rate:
|
# Tap Changelog
| Version | Notes |
| :--------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ |
| [v1.12.1 - Use standard client\_id and client\_secret config keys](https://github.com/hotgluexyz/tap-adwords/releases/tag/v1.12.1) | Use `client_id` and `client_secret` instead of `oauth_client_id` to conform with pattern of other taps. |
# Affinity
Source: https://docs.hotglue.com/connectors/affinity
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Affinity](https://affinity.co) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-affinity](https://gitlab.com/hotglue/tap-affinity) |
| Target Repo | [https://gitlab.com/hotglue/target-affinity](https://gitlab.com/hotglue/target-affinity) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Agile CRM
Source: https://docs.hotglue.com/connectors/agilecrm
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Agile CRM](https://agilecrm.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-agilecrm](https://gitlab.com/hotglue/tap-agilecrm) |
| Tap Metrics |
Usage: Success Rate:
|
# Airtable
Source: https://docs.hotglue.com/connectors/airtable
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Airtable](https://airtable.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-airtable](https://github.com/hotgluexyz/tap-airtable) |
| Target Repo | [https://github.com/hotgluexyz/target-airtable](https://github.com/hotgluexyz/target-airtable) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Airtable connector.
The first thing you will need to do get your Airtable credentials is make an Airtable account. You can [make a free account (or sign up for a paid account) at this link](https://airtable.com/pricing). If you already have an account, you can [log in at this link](https://airtable.com/login).
## Personal API Key
First, we are going to go through how to find your personal API key.

Once you have logged in to Airtable, you will be shown the home page of the Airtable platform. In the top right corner, there is an icon. Go ahead and click that icon.

Now go ahead and click on the Account tab from the drop down.

On this page, you can see that you have your own personal API key. You should copy that key into the hotglue admin panel where you should be putting in your credentials for your personal API key.
## Airtable Base ID
To get your Airtable Base ID, first make sure that you are logged in to your Airtable account. Once you are, head to the [Airtable Standard API page](https://airtable.com/api).

Now go ahead and select which Base you want to connect to - in this case, I am going to select my Demo base.

You will now be on this page where you are able to get the Airtable Base ID. Copy that ID and paste it in the corresponding spot in hotglue.
## Airtable Table Name
Once again, to get your Airtable table name, make sure you are logged in to Airtable. You shoul be on the home screen of Airtable.

From the home page, go ahead and select the same base that you previously got the ID for.

In the top left corner, you will be able to find the name of the table. If you have multiple tables in one base, make sure you write the name of the table you want your data to end up in.
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- |
| [v0.0.3 - Catalog issues resolved](https://github.com/hotgluexyz/tap-airtable/releases/tag/v0.0.3) | Update catalog handling to conform to Singer spec. Metadata property is now correctly created + schema is used properly. |
# Target Changelog
| Version | Notes |
| :--------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- |
| [v0.0.2 – Remove table\_name parameter](https://github.com/hotgluexyz/target-airtable/releases/tag/v0.0.2) | Rather than use a static `table_name` parameter, we will handle an arbitrary # of streams by using the `stream_name` as the `table_name` in Airtable |
# Altium 365
Source: https://docs.hotglue.com/connectors/altium
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Altium 365](https://altium.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-altium](https://gitlab.com/hotglue/tap-altium) |
| Tap Metrics |
Usage: Success Rate:
|
# Amazon Ads
Source: https://docs.hotglue.com/connectors/amazon-advertising
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Amazon Ads](https://advertising.amazon.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-amazon-ads](https://gitlab.com/hotglue/tap-amazon-ads) |
| Tap Metrics |
Usage: Success Rate:
|
# Amazon Seller
Source: https://docs.hotglue.com/connectors/amazon-seller
# Connector Details
| Name | Value |
| :------------- | :------------------------------------------------------------------------------------------- |
| Platform | [Amazon Seller](https://sellercentral.amazon.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-amazon-seller](https://gitlab.com/hotglue/tap-amazon-seller) |
| Tap Metrics |
Usage:
|
| Unified Schema | [Supported in Ecommerce Unified Schema.](https://hotglue.com/docs/unified) |
# Credentials Setup
The Amazon Seller connector utilizes the Selling Partner API to fetch your customers' selling data.
1. To start, you will need to [register as a Public SP-API Developer](https://developer-docs.amazon.com/sp-api/docs/register-as-a-public-developer?ld=NSGoogle\&pageName=US%3ASPDS%3ASPAPI-getting-started-guide).
2. Once you are registered and create your first app, you will receive three credential strings:
1. Your App ID (e.g.`amzn1.sp.solution.<...>` )
2. Your LWA Client ID (e.g.`amzn1.application-oa2-client.<...>` )
3. Your LWA Client Secret (e.g. `amzn1.oa2-cs.v1.<...>` )
3. Once you have your credentials, go to Settings > Connectors.
1. Open `Bi-Directional Connectors` (V2 flows) or `Sources & Targets` (V1 flows) depending on the flow type that you use.
2. If modifying a Connector, add your LWA Client ID to the definition via `options.config.lwa_client_id`.
3. If modifying a Source, add your LWA Client ID to the definition via `config.lwa_client_id`.
5. Finally, go to your flow, add Amazon Seller, and add your `App ID` and `LWA Client Secret` as the Client ID and Client Secret.
6. After clicking save, you will go through authorization of your test shop. This "enables" the Amazon Seller Central connector. After a successful authorization, Amazon Seller is ready to be authorized by your users!
# Amazon Vendor Central
Source: https://docs.hotglue.com/connectors/amazon-vendor-central
# Connector Details
| Name | Value |
| :---------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Amazon Vendor Central](https://vendorcentral.amazon.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-amazon-vendor-central](https://gitlab.com/hotglue/tap-amazon-vendor-central) |
| Tap Metrics |
Usage:
|
# Amplitude
Source: https://docs.hotglue.com/connectors/amplitude
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Amplitude](https://amplitude.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-amplitude](https://gitlab.com/hotglue/tap-amplitude) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Amplitude connector.
# Obtain your Client ID and API Key
The first thing you need to do is log in to [Amplitude](https://analytics.amplitude.com/login).

The screen will appear where you can enter the organization name and click on Log In button.

Now, you should enter the credentials and hit the Log In button.

On this page, click on the Settings button.

Click on Project on the right side breadcrumb.

Select the project name. Here I am selecting Hotglue.

You can get API key on this page.

Click on the show **button**, you can get the Secret key.
Here are the credentials you need to plug into hotglue!
# API
Source: https://docs.hotglue.com/connectors/api
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [API](https://api) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Target Repo | [https://github.com/hotgluexyz/target-api](https://github.com/hotgluexyz/target-api) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Overview
The API connector lets you move data between your product and HTTP endpoints via hotglue. You can use it as a **target** to send records to an API, or as a **source** to push JSON data into a hotglue write job.
## Writing data to an API endpoint
As a target, the API connector sends data to a configured endpoint as JSON `POST` requests. Configure the endpoint URL, authentication, and other settings in your flow, and hotglue will deliver records from write jobs to that destination.
The API connector's write behavior is powered by [target-api](https://github.com/hotgluexyz/target-api), a hotglue maintained Singer target. To see all supported settings and capabilities, view the repository's [README](https://github.com/hotgluexyz/target-api).
## Pushing data via the API source
As a source, the API connector does not pull data from arbitrary external APIs. Instead, your product pushes data into hotglue, which writes it to the configured target. There are two ways to do this:
### POST /jobs endpoint
Send records in the `state` field of a [`POST /jobs`](/key-concepts/jobs/write-jobs#trigger-a-write-job-via-api) request. hotglue starts the write job when you call the endpoint, but the records are exported inside the job—not in the API response itself. You won't receive per-record success or failure in the response; check results in the hotglue dashboard or via the jobs API after the job completes.
Use this approach when you need to send **many records at once** or want **universal support across all targets**.
See [Trigger a write job via API](/key-concepts/jobs/write-jobs#trigger-a-write-job-via-api) for request examples and v1/v2 flow details.
### Real-time write
Send a record to the [real-time write endpoint](/api-reference/real-time/write). hotglue writes the record synchronously and returns success or failure directly in the API response.
Use this approach when you need **immediate feedback** on a single record write—for example, confirming a contact was created in a tenant's CRM before showing success in your product. Real-time write is supported for many targets, but not all, which differs compared to the POST /jobs endpoint approach.
See the [real-time write API reference](/api-reference/real-time/write) for request format and response details.
## Reading from external APIs
The API source does **not** support fetching data from arbitrary third-party APIs. It is designed for pushing data from your product into hotglue, not for extracting data from other systems.
If you need to read data from a custom HTTP endpoint, build a custom Singer tap to extract the data. See [Creating Singer taps](/custom-connectors/creating-singer-taps) for instructions on scaffolding a tap with the hotglue cookiecutter template and HotglueSingerSDK.
# Target Changelog
| Version | Notes |
| :----------------------------------------------------------------------- | :-------- |
| [v0.0.15](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.15) | |
| [v0.0.14](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.14) | |
| [v0.0.13](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.13) | |
| [v0.0.12](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.12) | |
| [v0.0.11](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.11) | |
| [v0.0.10](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.10) | bug fixes |
| [v0.0.9](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.9) | |
| [v0.0.8](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.8) | |
| [v0.0.7](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.7) | |
| [v0.0.6](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.6) | |
| [v0.0.5](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.5) | |
| [v0.0.4](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.4) | |
| [v0.0.3](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.3) | |
| [v0.0.2](https://github.com/hotgluexyz/target-api/releases/tag/v0.0.2) | |
# AppsFlyer
Source: https://docs.hotglue.com/connectors/appsflyer
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [AppsFlyer](https://appsflyer.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/blotoutio/tap-appsflyer](https://github.com/blotoutio/tap-appsflyer) |
| Target Repo | [https://github.com/hotgluexyz/target-appsflyer](https://github.com/hotgluexyz/target-appsflyer) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the AppsFlyer connector.
# Obtain your AppsFlyer API Key and App ID
The first thing you need to do is log in to [AppsFlyer](https://hq1.appsflyer.com/auth/login). They have a free tier, so if you don't have an account, you can make one.

Your home page should look something like this. On the top right side of your screen, you should click the **Add app** button.


You should now be asked a few questions about how you would like your app configured. I am going to select the Mobile option, the iOS option, and create an **App ID**. Make sure to copy this down as this is one of the credentials you need to put into hotglue!

Now that you are done configuring your app, go ahead and select **Add my app**.

Now it will tell you that you successfully made an app - go ahead and click the **Done** button.

As you can see, your should be on your dashboard. You should click into it.

You should scroll on the left handed tool bar until you find the API Access tab.

On the API access page, click the banner near the top of the page to head to the API Tokens page.

Here, you have access to both API tokens. Make sure to use **API token V1.0** when inputting your API token into hotglue!
# App Store Connect
Source: https://docs.hotglue.com/connectors/appstore
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [App Store Connect](https://apple.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-appstore](https://github.com/hotgluexyz/tap-appstore) |
| Tap Metrics |
Usage: Success Rate:
|
# Asana
Source: https://docs.hotglue.com/connectors/asana
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Asana](https://asana.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-asana](https://github.com/hotgluexyz/tap-asana) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Asana connector.
# Obtain your Asana OAuth Client ID and OAuth Client Secret
To create an OAuth application, get started by [logging into Asana](https://app.asana.com/-/login).
Once logged in, you can navigate to the [Developer Dashboard](https://app.asana.com/0/my-apps) and create a new OAuth app.
Once created, navigate to the OAuth page. Take note of the Client ID and Client Secret, and add the following as a Redirect URL:
```
https://hotglue.xyz/callback
```
Next, you will need to select scopes. This depends on your use case for Asana. Take note of the scopes that you select here, as you will need to enter these in hotglue.
Lastly, before going live with Asana, you will need to ensure that your app is set to "Any Workspace" in the "Manage Distribution" tab. This will ensure that your customers are able to authorize the connection.
# Set up Asana in Hotglue
In hotglue, you will need to start by updating Asana's OAuth URL via your connector settings. You will update the `tap_url` if updating **Connectors**, or the `auth_url` if updating **Sources**/**Targets**. If you're not sure which you should be updating, feel free to reach out or [consult our docs](https://docs.hotglue.com/key-concepts/connectors/connectors).
To update, take the scopes that you added to your Asana OAuth app, and append them via the `scope=` parameter. For example, the below tap\_url would request "projects" and "tasks" permissions from your customers:
```
"tap_url": "https://app.asana.com/-/oauth_authorize?response_type=code&scope=projects:read tasks:read"
```
Once that's set, you're good to go! Go back to your flow, add Asana to it with your new Client ID and Client Secret, and authorize to verify the connection.
# Auth0
Source: https://docs.hotglue.com/connectors/auth0
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Auth0](https://auth0.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-auth0](https://gitlab.com/hotglue/tap-auth0) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Auth0 connector.
## Client ID, Client Secret, and Domain
The first thing you need to do is log in to [Auth0](https://auth0.auth0.com/u/login/identifier?state=hKFo2SA1WnJra005U1lUdmtZSy0wb25UaXB3cXlrenNrQTlxSqFur3VuaXZlcnNhbC1sb2dpbqN0aWTZIDVsMDQ5d24xLXNickt5enhMVVRuLUVKZ1V2bERzcFJ2o2NpZNkgYkxSOVQ1YXI2bkZ0RE80ekVyR1hkb3FNQ000aU5aU1Y). They have a free trial, so if you don't have an account, you can make one.

Your home page should look something like this. On the top left side of your screen, you should click the Applications option from the navigation menu.

Now, you should select Applications again from the resulting drop down.

On this page, click the Create Application button on the upper right side.

You should name the application your company name, and select the Machine to Machine Applications option. This is very important as you must select the Machine to Machine option.

You will then be prompted to pick an API for the app. Click on the drop down option.

You should then go ahead and select the Auth0 Management API.

You will then be asked to enable certain permissions for you app. Based on what data you want to be able to pull, this will vary.

Since I just want to read users information, I will select the two read:users scopes. If you need to read additional data, make sure to include that with your checked off scopes! Once you are done, click Authorize.

Now you will be on this page. You should head to the Settings tab of the app.

On this page, you have all three credentials you need to input into hotglue. The Auth0 Domain, the Auth0 Client ID, and the Auth0 Client Secret! Go ahead and copy these credentials into hotglue.
# AWS Cognito
Source: https://docs.hotglue.com/connectors/aws-cognito
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [AWS Cognito](https://aws.amazon.com/cognito) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-aws-cognito](https://gitlab.com/hotglue/tap-aws-cognito) |
| Tap Metrics |
Usage: Success Rate:
|
# Bexio
Source: https://docs.hotglue.com/connectors/bexio
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Bexio](https://bexio.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-bexio](https://gitlab.com/hotglue/tap-bexio) |
| Target Repo | [https://gitlab.com/hotglue/target-bexio](https://gitlab.com/hotglue/target-bexio) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# BigCommerce
Source: https://docs.hotglue.com/connectors/bigcommerce
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [BigCommerce](https://bigcommerce.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-bigcommerce](https://gitlab.com/hotglue/tap-bigcommerce) |
| Target Repo | [https://gitlab.com/hotglue/target-bigcommerce](https://gitlab.com/hotglue/target-bigcommerce) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
| Unified Schema | Supported in [Ecommerce Unified Schema](https://hotglue.com/docs/unified). |
# Credentials Setup
Follow the steps below to get the credentials you need to use the BigCommerce connector.
# Obtain your Consumer Key pair
To get your key pair for BigCommerce, you are first going to need to log in to [BigCommerce](https://login.bigcommerce.com/login) and navigate to the home page.

Navigate to Advanced Settings on the left-sided nav bar.

From the resulting drop down, select API Accounts.

Click on Create API account in the top right hand corner.

Input App name (should be your company name) and other fields. Once done, click the Save button.

Copy the Client ID and Access token and Click on Done.

Store hash has can be found on Home → API Accounts, as pictured above.
That's it! Now you have all the credentials needed for hotglue to connect to the BigCommerce API.
# BigQuery
Source: https://docs.hotglue.com/connectors/bigquery
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [BigQuery](https://cloud.google.com/bigquery) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-bigquery](https://gitlab.com/hotglue/tap-bigquery) |
| Target Repo | [https://github.com/hotgluexyz/target-bigquery](https://github.com/hotgluexyz/target-bigquery) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the BigQuery connector.
# How to get your BigQuery credentials
## Enable the BigQuery API
First and foremost, make sure you are logged in to the correct Google account that you would like to access BigQuery from. Once you're logged in to the correct Google account, head to the [Google Cloud Platfrom Web Console](https://console.cloud.google.com).
Once you are on the home page of GCP's Web Console, head to the navigation bar on the left side of the screen. Once you open the Navigation bar, head to the **APIs & Services** tab, and select **Library** from the resulting drop down.

This will take you to a page where you should input **BigQuery** in the search box. Once it pops up, go ahead and click on it.

Now, go ahead and click the **Enable** button in order to enable the **BigQuery API**.

## Authenticating with a service account
It is recomended that you use a service account with the BigQuery target. To create service account credentials, take the following steps.
Use the navigation bar on the left again to navigate to the **APIs & Services** tab and select **Credentials** from the resulting drop down menu. Once you are on the **Credentials** page, click the **Create Credentials** button at the top of the page, which will trigger a drop down menu. From that drop down menu, go ahead and select **Service Account**.

Under the **Service account details**, title the account target-bigquery and click the **Create** button.

Under **Grant this service account access to project**, make sure that you have two roles. The first role should allow the service account to be a **BigQuery Data Editor**. This allows the target to edit the contents of the data sets (write permissions). Make sure that the second role is **BigQuery Job User**. This is a bit self explanatory, it allows the target to run jobs.

Now, using the navigation panel again, head back to the APIs & Services tab and go the **Credentials** tab within the tab. You should see the service account you just created near the bottom of your screen. Go and click on it.

Near the bottom of the page, you should go ahead and click the **Add Key** button which will prompt a dropdown. Once it does this, click **Create new key**.

Select **JSON** for your private key and click **Create**.

You should go ahead and open the file. Make sure you keep this somewhere safe. This file holds the credentials that you should use to connect your BigQuery account as a target in hotglue.

These are the credentials that are relevant for configuring your hotglue target. Paste them into their corresponding places in hotglue and you are all set!
```json theme={null}
{
"type": "service_account",
"project_id": "acme",
"private_key_id": "1**********************************f",
"private_key": "-----BEGIN PRIVATE KEY-----\n*************\n*****************************\n************************n/*************************\n******************************\n*************************\n************************************\n*******************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n-----END PRIVATE KEY-----\n",
"client_email": "***********@acme.iam.gserviceaccount.com",
"client_id": "1************7",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/**************image
40acme.iam.gserviceaccount.com"
}
```
# Target BigQuery
## Config
In addition to the BigQuery credentials above, you will need to specify the dataset the target should write to:
```json theme={null}
{
"type": "service_account",
"project_id": "acme",
"private_key_id": "1**********************************f",
"private_key": "-----BEGIN PRIVATE KEY-----\n*************\n*****************************\n************************n/*************************\n******************************\n*************************\n************************************\n*******************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n**********************************\n-----END PRIVATE KEY-----\n",
"client_email": "***********@acme.iam.gserviceaccount.com",
"client_id": "1************7",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/**************image
40acme.iam.gserviceaccount.com",
"dataset_id": "id-of-dataset"
}
```
## target-tables-config: Set up partioning and clustering
Target-BigQuery also supports an optional `target-tables-config.json` which can be written during the ETL phase.
The config allows you to detail partioning and clustering logic for particular streams.
### Partitioning background
A [partitioned table](https://cloud.google.com/bigquery/docs/partitioned-tables) is a special table that is divided into
segments, called partitions, that make it easier to manage and query your data. By dividing a large table into smaller
partitions, you can:
* improve query performance,
* control costs by reducing the number of bytes read by a query.
You can partition BigQuery tables by:
* Ingestion time: Tables are partitioned based on the data's ingestion (load) time or arrival time.
* Date/timestamp/datetime: Tables are partitioned based on a TIMESTAMP, DATE, or DATETIME column.
* Integer range: Tables are partitioned based on an integer column.
### Clustering background
* When you create a clustered table in BigQuery, the table data is automatically organized based on the contents of one
or more columns in the table’s schema.
* The columns you specify are used to colocate related data.
* When you cluster a table using multiple columns, the order of columns you specify is important. The order of the
specified columns determines the sort order of the data.
* Clustering can improve the performance of certain types of queries such as queries that use filter clauses and queries
that aggregate data.
* You can cluster up to 4 columns in a table
### Replication Methods
There is also an optional parameter `replication_method` which can be used to determine the upserting behavior for a particular stream.
Possible values are:
* `append`: Adding new rows to the table (Default value)
* `truncate`: Deleting all previous rows and uploading the new ones to the table
* `incremental`: **Upserting** new rows into the table, using the **primary key** given by the tap connector
(if it finds an old row with same key, updates it. Otherwise it inserts the new row)
### Example `target-tables-config.json`
To add partioning and clustering to a given stream, you can specify the `partition_field` and `cluster_fields` values respectively.
```json theme={null}
{
"streams": {
"contacts": {
"partition_field": "updated_at",
"cluster_fields": ["type", "status", "customer_id", "transaction_id"]
},
"companies": {
"replication_method": "truncate"
}
}
}
```
## Example ETL Script
```python theme={null}
import gluestick as gs
import os
# Define standard Hotglue directories
ROOT_DIR = os.environ.get("ROOT_DIR", ".")
INPUT_DIR = f"{ROOT_DIR}/sync-output"
OUTPUT_DIR = f"{ROOT_DIR}/etl-output"
# Write a target target-tables-config if desired
with open(f"{OUTPUT_DIR}/target-tables-config.json", "w") as fp:
json.dump(
{
"streams": {
"GeneralLedgerCashReport_default": {"replication_method": "truncate"},
"BalanceSheetReport": {"replication_method": "truncate"},
"CashFlowReport": {"replication_method": "truncate"},
"DailyCashFlowReport": {"replication_method": "truncate"},
}
},
fp,
)
# Read sync output
input = gs.Reader()
# Get tenant id
tenant_id = os.environ.get('USER_ID', os.environ.get('TENANT', 'default'))
# Iterate through the different streams in the sync output
for key in eval(str(input)):
input_df = input.get(key)
"""
Here we get the key properties, also known as the primary keys.
The database export targets will utilize these primary keys when upserting data.
If you wish to hardcode your choice of primary keys, you can do so here.
"""
key_properties = input.get_pk(key)
# Include tenant_id as a field if desired
input_df["tenant"] = tenant_id
# Write this stream to the OUTPUT directory with the specified key_properties
gs.to_singer(input_df, key, OUTPUT_DIR, keys=key_properties)
```
## Optional config flags
| Property | Type | Description |
| --------------------------------- | ------- | ----------------------------------------------------------------------------------------------- |
| table\_suffix | String | Suffix to be added to the table name. |
| validate\_records | Boolean | If true, validates records before loading. |
| add\_metadata\_columns | Boolean | If true, adds metadata columns to the table. |
| location | String | Specifies the location where the data will be stored. Default is "US". |
| replication\_method | String | Method for replicating data. Options: `append`, `truncate`, `incremental`. Default is `append`. |
| max\_cache | Integer | Maximum number of records to cache before writing to BigQuery. |
| merge\_state\_messages | Boolean | If true, merges state messages. |
| force\_alphanumeric\_table\_names | String | If true, replaces all non-alphanumeric characters in table names with `_` |
# Target Changelog
| Version | Notes |
| :------------------------------------------------------------------------------ | :------------------- |
| [v0.11.10](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.10) | |
| [v0.11.9](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.9) | |
| [v0.11.8](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.8) | |
| [v0.11.7](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.7) | |
| [v0.11.6](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.6) | |
| [v0.11.5](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.5) | |
| [v0.11.4](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.4) | |
| [v0.11.3](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.3) | fix infinite support |
| [v0.11.2](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.2) | |
| [v0.11.1](https://github.com/hotgluexyz/target-bigquery/releases/tag/v0.11.1) | |
# Blackbaud
Source: https://docs.hotglue.com/connectors/blackbaud
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Blackbaud](https://blackbaud.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-blackbaud](https://github.com/hotgluexyz/tap-blackbaud) |
| Target Repo | [https://gitlab.com/hotglue/target-blackbaud](https://gitlab.com/hotglue/target-blackbaud) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
The Blackbaud connector uses the [SKY API](https://developer.blackbaud.com/skyapi/docs/authorization) OAuth 2.0 flow to read from and write to your customers' Blackbaud environments. To use it with hotglue, you need a [SKY Developer account](https://developer.blackbaud.com/skyapi/account), a SKY API subscription key, a registered SKY application, the application's OAuth credentials, and at least one hotglue callback URL configured as a redirect URI.
The person setting this up should be able to create and manage SKY applications in the Blackbaud developer portal, subscribe to the relevant SKY API product, and—if needed—have a Blackbaud user with Marketplace admin permissions connect the application to the relevant environment.
## 1. Create a SKY Developer account
Sign in to the [SKY Developer account](https://developer.blackbaud.com/skyapi/account) portal. If you do not already have a Blackbaud ID, you are prompted to create one when you sign up. See the [SKY API basics](https://developer.blackbaud.com/skyapi/docs/basics/) documentation for more background on developer accounts and Blackbaud IDs.
Once signed in, you land on the Developer account page. From here, you can open **My applications** to create and manage your SKY applications, or **My subscriptions** to manage API subscription keys.
## 2. Get a SKY API subscription key
Blackbaud requires a subscription key on every SKY API request. In the developer portal, open **My subscriptions**, subscribe to the **Standard APIs** product (or the API product that covers the endpoints your integration uses), and copy either the primary or secondary key.
The tap expects this value as `subscription_key`, and Blackbaud sends it on requests as the `Bb-Api-Subscription-Key` header. See Blackbaud's [My subscriptions](https://webfiles-sc1.blackbaud.com/files/support/helpfiles/skydev/content/plat-skydev-subscriptions.html) docs for details on subscribing and finding your keys.
## 3. Create a SKY application
A [SKY application](https://developer.blackbaud.com/skyapi/docs/applications) represents your integration in Blackbaud and is required to make SKY API calls. Creating an application produces the OAuth credentials hotglue needs during authorization.
From **My applications**, click **+ New application** and fill out the required fields:
* **Application name**
* **Application details**
* **Publisher** (public organization name)
* **Application website URL**
An application logo is optional. Click **Save** when you are done.
## 4. Copy OAuth credentials
Open your application and copy the credentials from the application page:
* **Application ID** → hotglue `client_id`
* **Primary application secret** → hotglue `client_secret`
The Application ID is not sensitive and can be shared with Blackbaud admins who need to connect your app. The application secret is sensitive — treat it like a password and do not share it. Blackbaud provides primary and secondary secrets so you can rotate credentials; see [Application secrets](https://webfiles-sc1.blackbaud.com/files/support/helpfiles/skydev/content/plat-skydev-apps-secrets.html) for rotation guidance.
## 5. Configure redirect URIs
In your application settings, open **Redirect URIs** and add the hotglue callback URL for your environment. Blackbaud requires the OAuth `redirect_uri` to match one of your registered URIs exactly, including trailing slashes. See the [Authorization](https://developer.blackbaud.com/skyapi/docs/authorization) and [Redirect URIs](https://help.blackbaud.com/docs/0/assets/skydev/content/plat-skydev-apps-settings-redirect-uris.html) documentation for details.
Add the callback URL that matches where your hotglue environment runs:
```text theme={null}
https://hotglue.xyz/callback
```
If you use a [custom OAuth callback domain](https://docs.hotglue.com/environment-settings/white-label) instead of `hotglue.xyz`, add that callback URL here as well.
## 6. Connect the application in Blackbaud
Before your application can access data in a Blackbaud environment, it must be connected to that environment. If you are integrating with a customer's Blackbaud organization, a user with Marketplace admin permissions must connect the app for you.
To connect the application:
1. Open the [Manage applications](https://help.blackbaud.com/docs/0/assets/marketplace/content/plat-market-manage-apps.html) page in the Blackbaud Marketplace.
2. Use **Connect app** and paste your application's ID.
3. Confirm the connection.
See [Connect an application](https://webfiles-sc1.blackbaud.com/files/support/helpfiles/marketplace/content/plat-market-connect-app.html) for step-by-step instructions. API access is further limited by the consenting user's security permissions within Blackbaud.
If you have access to the SKY Developer Cohort sandbox environment, your application may already be connected and you can skip this step.
## 7. Add Blackbaud to hotglue
Once you have your subscription key, OAuth credentials, and redirect URIs configured:
1. Go to **Settings** > **Connectors** in your hotglue environment.
1. Open **Bi-Directional Connectors** if you use bi-directional flows (`linkedConnectors`), then search for `Blackbaud`.
2. Open **Sources & Targets** if you use one-way source or target flows (`linkedSources` / `linkedTargets`), then search for `Blackbaud`.
2. Add your subscription key to the Blackbaud JSON definition:
* If modifying a **Connector** (v2), set `options.config.subscription_key` to your Blackbaud subscription\_key value.
* If modifying a **Source** or **Target** (v1), set `config.subscription_key` to your Blackbaud subscription\_key value.
3. Save the definition.
See [Connector management](https://docs.hotglue.com/key-concepts/connectors/v2-connectors/management), [Connector settings](https://docs.hotglue.com/key-concepts/connectors/v2-connectors/settings), [Source settings](https://docs.hotglue.com/key-concepts/connectors/v1-sources/settings), and [Target settings](https://docs.hotglue.com/key-concepts/connectors/v1-targets/settings) for details on configuring connectors in your environment.
## 8. Authorize and enable the connector
1. Add Blackbaud to your flow.
2. Enter your Blackbaud **Application ID** as the **OAuth Client ID** and your **Primary application secret** as the **OAuth Client Secret**.
3. Save and complete authorization with a test Blackbaud user. This enables the connector in your environment.
hotglue stores the OAuth `refresh_token` automatically after a successful authorization. You do not need to provide it manually.
After setup, your end users authorize Blackbaud through the standard OAuth consent flow when they link their account.
After this you're all set to go!
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [v0.0.4 - Bump Singer SDK version](https://github.com/hotgluexyz/tap-blackbaud/releases/tag/v0.0.4) | Bump Singer SDK version |
| [v0.0.3 - Avoid making extra requests unless selected in catalog](https://github.com/hotgluexyz/tap-blackbaud/releases/tag/v0.0.3) | - Updated tap to avoid pulling `fundraiser_assignment` and other per-constituent fields unless they have been selected in the catalog |
| [v0.0.2 - Add support for Education, Lifetime Giving, and Fundraiser Assignment](https://github.com/hotgluexyz/tap-blackbaud/releases/tag/v0.0.2) | - Added support for Education, Lifetime Giving, and Fundraiser Assignment - Also added "online\_presence" and "preferred\_name" - Removing "suffix" (which according to the documentation is not part of the schema) |
# Azure Blob Storage
Source: https://docs.hotglue.com/connectors/blob-storage
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Azure Blob Storage](https://azure.microsoft.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-blob-storage](https://github.com/hotgluexyz/tap-blob-storage) |
| Target Repo | [https://github.com/hotgluexyz/target-blob-storage](https://github.com/hotgluexyz/target-blob-storage) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Azure Blob Storage connector.
# How to get your Blob Storage credentials
The Blob Storage requires only a connection string to connect to your Blob Storage.
To find your connection string, log in to your Azure Portal and navigate to [your Storage Accounts Dashboard](https://portal.azure.com/#browse/Microsoft.Storage%2FStorageAccounts),
Next, select your Storage Account, and navigate to **Security + Networking > Access Keys** and copy one of your connection strings.
You'll then paste this connection string directly into the Hotglue dashboard or into a config object, depending on how you are linking your connector.
# Target Blob Storage
## Config
In addition to the `connect_string` parameter, you should specify the following fields when connecting:
```json theme={null}
{
"connect_string": "...",
"container": "...", // Container name to write to
"path_prefix": "...", // Directory to insert files into
"overwrite": true // Whether to overwrite files (defaults False)
}
```
## Example ETL Script
```python theme={null}
import gluestick as gs
import os
import time
# Define standard Hotglue directories
ROOT_DIR = os.environ.get("ROOT_DIR", ".")
INPUT_DIR = f"{ROOT_DIR}/sync-output"
OUTPUT_DIR = f"{ROOT_DIR}/etl-output"
# Read sync output
input = gs.Reader()
# Get tenant id
tenant_id = os.environ.get('USER_ID', os.environ.get('TENANT', 'default'))
# Possible values parquet, singer, csv, json, jsonl
EXPORT_FORMAT = "parquet"
# Iterate through the different streams in the sync output
for key in eval(str(input)):
input_df = input.get(key)
# Include tenant_id as a field if desired
input_df["tenant"] = tenant_id
# Create a unique file name
timestamp = int(time.time()) # Unix Time stamp
file_name = f"{tenant_id}_{key}_{timestamp}"
# Write tenantid_streamname_timestamp.parquet
gs.to_export(input_df, file_name, OUTPUT_DIR, export_format=EXPORT_FORMAT)
```
# Target Changelog
| Version | Notes |
| :------------------------------------------------------------------------------ | :---- |
| [v0.0.1](https://github.com/hotgluexyz/target-blob-storage/releases/tag/v0.0.1) | |
# bol.com
Source: https://docs.hotglue.com/connectors/bol
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [bol.com](https://bol.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-bol](https://gitlab.com/hotglue/tap-bol) |
| Tap Metrics |
Usage: Success Rate:
|
# BQE
Source: https://docs.hotglue.com/connectors/bqe
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [BQE](https://bqe.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/chauncywilson/tap-bqe](https://gitlab.com/chauncywilson/tap-bqe) |
| Tap Metrics |
Usage: Success Rate:
|
# Braintree
Source: https://docs.hotglue.com/connectors/braintree
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Braintree](https://braintreepayments.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/singer-io/tap-braintree](https://github.com/singer-io/tap-braintree) |
| Tap Metrics |
Usage: Success Rate:
|
# Campaign Monitor
Source: https://docs.hotglue.com/connectors/campaign-monitor
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Campaign Monitor](https://campaignmonitor.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-campaign-monitor](https://gitlab.com/hotglue/tap-campaign-monitor) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Campaign Monitor connector.
# Obtain your Client ID and API Key
## Client ID and API Key
The first thing you need to do is log in to [Campaign Monitor](https://login.createsend.com/l?_ga). They have a free trial, so if you don't have an account, you can make one.

Your home page should look something like this. On the top right side of your screen, you should click the account icon.

Now, you should select account settings from the resulting drop down.

On this page, head to the API Keys section.

Here are the credentials you need to plug into hotglue!
# Capsule
Source: https://docs.hotglue.com/connectors/capsulecrm
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Capsule](https://capsulecrm.com) |
| Auth Type | OAuth |
| Direction | Read |
| Triggers | Supported |
| Tap Repo | [https://gitlab.com/hotglue/tap-capsulecrm](https://gitlab.com/hotglue/tap-capsulecrm) |
| Tap Metrics |
Usage: Success Rate:
|
# Chargebee
Source: https://docs.hotglue.com/connectors/chargebee
# Connector Details
| Name | Value |
| :---------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Chargebee](https://chargebee.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-chargebee](https://github.com/hotgluexyz/tap-chargebee) |
| Tap Metrics |
Usage:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Chargebee connector.
To obtain your Chargebee credentials, you must first [login to Chargebee](https://app.chargebee.com/login). If you don't currently have an account, you can make a free one [here](https://www.chargebee.com/trial-signup/?ref=Launch).
## Site Name

Once you do login, you should be greeted with a page similar to this. The first credential you will need for hotglue is your site name. You can find that in the top right hand corner of your screen.
**Note: If you are using a testing account and/or sandbox, your site name will be yoursitename-test. You can see in the example above that the account we are connecting is a test account. If you are not sure if you have a test account, you can also check the url of your site. The beginning of the URL is also your site name.**
## API Key

The next credential you will need is your API key. From the home page, you should click the **Settings** dropdown from the navigation bar on the left hand side.

From the resulting drop down, you should select the **Configure Chargebee tab**.

On this page, scroll down until you get to the **API Keys and Webhooks section**. You should then click on the **API keys** option.

You will now be on a page where you can create new API Keys. You should go ahead and create a new key for hotglue. Do this by click on the **Add API Key** button.

You will now be asked what kind of key you want to create. You should go ahead and select the **Full-Access Key** option.

Now go ahead and name your key **hotglue**. Subsequently, you should click **Create Key**.

Now you have your API Key! Make sure to copy this into hotglue.
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------- |
| [v1.0.33](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.33) | |
| [v1.0.32](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.32) | |
| [v1.0.31](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.31) | Add ramps stream |
| [v1.0.30](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.30) | |
| [v1.0.29](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.29) | |
| [v1.0.27](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.27) | |
| [v1.0.26](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.26) | |
| [v1.0.25](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.25) | |
| [v1.0.24](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.24) | |
| [v1.0.22](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.22) | |
| [v1.0.21](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.21) | |
| [v1.0.20](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.20) | |
| [v1.0.19](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.19) | |
| [v1.0.18](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.18) | |
| [v1.0.17](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.17) | |
| [v1.0.16](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.16) | |
| [v1.0.15](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.15) | |
| [v1.0.14](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.14) | |
| [v1.0.13](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.13) | |
| [v1.0.12](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.12) | |
| [v1.0.11](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.11) | |
| [v1.0.10](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.10) | |
| [v1.0.9](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.9) | |
| [v1.0.8 - Bug fixes](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.8) | - Update tap to handle invalid responses from Chargebee API with retries |
| [v1.0.7 - Add exchange rate to credit notes](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.7) | - Add exchange rate to credit notes |
| [v1.0.2 - Add Product Catalog 2.0 support](https://github.com/hotgluexyz/tap-chargebee/releases/tag/v1.0.2) | Adds support for new Chargebee product catalog |
# Chargify
Source: https://docs.hotglue.com/connectors/chargify
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Chargify](https://chargify.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/singer-io/tap-chargify](https://github.com/singer-io/tap-chargify) |
| Tap Metrics |
Usage: Success Rate:
|
# Cin7
Source: https://docs.hotglue.com/connectors/cin7
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Cin7](https://cin7.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-cin7](https://gitlab.com/hotglue/tap-cin7) |
| Target Repo | [https://gitlab.com/hotglue/target-cin7](https://gitlab.com/hotglue/target-cin7) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# ClickUp
Source: https://docs.hotglue.com/connectors/clickup
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [ClickUp](https://clickup.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/AutoIDM/tap-clickup](https://github.com/AutoIDM/tap-clickup) |
| Target Repo | [https://gitlab.com/hotglue/target-clickup](https://gitlab.com/hotglue/target-clickup) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the ClickUp connector.
## API Key
The first thing you need to do is log in to [ClickUp](https://clickup.com). They have a free tier, so if you don't have an account, you can make one.

Your home page should look something like this. On the bottom left side of the screen, you should click your icon.

You should now see a menu of items. You should go ahead and select the **My Settings** option.

Now you should be in the **My Settings** page. From here, you should scroll down on the left-sided tool bar until you reach the **My Apps** category. Once you've reached the category, select the **Apps** section.

Now, you should be on a page where you can generate an API token. Go ahead and click the **Generate** button in order to create your API Token.

You have now generated your API Token. Go ahead and copy it.

Now you should go ahead and take the credential you generated in put it in hotglue!
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [v0.0.23](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.23) | ## What's Changed \* Patch is\_boolean\_type to fix custom\_fields values by @claudenigma in [https://github.com/AutoIDM/tap-clickup/pull/150](https://github.com/AutoIDM/tap-clickup/pull/150)
## New Contributors \* @claudenigma made their first contribution in [https://github.com/AutoIDM/tap-clickup/pull/150](https://github.com/AutoIDM/tap-clickup/pull/150)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.22...v0.0.23](https://github.com/AutoIDM/tap-clickup/compare/v0.0.22...v0.0.23) |
| [v0.0.22](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.22) | ## What's Changed \* Task time\_estimate can be a floating point number by @mcarriere in [https://github.com/AutoIDM/tap-clickup/pull/147](https://github.com/AutoIDM/tap-clickup/pull/147) \* Release v0.0.22 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/148](https://github.com/AutoIDM/tap-clickup/pull/148)
## New Contributors \* @mcarriere made their first contribution in [https://github.com/AutoIDM/tap-clickup/pull/147](https://github.com/AutoIDM/tap-clickup/pull/147) , thank you!
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.21...v0.0.22](https://github.com/AutoIDM/tap-clickup/compare/v0.0.21...v0.0.22) |
| [v0.0.21](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.21) | ## What's Changed \* Weekly workflow run by @sebastianswms in [https://github.com/AutoIDM/tap-clickup/pull/141](https://github.com/AutoIDM/tap-clickup/pull/141) \* This updates the SDK which fixes a problem where incremental keys were not being automatically added to the selected fields for a stream causing [https://github.com/AutoIDM/tap-clickup/issues/140](https://github.com/AutoIDM/tap-clickup/issues/140)
## New Contributors \* @sebastianswms made their first contribution in [https://github.com/AutoIDM/tap-clickup/pull/141](https://github.com/AutoIDM/tap-clickup/pull/141)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.20...v0.0.21](https://github.com/AutoIDM/tap-clickup/compare/v0.0.20...v0.0.21) |
| [v0.0.20](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.20) | ## What's Changed \* Time Entries docs update by @visch in [https://github.com/AutoIDM/tap-clickup/pull/135](https://github.com/AutoIDM/tap-clickup/pull/135) \* 3.10, 3.11 support by @visch in [https://github.com/AutoIDM/tap-clickup/pull/136](https://github.com/AutoIDM/tap-clickup/pull/136) \* date\_done added by @visch in [https://github.com/AutoIDM/tap-clickup/pull/138](https://github.com/AutoIDM/tap-clickup/pull/138) Thank you to @JohannesRudolph \* label\_fix by @visch in [https://github.com/AutoIDM/tap-clickup/pull/139](https://github.com/AutoIDM/tap-clickup/pull/139) Thank you to @balmasi
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.19...v0.0.20](https://github.com/AutoIDM/tap-clickup/compare/v0.0.19...v0.0.20) |
| [v0.0.19](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.19) | ## What's Changed \* Update test comments by @visch in [https://github.com/AutoIDM/tap-clickup/pull/124](https://github.com/AutoIDM/tap-clickup/pull/124) \* Fixes Schema flattening issues by @visch in [https://github.com/AutoIDM/tap-clickup/pull/129](https://github.com/AutoIDM/tap-clickup/pull/129)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.18...v0.0.19](https://github.com/AutoIDM/tap-clickup/compare/v0.0.18...v0.0.19) |
| [v0.0.18](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.18) | ## What's Changed \* v0.0.17 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/120](https://github.com/AutoIDM/tap-clickup/pull/120) \* Fixed Schema issues @visch in [https://github.com/AutoIDM/tap-clickup/pull/122](https://github.com/AutoIDM/tap-clickup/pull/122) \* Release 0.0.18 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/123](https://github.com/AutoIDM/tap-clickup/pull/123)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.17...v0.0.18](https://github.com/AutoIDM/tap-clickup/compare/v0.0.17...v0.0.18) |
| [v0.0.17](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.17) | ## What's Changed \* State for Tasks by @visch in [https://github.com/AutoIDM/tap-clickup/pull/117](https://github.com/AutoIDM/tap-clickup/pull/117) \* fixed custom fields Double by adding number to the schema by @lpearson-trek10 in [https://github.com/AutoIDM/tap-clickup/pull/116](https://github.com/AutoIDM/tap-clickup/pull/116) \* Dropped support for python 3.6
## New Contributors \* @lpearson-trek10 made their first contribution in [https://github.com/AutoIDM/tap-clickup/pull/116](https://github.com/AutoIDM/tap-clickup/pull/116) . Thank you!
|
| [v0.0.16](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.16) | ## What's Changed \* Fix for time\_entries by @visch in [https://github.com/AutoIDM/tap-clickup/pull/113](https://github.com/AutoIDM/tap-clickup/pull/113) \* v0.0.16 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/115](https://github.com/AutoIDM/tap-clickup/pull/115)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.15...v0.0.16](https://github.com/AutoIDM/tap-clickup/compare/v0.0.15...v0.0.16) |
| [v0.0.15](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.15) | ## What's Changed \* Fixed Lint issues, and removed State from docs by @visch in [https://github.com/AutoIDM/tap-clickup/pull/102](https://github.com/AutoIDM/tap-clickup/pull/102) \* Remove python 3.6 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/107](https://github.com/AutoIDM/tap-clickup/pull/107) \* Added a ref Resolver by @visch in [https://github.com/AutoIDM/tap-clickup/pull/105](https://github.com/AutoIDM/tap-clickup/pull/105) \* Added time entries stream by @visch in [https://github.com/AutoIDM/tap-clickup/pull/110](https://github.com/AutoIDM/tap-clickup/pull/110) \* v0.0.15 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/111](https://github.com/AutoIDM/tap-clickup/pull/111) \* \* Trek10 logo added by @visch in [https://github.com/AutoIDM/tap-clickup/pull/106](https://github.com/AutoIDM/tap-clickup/pull/106) \* \* License update by @visch in [https://github.com/AutoIDM/tap-clickup/pull/103](https://github.com/AutoIDM/tap-clickup/pull/103)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.14...v0.0.15](https://github.com/AutoIDM/tap-clickup/compare/v0.0.14...v0.0.15) |
| [v0.0.14](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.14) | ## What's Changed \* Resolve Issue #92 - Schema Validation Failure by @drewipson in [https://github.com/AutoIDM/tap-clickup/pull/94](https://github.com/AutoIDM/tap-clickup/pull/94) \* Fix schema issue with for shared hierarchy and custom field items by @LucasZielke in [https://github.com/AutoIDM/tap-clickup/pull/96](https://github.com/AutoIDM/tap-clickup/pull/96) \* Added Archived Streams for Lists, Folders, Spaces \* Combined Task Streams
## New Contributors \* @drewipson made their first contribution in [https://github.com/AutoIDM/tap-clickup/pull/94](https://github.com/AutoIDM/tap-clickup/pull/94)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.13...v0.0.14](https://github.com/AutoIDM/tap-clickup/compare/v0.0.13...v0.0.14) |
| [v0.0.13](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.13) | ## What's Changed \* Fixed url param error by @LucasZielke in [https://github.com/AutoIDM/tap-clickup/pull/84](https://github.com/AutoIDM/tap-clickup/pull/84) \* 0.0.13 release by @visch in [https://github.com/AutoIDM/tap-clickup/pull/85](https://github.com/AutoIDM/tap-clickup/pull/85)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.12...v0.0.13](https://github.com/AutoIDM/tap-clickup/compare/v0.0.12...v0.0.13) |
| [v0.0.12](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.12) | ## What's Changed \* Archived bug introduced in v0.0.11 , fixed. Archived tasks split out as archived=true doesn't include non archive… by @visch in [https://github.com/AutoIDM/tap-clickup/pull/81](https://github.com/AutoIDM/tap-clickup/pull/81) \* Added two new streams for \_archived tasks \* 0.0.12 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/82](https://github.com/AutoIDM/tap-clickup/pull/82)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.11...v0.0.12](https://github.com/AutoIDM/tap-clickup/compare/v0.0.11...v0.0.12) |
| [v0.0.11](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.11) | ## What's Changed \* folder\_tasks were missing closed, and subtasks. Both folderless and f… by @visch in [https://github.com/AutoIDM/tap-clickup/pull/77](https://github.com/AutoIDM/tap-clickup/pull/77) \* Version bump 0.0.11 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/78](https://github.com/AutoIDM/tap-clickup/pull/78)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.10...v0.0.11](https://github.com/AutoIDM/tap-clickup/compare/v0.0.10...v0.0.11) |
| [v0.0.10](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.10) | ## What's Changed \* Custom fields can also be jsonobjects, specefically manual\_progress\_t… by @visch in [https://github.com/AutoIDM/tap-clickup/pull/73](https://github.com/AutoIDM/tap-clickup/pull/73) \* 0.0.10 version bump by @visch in [https://github.com/AutoIDM/tap-clickup/pull/75](https://github.com/AutoIDM/tap-clickup/pull/75)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.9...v0.0.10](https://github.com/AutoIDM/tap-clickup/compare/v0.0.9...v0.0.10) |
| [v0.0.9](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.9) | ## What's Changed \* Changed default Python runner for CI to python 3.9 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/63](https://github.com/AutoIDM/tap-clickup/pull/63) \* Followed Stich documentation guidelines by @visch in [https://github.com/AutoIDM/tap-clickup/pull/66](https://github.com/AutoIDM/tap-clickup/pull/66) \* Remove unused lists stream by @visch in [https://github.com/AutoIDM/tap-clickup/pull/67](https://github.com/AutoIDM/tap-clickup/pull/67) \* Added PyPi to ReadMe, and added additional information on the pypi di… by @visch in [https://github.com/AutoIDM/tap-clickup/pull/68](https://github.com/AutoIDM/tap-clickup/pull/68) \* Cleanup unused code, removed file that's not needed by @visch in [https://github.com/AutoIDM/tap-clickup/pull/69](https://github.com/AutoIDM/tap-clickup/pull/69) \* Added Folder Lists for Custom Fields, changing the output tables for … by @visch in [https://github.com/AutoIDM/tap-clickup/pull/70](https://github.com/AutoIDM/tap-clickup/pull/70) \* Bump version to 0.0.9 by @visch in [https://github.com/AutoIDM/tap-clickup/pull/71](https://github.com/AutoIDM/tap-clickup/pull/71)
**Full Changelog**: [https://github.com/AutoIDM/tap-clickup/compare/v0.0.8...v0.0.9](https://github.com/AutoIDM/tap-clickup/compare/v0.0.8...v0.0.9) |
| [v0.0.8](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.8) | Fixed Shared Hierarchy bug that was caught by target-stitch. Two issues solved
1. Upgraded SingerSDK as [https://gitlab.com/meltano/sdk/-/blob/main/CHANGELOG.md#changes-3](https://gitlab.com/meltano/sdk/-/blob/main/CHANGELOG.md#changes-3) was causing key-properties to be null for shared hierarchy 2. Updated the Shared Hirerarchy json to match the data we have been able to see so far. The API docs don't give a lot of insight into what that data is going to look like |
| [v0.0.7 (not released to pypi)](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.7) | Fixed Shared Hierarchy bug that was caught by target-stitch. Two issues solved
1. Upgraded SingerSDK as [https://gitlab.com/meltano/sdk/-/blob/main/CHANGELOG.md#changes-3](https://gitlab.com/meltano/sdk/-/blob/main/CHANGELOG.md#changes-3) was causing key-properties to be null for shared hierarchy 2. Updated the Shared Hirerarchy json to match the data we have been able to see so far. The API docs don't give a lot of insight into what that data is going to look like |
| [v0.0.6](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.6) | Removed date-time format! Thank you @LucasZielke |
| [v0.0.5](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.5) | |
| [v0.0.4](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.4) | |
| [v0.0.3](https://github.com/AutoIDM/tap-clickup/releases/tag/v0.0.3) | |
# Clockify
Source: https://docs.hotglue.com/connectors/clockify
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Clockify](https://clockify.me) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-clockify](https://github.com/hotgluexyz/tap-clockify) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Clockify connector.
## Workspace
The first credential we will grab is the Workspace name. To do that, you need to go and create a Clockify account (there is a free plan that you can utilize).

Once you log in, you will see this page. In the top right will be the name of your workspace. This is the name that you should put into hotglue.
## API Key
To get to API key, you need to remain on the home page of Clockify.

Go to the top right corner and click the circular emblem with the initals of the account owner. This will prompt a drop down.

Next, you will need to head to your Profile settings by clicking on the option from the drop down.

On the Profile settings page, scroll down until you see the API section. You should go ahead and click the Generate button to create an API key. Once it generates, copy it and paste it into hotglue!
# Close
Source: https://docs.hotglue.com/connectors/closeio
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Close](https://close.com) |
| Auth Type | API Keys |
| Direction | Read |
| Triggers | Supported |
| Tap Repo | [https://github.com/singer-io/tap-closeio](https://github.com/singer-io/tap-closeio) |
| Tap Metrics |
Usage: Success Rate:
|
# Google Cloud Storage
Source: https://docs.hotglue.com/connectors/cloud-storage
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Google Cloud Storage](https://cloud.google.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-cloud-storage](https://github.com/hotgluexyz/tap-cloud-storage) |
| Target Repo | [https://github.com/hotgluexyz/target-cloud-storage](https://github.com/hotgluexyz/target-cloud-storage) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------- | :---------------------------------------------------------- |
| [v1.0.4](https://github.com/hotgluexyz/tap-cloud-storage/releases/tag/v1.0.4) | |
| [v1.0.3](https://github.com/hotgluexyz/tap-cloud-storage/releases/tag/v1.0.3) | |
| [v1.0.2 - Fix Path issues](https://github.com/hotgluexyz/tap-cloud-storage/releases/tag/v1.0.2) | - Use pathlib to manage paths correctly |
| [v1.0.1 - Ignore directories](https://github.com/hotgluexyz/tap-cloud-storage/releases/tag/v1.0.1) | Filter out directories returned in `list_blobs` using `key` |
# Confluence
Source: https://docs.hotglue.com/connectors/confluence
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Confluence](https://atlassian.com/software/confluence) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/edgarrmondragon/tap-confluence](https://github.com/edgarrmondragon/tap-confluence) |
| Tap Metrics |
Usage: Success Rate:
|
# ConnectWise
Source: https://docs.hotglue.com/connectors/connectwise
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [ConnectWise](https://connectwise.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/chauncywilson/tap-connectwise](https://gitlab.com/chauncywilson/tap-connectwise) |
| Tap Metrics |
Usage: Success Rate:
|
# Contentful
Source: https://docs.hotglue.com/connectors/contentful
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Contentful](https://contentful.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-contentful](https://gitlab.com/hotglue/tap-contentful) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Contentful connector.
The first thing that you need to do to get your Contentful credentials is to head to your [Contentful account](https://be.contentful.com/login). Make sure that you go ahead and sign into Contentful. If you do not have a Contentful account, you can create one for free.

Once you're logged in to Contentful, head to the Settings option on the top of the page.

From the resulting drop down, select the API Keys option.

On this page, go ahead and select the Content management tokens.

On this page, go ahead and select the "Generate personal token" button.

Now go ahead and name your token something similar to "hotglue token" and then click generate.

You now have your Contentful access token! The next step is to get your Space ID. It is pretty simple.

Your Space ID should be in the URL of your Contentful environment. Go ahead and grab it and paste it into hotglue. You now have your Contentful credentials!
# Copper
Source: https://docs.hotglue.com/connectors/copper
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Copper](https://copper.com) |
| Auth Type | API Keys |
| Direction | Read |
| Triggers | Supported |
| Tap Repo | [https://gitlab.com/hotglue/tap-copper](https://gitlab.com/hotglue/tap-copper) |
| Tap Metrics |
|
# Credentials Setup: Personal Access Token (PAT) or OAuth (recommend)
## PAT Configuration
Go to the [Databricks Website](https://www.databricks.com/) and sign-in\
Click on your user account image on the top right of the screen\
Go to `Settings`\
Go to `User -> Developer`\
Under `Access Tokens`, click on `Manage`\
Then click on `Generate new Token`\
Add a `Comment` for this token, set a life time and under API Scopes select `sql`
Click on `Generate`\
Copy the newly generated token and use it in the hotglue target configuration
## OAuth Configuration
Note: this authentication method is not avaible on Databricks free edition.
Follow the steps below to register the "OAuth App" you need to use the Databricks connector. This is a one-time process to create your OAuth app. Once you add your app credentials to hotglue, your client will just need to login to their Databricks account.
Go to the [Databricks Accounts Console](https://accounts.cloud.databricks.com/)\
On the left menu click on `Settings`\
Then click on the `App Connections` tab\
Click on `Add Connection`\
Enter an application name (example: `HG Test`)\
In Redirect URLs enter `https://hotglue.xyz/callback`\
In `Access Scopes` select `SQL`
Click `Add`\
You will be shown a modal with the Client ID and Client Secret. Copy both values, you'll use it in the hotglue target configuration
# DearSystems
Source: https://docs.hotglue.com/connectors/dearsystems
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [DearSystems](https://dearsystems.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-dearsystems](https://gitlab.com/hotglue/tap-dearsystems) |
| Tap Metrics |
Usage: Success Rate:
|
# Delighted
Source: https://docs.hotglue.com/connectors/delighted
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Delighted](https://delighted.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-delighted](https://gitlab.com/hotglue/tap-delighted) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Delighted connector.
The first thing you need to do is log in to the [Delighted](https://app.delighted.com/signin) portal.

Enter the credentials and click on **Sign in** button.

You can then access your API key by clicking the API header at the bottom of page.

Now you can go ahead and copy the API key into hotglue.
# Dotykacka
Source: https://docs.hotglue.com/connectors/dotykacka
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Dotykacka](https://dotykacka.cz) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-dotykacka](https://gitlab.com/hotglue/tap-dotykacka) |
| Tap Metrics |
Usage: Success Rate:
|
# Microsoft Dynamics 365
Source: https://docs.hotglue.com/connectors/dynamics
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Microsoft Dynamics 365](https://dynamics.microsoft.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-dynamics](https://github.com/hotgluexyz/tap-dynamics) |
| Target Repo | [https://gitlab.com/hotglue/target-dynamics](https://gitlab.com/hotglue/target-dynamics) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
| Unified Schema | Supported in [Sales Unified Schema](https://hotglue.com/docs/unified). |
# Credentials Setup
Follow the steps below to get the credentials you need to use the Microsoft Dynamics 365 connector.
The first thing that you need to do to get your Microsoft Dynamics 365 CRM OAuth credentials is to [login](https://go.microsoft.com/fwlink/?linkid=2083908) to the Azure portal using an account with administrator permission. If you do not have an Azure account, you can create learn how to create one [here](https://docs.microsoft.com/en-us/office/developer-program/microsoft-365-developer-program).

Once in the Azure Portal, select the Azure Active Directory in the left pane and select App registrations and click on New registration.

In the Register an application page, enter your application's registration information!
Firstly, in the name Section enter your company's name. Then select Accounts in any organizational directory option from the Supported account types section.
Set the Redirect URI to
```text theme={null}
https://hotglue.xyz/callback
```
Click on Register to create the application.

On the app Overview page, hover over Application (client) ID value, and select the Copy icon to copy the value as you'll need to specify this in your application's authentication code or app.config file where appropriate.

Select Manifest tab, in the manifest editor, set the allowPublicClient\* property to true and click on Save.

Select the API permissions tab and then go ahead and click on the Add a permission button.

Search for and choose Dataverse under the APIs my organization uses tab. If Dataverse is not found, then search for Common Data Service".
> 📘 Tip
>
> If you are presented with more than one Common Data Service item in the search list, choose any one of them. In the next step the service name and URL will be shown. At that point you can go back to the API search and choose a different Dataverse list item if needed.

Click on Delegated permissions and check the options and click on Add permissions. This will wrap up registering your app in the Azure Active Directory!
Now you can insert the client id and client secret pair into your hotglue Microsoft Dynamics 365 source settings.
# Tap Changelog
| Version | Notes |
| :---------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------- |
| [v0.1.6](https://github.com/hotgluexyz/tap-dynamics/releases/tag/v0.1.6) | fixes |
| [v0.1.5](https://github.com/hotgluexyz/tap-dynamics/releases/tag/v0.1.5) | bug fixes |
| [v0.1.3](https://github.com/hotgluexyz/tap-dynamics/releases/tag/v0.1.3) | |
| [](https://github.com/hotgluexyz/tap-dynamics/releases/tag/v0.1.2) | |
| [v0.1.1 - Rename domain field to org](https://github.com/hotgluexyz/tap-dynamics/releases/tag/v0.1.1) | - Renamed `domain` field to `org` - Changed catalog generation to `available` |
# Microsoft Dynamics Business Central
Source: https://docs.hotglue.com/connectors/dynamics-bc
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Microsoft Dynamics Business Central](https://dynamics.microsoft.com) |
| Auth Type | OAuth or Client Credentials |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-dynamics-bc](https://gitlab.com/hotglue/tap-dynamics-bc) |
| Target Repo | [https://gitlab.com/hotglue/target-dynamics-bc](https://gitlab.com/hotglue/target-dynamics-bc) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
| Unified Schema | Supported in [Accounting Unified Schema](https://hotglue.com/docs/unified). |
# Credentials Setup
There are two separate authentication flows available for the Microsoft Dynamics Business Central connector:
* OAuth.
* Client Credentials.
Use only the section that matches your authentication flow.
# OAuth flow
## OAuth flow on Microsoft Entra
1. [Sign in](https://entra.microsoft.com/) to the Microsoft Entra admin center as at least a Cloud Application Administrator.
2. If you have access to multiple tenants, use the Settings icon in the top menu to switch to the tenant in which you want to register the application from the **Directories + subscriptions** menu.
3. Go to **Identity** > **Applications** > **App registrations** and select **New registration**.
4. Enter a display name for your application. Users of your application might see this display name when they connect their Dynamics Business Central account.
5. For **Sign-in audience**, make sure to allow all accounts to use your application.
6. For **Redirect URI**, use `https://hotglue.xyz/callback`.
7. Complete your registration by selecting **Register**.
The next step is to enable this app to access Dynamics Business Central:
8. On the left-hand panel, navigate to **Manage** > **API Permissions**. Add the following permissions:
* Dynamics 365 Business Central > `Financials.ReadWrite.All`
* Dynamics 365 Business Central > `user_impersonation`
* Microsoft Graph > `User.Read`
The last step in the Microsoft Entra application is to retrieve the Client Id and Client Secret:
9. Select **Overview**. There, you will see the Application (client) ID. You'll need to add this Client Id to Hotglue in future steps.
10. Under **Manage** > **Certificates and Secrets** > **Client Secrets**, add a new client secret. You'll need to add this client secret value to Hotglue in future steps.
## Enabling the OAuth Dynamics Business Central Connector on Hotglue
Add the Dynamics Business Central source to a new or existing flow, and add credentials under the source's credentials tab:
* `OAuth Client Id`: Use the **Application (client) ID** from your Microsoft Entra app registration.
* `OAuth Client Secret`: Use the **client secret value** (not the secret Id) from your Microsoft Entra app.
## Tenant registration with OAuth
When your tenants sign into their Dynamics Business Central accounts, they'll need to enter the following information:
* `Environment Name`: There is a dedicated section explaining [How to retrieve the Environment Name](#how-to-retrieve-the-environment-name).
# Client Credentials flow
## Client Credentials flow on Microsoft Entra
This involves the end user creating their own app in Microsoft Entra. Guide them to:
1. [Sign in](https://entra.microsoft.com/) to the Microsoft Entra admin center as at least a Cloud Application Administrator.
2. Go to **Identity** > **Applications** > **App registrations** and select **New registration**.
3. Enter a display **Name** for the application.
4. For **Supported account types**, select **Single tenant only**.
5. Complete the registration by selecting **Register**.
The next step is to enable this app to access Dynamics Business Central:
6. On the left-hand panel, navigate to **Manage** > **API Permissions**. Add the following permissions:
* Dynamics 365 Business Central > `API.ReadWrite.All`
* Dynamics 365 Business Central > `AdminCenter.ReadWrite.All`
The last step in the Microsoft Entra application is to retrieve the Client Id and Client Secret:
7. Select **Overview**. There, you will see the Application (client) ID. You'll need to add the Client Id to Hotglue in future steps.
8. Under **Manage** > **Certificates and Secrets** > **Client Secrets**, add a new client secret. You'll need to add the Client Secret value to Hotglue in future steps.
## Client Credentials flow on Microsoft Dynamics Business Central
This involves the end user granting access to their Microsoft Entra application in Microsoft Dynamics Business Central. Guide them to:
1. Sign in to [Dynamics 365 Business Central](https://businesscentral.dynamics.com/) with an Administrator account.
2. Use the search icon in the top-right and open **Microsoft Entra Applications**.
3. Select **New**.
4. Configure the app record:
* **Client Id**: Paste the Application (client) ID from your Entra app registration.
* **Description**: Enter a clear name.
* **State**: Set to **Enabled**.
5. Under **User Permission Sets**, add the permissions:
* `D365 Basic`.
* `D365 FULL ACCESS`.
## Enabling the Client Credentials Dynamics Business Central connector on Hotglue
Add the Dynamics BC Client Credentials source to a new or existing flow. No credentials are necessary in this step.
## Tenant registration with Client Credentials
When your tenants sign into their Dynamics Business Central accounts, they'll need to enter the following information:
* `Environment Name`: There is a dedicated section explaining [How to retrieve the Environment Name](#how-to-retrieve-the-environment-name).
* `Tenant Id`: There is a dedicated section explaining [How to retrieve the Tenant Id](#how-to-retrieve-the-tenant-id).
* `Client Id`: Use the **Application (client) ID** from the Microsoft Entra application.
* `Client Secret`: Use the **client secret value** (not the secret Id) from the Microsoft Entra application.
# How to retrieve the Environment Name
Your users can find their `Environment Name` by first navigating to the **Settings** tab in Dynamics Business Central:
Then, clicking on **Admin Center**:
Finally, they can find all their Business Central environments under **Environments**.
# How to retrieve the Tenant Id
Your users can find their `Tenant Id` by first navigating to the **Settings** tab in Dynamics Business Central:
Then, clicking on **Admin Center**:
Finally, they can find their `Tenant Id` in the page URL, such as:
`businesscentral.dynamics.com/{TENANT-Id}/admin`
# Microsoft Dynamics 365 Finance
Source: https://docs.hotglue.com/connectors/dynamics-finance
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Microsoft Dynamics 365 Finance](https://dynamics.microsoft.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-dynamics-finance](https://gitlab.com/hotglue/tap-dynamics-finance) |
| Target Repo | [https://github.com/hotgluexyz/target-dynamics-finance](https://github.com/hotgluexyz/target-dynamics-finance) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Microsoft Dynamics On-Premise
Source: https://docs.hotglue.com/connectors/dynamics-onprem
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Microsoft Dynamics On-Premise](https://api) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# ECB Exchange Rates
Source: https://docs.hotglue.com/connectors/ecbexchangerates
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [ECB Exchange Rates](https://ecb.europa.eu) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-ecbexchangerates](https://gitlab.com/hotglue/tap-ecbexchangerates) |
| Tap Metrics |
Usage: Success Rate:
|
# Ecwid
Source: https://docs.hotglue.com/connectors/ecwid
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Ecwid](https://ecwid.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-ecwid](https://gitlab.com/hotglue/tap-ecwid) |
| Tap Metrics |
Usage: Success Rate:
|
# Etsy
Source: https://docs.hotglue.com/connectors/etsy
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Etsy](https://etsy.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-etsy](https://gitlab.com/hotglue/tap-etsy) |
| Target Repo | [https://gitlab.com/hotglue/target-etsy](https://gitlab.com/hotglue/target-etsy) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
| Unified Schema | Supported in [Ecommerce Unified Schema](https://hotglue.com/docs/unified). |
# Eventbrite
Source: https://docs.hotglue.com/connectors/eventbrite
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Eventbrite](https://eventbrite.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-eventbrite](https://gitlab.com/hotglue/tap-eventbrite) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Eventbrite connector.
To get your credentials for Eventbrite, you are first going to need to log in to [Eventbrite](https://www.https://www.eventbrite.com/signin/).

Enter the credentials and click on **Log in** button.

Check the registered mail. You will receive the email from eventbrite and click on the login button.

You will land on eventtribe home page.

Click on the account name and then Account Settings.

You will land on the Account Information page. Then click on Developer Links on left nav pane and select API Keys

Click on the organization's name and you should be able to copy API key into hotglue.
You have now gotten your credentials for Eventbrite!
# Exact
Source: https://docs.hotglue.com/connectors/exact
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Exact](https://exactonline.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-exact](https://github.com/hotgluexyz/tap-exact) |
| Target Repo | [https://github.com/hotgluexyz/target-exact](https://github.com/hotgluexyz/target-exact) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Exact connector.
The first thing you need to do is log in to Exact, or create a free [Exact account](https://apps.exactonline.com/us/en-US/V2).

Click on Manage my app.

Scroll down you will see production Apps. You can register your app.

Enter App name and Add redirect URI. You should add the Redirect URI **[https://hotglue.xyz/callback](https://hotglue.xyz/callback)**

You can get Client ID and secret from **Develop Your APP** section.
Now you can insert the client id and client secret pair into your hotglue Exact source settings.
# Excel
Source: https://docs.hotglue.com/connectors/excel
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Excel](https://office.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-excel](https://gitlab.com/hotglue/tap-excel) |
| Target Repo | [https://gitlab.com/hotglue/target-excel](https://gitlab.com/hotglue/target-excel) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Facebook Ads
Source: https://docs.hotglue.com/connectors/facebook
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Facebook Ads](https://facebook.com/business/ads) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-facebook](https://github.com/hotgluexyz/tap-facebook) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Facebook Ads connector.
To get your credentials for Facebook Ads, you are first going to need to log in to [Facebook](https://developers.facebook.com/docs/facebook-login/).

Click on **Log in** button.

Enter your credentials and Log In.

Click on create APP button.

elect **Business** type app and Click on \*\*Next \*\*button.

Fill the Basic Information Form and Click on **Create app** button.

A pop-out will appear. Enter your facebook password.

Dashboard will appear once app is successfully added.

In the menu at the left corner, click on the “Facebook Login” link to expand the sub-menu. Next, you need to click on “Settings” from the sub-menu.

Next, you need to Click on “Settings” from the sub-menu.

Now, you will see the details where you have to enter your website URL in “Valid OAuth redirect URIs”. For example, I entered `https://hotglue.xyz/callback`.

Now expand the Setting menu and select Basic. Here you can find the App ID and App Secret. Then click on the “Show” button in the “App Secret” text box. You can copy the “App Id” and “App Secret” copy the credentials into hotglue.
You have now gotten your credentials for Facebooks Ads!
# Faire
Source: https://docs.hotglue.com/connectors/faire
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Faire](https://faire.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-faire](https://gitlab.com/hotglue/tap-faire) |
| Tap Metrics |
Usage: Success Rate:
|
| Unified Schema | Supported in [Ecommerce Unified Schema](https://hotglue.com/docs/unified). |
# Files
Source: https://docs.hotglue.com/connectors/file
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Files](https://file) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Metrics |
Usage: Success Rate:
|
# Firebase Auth
Source: https://docs.hotglue.com/connectors/firebase-auth
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Firebase Auth](https://firebase.google.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-firebase-auth](https://gitlab.com/hotglue/tap-firebase-auth) |
| Tap Metrics |
Usage: Success Rate:
|
# Firestore
Source: https://docs.hotglue.com/connectors/firestore
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Firestore](https://firebase.google.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-firestore](https://gitlab.com/hotglue/tap-firestore) |
| Target Repo | [https://gitlab.com/hotglue/target-firestore](https://gitlab.com/hotglue/target-firestore) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Fishbowl Inventory
Source: https://docs.hotglue.com/connectors/fishbowl
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Fishbowl Inventory](https://fishbowl.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-fishbowl](https://gitlab.com/hotglue/tap-fishbowl) |
| Target Repo | [https://gitlab.com/hotglue/target-fishbowl](https://gitlab.com/hotglue/target-fishbowl) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Fixer.io
Source: https://docs.hotglue.com/connectors/fixerio
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Fixer.io](https://fixer.io) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-fixerio](https://gitlab.com/hotglue/tap-fixerio) |
| Tap Metrics |
Usage: Success Rate:
|
# Follow Up Boss
Source: https://docs.hotglue.com/connectors/followupboss
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Follow Up Boss](https://followupboss.com) |
| Auth Type | API Keys |
| Direction | Read |
| Triggers | Supported |
| Tap Repo | [https://gitlab.com/hotglue/tap-followupboss](https://gitlab.com/hotglue/tap-followupboss) |
| Tap Metrics |
Usage: Success Rate:
|
# Fortnox
Source: https://docs.hotglue.com/connectors/fortnox
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Fortnox](https://fortnox.se) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-fortnox](https://gitlab.com/hotglue/tap-fortnox) |
| Tap Metrics |
Usage: Success Rate:
|
# FreshBooks
Source: https://docs.hotglue.com/connectors/freshbooks
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [FreshBooks](https://freshbooks.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-freshbooks](https://gitlab.com/hotglue/tap-freshbooks) |
| Target Repo | [https://github.com/hotgluexyz/target-freshbooks](https://github.com/hotgluexyz/target-freshbooks) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Freshcaller
Source: https://docs.hotglue.com/connectors/freshcaller
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Freshcaller](https://freshcaller.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-freshcaller](https://gitlab.com/hotglue/tap-freshcaller) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Freshcaller connector.
o get your credentials for FreshCaller, you are first going to need to log in to [FreshCaller](https://www.freshworks.com/freshcaller-cloud-pbx/).

Enter account name and click on **Proceed** button.

Enter the credentials and sign in.

Dashboard will be shown. Click on Username and select **Profile Settings**.

# Freshdesk
Source: https://docs.hotglue.com/connectors/freshdesk
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Freshdesk](https://freshdesk.io) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-freshdesk](https://github.com/hotgluexyz/tap-freshdesk) |
| Tap Metrics |
Usage: Success Rate:
|
# Freshsales Classic
Source: https://docs.hotglue.com/connectors/freshsales
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Freshsales Classic](https://freshsales.io) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-freshsales](https://gitlab.com/hotglue/tap-freshsales) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Freshsales Classic connector.
The first thing you need to do is log in to [Freshsales](https://www.freshworks.com/crm/login/).

Your home page should look something like this. On the top of your screen in the URL, you will see your organization name. It will follow the format of "**ORGANIZATION NAME**.myfreshworks.com/crm/sales". Go ahead and input the Organization Name into hotglue.
## API Key

Now you need to find the API Key, go ahead and click on the personal icon in the top right hand corner.

From the resulting drop down, select the Settings page.

Now that you are on your Personal Settings page, head to the API Settings tab.

And here you have your Freshsales API Key! Go ahead and copy it into hotglue.
# Freshsales Suite
Source: https://docs.hotglue.com/connectors/freshworks
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Freshsales Suite](https://freshworks.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-freshworks](https://gitlab.com/hotglue/tap-freshworks) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Freshsales Suite connector.
## Organization Name
The first thing you need to do is log in to [Freshworks CRM](https://www.freshworks.com/crm/login/).

Your home page should look something like this. On the top of your screen in the URL, you will see your organization name. It will follow the format of "**ORGANIZATION NAME**.myfreshworks.com/crm/sales". Go ahead and input the Organization Name into hotglue.
## API Key

Now you need to find the API Key, go ahead and click on the personal icon in the top right hand corner.

From the resulting drop down, select the Settings page.

Now that you are on your Personal Settings page, head to the API Settings tab.

And here you have your Freshworks API CRM Key! Go ahead and copy it into hotglue.
# Front
Source: https://docs.hotglue.com/connectors/frontapp
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Front](https://frontapp.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-frontapp](https://gitlab.com/hotglue/tap-frontapp) |
| Tap Metrics |
Usage: Success Rate:
|
# FTP
Source: https://docs.hotglue.com/connectors/ftp
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [FTP](https://ftp) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-ftp](https://gitlab.com/hotglue/tap-ftp) |
| Tap Metrics |
Usage: Success Rate:
|
# Fulfil
Source: https://docs.hotglue.com/connectors/fulfil
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Fulfil](https://fulfil.io) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-fulfil](https://gitlab.com/hotglue/tap-fulfil) |
| Target Repo | [https://gitlab.com/hotglue/target-fulfil](https://gitlab.com/hotglue/target-fulfil) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Fulfil connector.
If you need to figure out how to access the necessary Fulfil credentials, head [here](https://developers.fulfil.io/) for a detailed walkthrough.
# Gambio
Source: https://docs.hotglue.com/connectors/gambio
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Gambio](https://gambio.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-gambio](https://gitlab.com/hotglue/tap-gambio) |
| Tap Metrics |
Usage: Success Rate:
|
# GitHub
Source: https://docs.hotglue.com/connectors/github
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [GitHub](https://github.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-github](https://gitlab.com/hotglue/tap-github) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the GitHub connector.
If you need to find your GitHub Access Token, you have come to the right place. The first thing you need to do is [log in to GitHub](https://github.com/login).

Now that you are logged in to GitHub, go click on your profile in the top right corner of the page.

From the resulting drop down, select the Settings option.

This is your settings page. On the right hand side, near the bottom of the page, you should see an option to head to the Developer Settings section of your account. Go ahead and do that.

You will now be on this page. Once again, one the left hand side you have a few options. You should select the Personal access tokens tab.

Next, you should click the Generate new token button in the top right hand corner.

In the Note section write "hotglue."

For the Expiration of your token, you can put whatever you like, as long as you remember to generate a new token and put it in hotglue whenever your old token expires. For this examples sake, I will be setting mine to No expiration.

For the Scopes, make sure you enable the necessary scopes for hotglue to grab data from GitHub. If you need help figuring out what scopes you should enable, you can chat with us using our live chat feature in hotglue or shoot us an email at [support@hotglue.xyz](mailto:support@hotglue.xyz).

Once you have everything configured, go ahead and click the Generate token button.

You have now created your Personal access token! Make sure to copy it into a safe place as well as copy it into hotglue. Once you do that, you are all set!
# GitLab
Source: https://docs.hotglue.com/connectors/gitlab
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [GitLab](https://gitlab.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-gitlab](https://gitlab.com/hotglue/tap-gitlab) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the GitLab connector.
The first thing you must do is log in to your Gitlab account. If you have a Gitlab account, you can [login here](https://gitlab.com/users/sign_in?__cf_chl_jschl_tk__=MuF9GC0ejtTkFz20goTlkDJ.UzN8vbZBMo.6VsObMjw-1639681161-0-gaNycGzNCiU). If you do not have an account, you can create one [here](https://about.gitlab.com/pricing/).
## Gitlab API URL
Usually, you Gitlab API URL will be `https://gitlab.com/api/v4`
## Access Token

Now that you have logged in to Gitlab, your home page should look something like this. Go ahead to the top right corner and click the circular icon.

From the resulting drop down, you should click the **Edit Profile** option.

From this page, you should go ahead and select the **Access Tokens** tab.

You should now be on a page where you can create your own access token. Go ahead and title your access token "hotglue" and give it an expiration date.
Now we need to set the scopes for the access token. The gitlab tap expects the following scopes:
* `read_user`
* `read_api`
* `read_repository`
* `read_registry`
Once you are done selecting your scopes, go ahead and click the **Create personal access token**.

You now have your personal access token! Go ahead and copy it into hotglue.
## Your Groups (Optional)

To find your groups, head to **Menu** option on the top left of the page.

Then, you should navigate to the Groups tab, and within the Groups tab, head to the Your groups tab.

I have a test group here titled **myawesometestgroup**. So in hotglue, I will put myawesometestgroup in the Groups entry.
## Your Projects

Using the menu, head to the Projects tab. You should then navigate to the Your projects.

As you can see, I have a test project. In hotglue, I would input **myorg/myawesomeproject** into hotglue.
# Gladly
Source: https://docs.hotglue.com/connectors/gladly
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Gladly](https://gladly.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-gladly](https://gitlab.com/hotglue/tap-gladly) |
| Tap Metrics |
Usage: Success Rate:
|
# Gmail
Source: https://docs.hotglue.com/connectors/gmail
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Gmail](https://gmail.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-gmail](https://github.com/hotgluexyz/tap-gmail) |
| Tap Metrics |
Usage: Success Rate:
|
# GoCardless
Source: https://docs.hotglue.com/connectors/gocardless
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [GoCardless](https://gocardless.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-gocardless](https://github.com/hotgluexyz/tap-gocardless) |
| Tap Metrics |
Usage: Success Rate:
|
# GoHighLevel
Source: https://docs.hotglue.com/connectors/gohighlevel
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [GoHighLevel](https://gohighlevel.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-gohighlevel](https://gitlab.com/hotglue/tap-gohighlevel) |
| Tap Metrics |
Usage: Success Rate:
|
# Gong
Source: https://docs.hotglue.com/connectors/gong
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Gong](https://gong.io) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-gong](https://gitlab.com/hotglue/tap-gong) |
| Target Repo | [https://gitlab.com/hotglue/target-gong](https://gitlab.com/hotglue/target-gong) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Gong connector.
The first thing you need to do is log in to the [Gong Developer hub](https://app.gong.io/developer-hub).

Enter your email id and click on **Sign in** button.

Enter your password and Sign in button.

You will land on Dev page. Click on Manage APPS.

You can get API documentation from this page. Click on Create Integration button.

Fill the details of your company. You should add the Redirect URI `https://hotglue.xyz/callback`. Scroll down to save the details after filling out the form.

Once you are done, you can also get your Client ID and Client Secret. Now you can go ahead and copy the credentials into hotglue.
# Google Analytics 4
Source: https://docs.hotglue.com/connectors/google-analytics
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Google Analytics 4](https://analytics.google.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-google-analytics-v2](https://github.com/hotgluexyz/tap-google-analytics-v2) |
| Tap Metrics |
Usage: Success Rate:
|
# Google Drive
Source: https://docs.hotglue.com/connectors/google-drive
# Connector Details
| Name | Value |
| :---------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Google Drive](https://drive.google.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-google-drive](https://github.com/hotgluexyz/tap-google-drive) |
| Tap Metrics |
Usage:
|
# Setting up the Google Drive File Picker integration
## Create a Google Cloud Project
To use the Google Drive connector, first [create a Google Cloud Console project](https://console.cloud.google.com/projectcreate) and
## Enable the Google Picker API
Next navigate to the **Enabled APIs & Services** menu:
Press **+ Enable APIs & Services** and enable the `Google Picker` API. This allows your OAuth application to download files that your tenant explicitly gives you access to.
## Creating an OAuth application
Next, navigate to the [Google Auth Platform](https://console.cloud.google.com/auth/overview) to create your OAuth application.
Create an external application with the support emails that you would like to surface to your tenants.
Next create an OAuth client with the callback `https://hotglue.xyz/callback`:
Make sure to copy your client id and secret to be later used in the hotglue dashboard.
Finally, navigate to the **Audience** tab to publish your application. Note that until the application is verified by google, your tenants will see a warning before authenticating.
## Generating a client side developer token
In order to use Google's client-side file picker, you'll need to generate a developer token for the hotglue widget to use.
On the lefthand sidebar, navigate to **APIs & Services > Credentials**.
Next press **+ Create Credentials** > **API key** to get an API key. Once its generated, we recommend restricted its scope to just the Google Picker API.
## Getting your App ID
Finally, in order to support the Google Picker API, hotglue requires your Google Cloud project number (AKA `app id`). You can find the file picker by navigating to the hot dog icon in the top right corner and pressing project settings.
## Configuring Google Drive connector in hotglue
### Authorization URL
The proper authorization url for the Google Picker API is:
```
"https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A//www.googleapis.com/auth/drive.file&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code"
```
If using Google Drive in a unidirectional (v1) flow, you can configure this by adding the following to your Google Drive [availableSource](/key-concepts/connectors/v1-sources/management):
```json theme={null}
"tap_url": "https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A//www.googleapis.com/auth/drive.file&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code"
```
If using Google Drive in a bidirectional (v2) flow, you can add the following to your [availableConnector](/key-concepts/connectors/v2-connectors/management):
```json theme={null}
"auth_url": "https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A//www.googleapis.com/auth/drive.file&access_type=offline&prompt=consent&include_granted_scopes=true&response_type=code"
```
### Configuring your Google Console application for the widget
To support using the Google Picker API in the widget, you can add the following to your availableSource or availableConnector:
```json theme={null}
"google_tokens": {
"app_id": "",
"api_key": ""
},
```
# Google Play
Source: https://docs.hotglue.com/connectors/google-play
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Google Play](https://play.google.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-google-play](https://gitlab.com/hotglue/tap-google-play) |
| Tap Metrics |
Usage: Success Rate:
|
# Google Sheets
Source: https://docs.hotglue.com/connectors/google-sheets-beta
# Connector Details
| Name | Value |
| :---------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Google Sheets](https://sheets.google.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-google-sheets](https://gitlab.com/hotglue/tap-google-sheets) |
| Tap Metrics |
Usage:
|
# Google Workspace
Source: https://docs.hotglue.com/connectors/google-workspace
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Google Workspace](https://https://workspace.google.com/) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-google-workspace](https://gitlab.com/hotglue/tap-google-workspace) |
| Tap Metrics |
Usage: Success Rate:
|
# Google Ads
Source: https://docs.hotglue.com/connectors/googleads
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Google Ads](https://ads.google.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-googleads](https://github.com/hotgluexyz/tap-googleads) |
| Tap Metrics |
Usage: Success Rate:
|
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------- |
| [v0.0.6 - Add support for campaign\_budget and invoices](https://github.com/hotgluexyz/tap-googleads/releases/tag/v0.0.6) | Add support for campaign\_budget and invoices |
# HubSpot
Source: https://docs.hotglue.com/connectors/hubspot
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [HubSpot](https://hubspot.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-hubspot-beta](https://github.com/hotgluexyz/tap-hubspot-beta) |
| Target Repo | [https://gitlab.com/hotglue/target-hubspot-v2](https://gitlab.com/hotglue/target-hubspot-v2) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the HubSpot connector.
Follow the steps below to register the "OAuth App" you need to use the HubSpot connector. This is a one-time process to create your OAuth app. Once you add your app credentials to hotglue, your client will just need to login to their Hubspot account.
> 📘 The HubSpot developer account is **different** from a normal HubSpot account. Make sure to register for a Developer Account or you will not see the Manage App options.
To start, create a [free HubSpot developer account](https://app.hubspot.com/signup-hubspot/developers). This will give you access to create your app, alongside a Hubspot environment to use in your tests.
Once logged into the HubSpot developer portal, your home page should show an **APPS** tab on the top bar. Navigate to the **Apps** tab or click **Manage apps**.

Once on your Apps page, can click **Create App** to begin setting up your app. Give your app a name, logo, and description.
Then, navigate to the Auth tab and add your **Redirect URL**. Unless you've configured a forked redirect URL in hotglue, this needs to be `https://hotglue.xyz/callback`. Click **Create App**.

The last step is to add your scopes. These are the resources that your users will explicitly authorize you to access. There are two required scope categories:
* `oauth` is required for all integrations.
* All `crm.schemas` scopes are required for catalog discovery in hotglue.
The rest of your scopes will depend on which resources you want to work with in your integration. If you have questions about what your scopes should be, feel free to ask us!

After you save your updated scopes, you can now copy the three required params to enable your app in hotglue:
* Client ID
* Client Secret
* Install URL
You can find all three near the top of the "Auth" section in your Hubspot app.
# Features
## Fetch associated records
### Introduction
HubSpot supports the concept of [associated records](https://knowledge.hubspot.com/records/associate-records), which enables you to relate a record like a `deal` to another, like a `contact`.
In some scenarios, it may be useful to fetch records associated with your selected streams, without fetching the entire associated table.
For example, let's say you are running an incremental sync on deals. You may want to fetch the contacts and activities associated with the deals in the each sync. You could do this by selecting `deals`, `contacts`, and `activity`-type streams in your field map. Every job would then fetch all incremental updates for all selected streams, and you could reference related records from within your database.
However, if you don't need to replicate each full stream, you can simplify your integration using `fetch_associations`. With `fetch_associations`, the tap only fetches relevant records from related tables that you define.
### The `fetch_associations` object
`fetch_associations` is an object set in the connector's config. You can set this via a PATCH to the [linkedSource](https://docs.hotglue.com/api-reference/v1/linked-sources/update-linked-sources) (v1) or [linkedConnector](https://docs.hotglue.com/api-reference/v2/linked-connectors/update) (v2) config.
The object contains one or more `` keys (a stream that must already be selected in the field map), each containing a list of one or more `` keys (a stream that may or may not be selected in the field map):
```json theme={null}
"fetch_associations":{
:[,]
}
```
### Example usage
Below is an example `fetch_associations` entry for deals. In this case, `deals` is the root table selected in our field map, and `contacts` and `tasks` are the related tables to deals that we want to retrieve:
```json theme={null}
"fetch_associations":{
"deals":[
"contacts",
"tasks"
]
}
```
The output from a job using the above will contain 5 tables:
* `deals`
* `associations_deals_contacts`
* `associations_deals_tasks`
* `contacts`
* `tasks`
`deals` contains an incremental sync of deals records. There is no change from normal behavior.
The `associations_` tables contain IDs of the `deals` from the stream sync, and the IDs of the related `contacts` and `tasks` records for those deals.
`contacts` and `tasks` tables contain the related records which are referenced in `associations_` tables, with an additional `isAssociated` (boolean) column.
### Supported tables
Supported `` keys are explicitly defined in the HubSpot connector:
```json theme={null}
[
"contacts",
"meetings",
"calls",
"communications",
"emails",
"notes",
"postal_mail",
"tasks",
"companies",
"tickets",
"products",
"quotes",
"deals"
]
```
`` keys can be any stream key available in Hubspot's V3 CRM API. This includes custom objects.
### Considerations
1. There may be more than one related record for a given root record. In the above example, your code would need to handle cases where multiple `contacts` and `tasks` are associated with the same root `deal`.
2. If the `` is not selected in the field map, neither that stream nor the related records will sync. This flag is not a replacement for selecting tables in the field map.
3. There are no enforced validations when passing a `fetch_associations` object to a config. You will need to ensure that the `` and `` keys are valid, and that your object is formatted as documented.
4. A PATCH to the connector config cannot be used to add additional keys to an existing `fetch_associations` object. Your PATCH must include the full `fetch_associations` object that you expect to sync.
# Tap Changelog
| Version | Notes |
| :-------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| [v2.9.10](https://github.com/hotgluexyz/tap-hubspot/releases/tag/v2.9.10) | |
| [v2.9.9](https://github.com/hotgluexyz/tap-hubspot/releases/tag/v2.9.9) | |
| [v2.9.8](https://github.com/hotgluexyz/tap-hubspot/releases/tag/v2.9.8) | |
| [v2.9.7 - Fix discover for new scopes](https://github.com/hotgluexyz/tap-hubspot/releases/tag/v2.9.7) | - Updated discover to work if users aren't granted full schema access to all streams |
| [v2.9.6 - Add support for companies\_properties](https://github.com/hotgluexyz/tap-hubspot/releases/tag/v2.9.6) | Added support for new stream `companies_properties` based on following HubSpot endpoint: [https://legacydocs.hubspot.com/docs/methods/companies/get\_company\_properties](https://legacydocs.hubspot.com/docs/methods/companies/get_company_properties) |
# Sage Intacct
Source: https://docs.hotglue.com/connectors/intacct
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Sage Intacct](https://sageintacct.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-intacct](https://github.com/hotgluexyz/tap-intacct) |
| Target Repo | [https://gitlab.com/hotglue/target-intacct-v2](https://gitlab.com/hotglue/target-intacct-v2) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
| Unified Schema | Supported in [Accounting Unified Schema](https://hotglue.com/docs/unified). |
# Credentials Setup
Follow the steps below to get the credentials you need to use the Sage Intacct connector.
The Sage Intacct tap requires the following fields:
| Field Name | Description |
| :-------------- | :-------------------------------- |
| Company Id | Your Sage Intacct Company Id |
| Sender Id | Your Sage Intacct Sender Id |
| Sender Password | Your Sage Intacct Sender Password |
| User Id | Your Sage Intacct User Id |
| User Password | Your Sage Intacct User Password |
### 1. Enable Web Services
To enable Web Services, go to Company > Admin > Subscriptions
Ensure “Web Services” is enabled
### 2. Generate a Sender ID and password
The Intacct Sender credentials are used to validate your API access. Unfortunately, Intacct does not provide API access to all users by default.
You have two options for obtaining developer credentials.
1. You (the hotglue customer) can register as an Intacct Marketplace partner (link to Intacct page of applying to be a marketplace partner). This involves an approval process that typically takes a couple of months. hotglue can then use your Sender credentials to interact with your tenants' Intacct instances. ([More Information](https://www.sage.com/en-us/sage-business-cloud/intacct/partners/))
2. Your tenant can obtain a developer license, which includes sender credentials. This is paid, however does not involve a lengthy approval process. ([More information](https://developer.sage.com/))
### 3. Authorize the Sender ID
Go to Company > Setup > Company > Security, and select Edit
In the Web Services authorizations section, select Add
Enter the Sender ID (provided externally), set as Active, select Save
### 4. Create a role to be used by the hotglue integration
Navigate to Company > Admin > Roles
Select Add
Name the role and select Save
You should configure this role's permissions based on your hotglue integration. For example, if are you looking to both read and write journal entries, you should make sure to give full permissions for the General Ledger. If you are only reading from Intacct, you can select omnit write access.
### 4. Create the Intacct user to be used by the hotglue integration
Go to Company > Admin > Users
Select Add
Create a login-enabled user for the integration:
1. User ID: (this becomes the `user_id` field)
2. Username/email
3. Set password (this becomes the `user_password`)
### 5. Assign the role to the user
Go to Company → Admin → Users.
Open the integration user you created and select Edit.
Scroll down to the Roles section on the user record.
Select Add.
Choose the integration role you created earlier.
Select Save on the user record.
Note: The Company > Admin > Roles > Role assignment screen only shows assignments; you cannot add users there.
### 6. Find the Company ID
Finally, open Company > Setup > Company
Copy the Company ID shown (this becomes `company_id`)
All done! You’re ready to use Sage Intacct integration via hotglue.
# Tap Changelog
| Version | Notes |
| :----------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------- |
| [v0.1.7](https://github.com/hotgluexyz/tap-intacct/releases/tag/v0.1.7) | |
| [v0.1.6](https://github.com/hotgluexyz/tap-intacct/releases/tag/v0.1.6) | |
| [v0.1.5](https://github.com/hotgluexyz/tap-intacct/releases/tag/v0.1.5) | |
| [v0.1.4](https://github.com/hotgluexyz/tap-intacct/releases/tag/v0.1.4) | |
| [v0.1.3 - Dynamic catalog generation](https://github.com/hotgluexyz/tap-intacct/releases/tag/v0.1.3) | - Handle generating catalog dynamically |
| [v0.1.2 - Add support for support ARINVOICE, ARADJUSTMENT, CUSTOMER & ITEM](https://github.com/hotgluexyz/tap-intacct/releases/tag/v0.1.2) | Added support for ARINVOICE, ARADJUSTMENT, CUSTOMER & ITEM objects |
| [Change name to tap-intacct](https://github.com/hotgluexyz/tap-intacct/releases/tag/v0.1.1) | This is a fork of original `tap-intacct-api` - hotglue is maintaining this fork. |
# Intercom
Source: https://docs.hotglue.com/connectors/intercom
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Intercom](https://intercom.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-intercom](https://gitlab.com/hotglue/tap-intercom) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Intercom connector.
To get your OAuth credentials for Intercom, you are first going to need to log in to [Intercom](https://app.intercom.com/admins/sign_in?on_pageview_event=sign_in_nav).

Now that you are on the Intercom home page, go to the bottom left of the page and click on your account icon.

Select the Settings tab.

Select the Apps & Integrations option in the left-sided nav bar.

Under Apps & Intergations, click on Developer Hub.

Click on **New app**.

Input App name and other fields and Click **Create app** button. Remember, this should be the name of your app, not hotglue.

Navigate to “Authentication” Menu. Click on “Edit” button.

Check off “Use OAuth” under the OAuth tab, and then add `https://hotglue.xyz/callback` as the Redirect URL. Save the changes by clicking the Save button in the top right hand corner.

Then head to the Basic Information option via the left-sided nav bar. You should now be able to copy the Intercom OAuth Client ID and Client Secret into hotglue.
You have now gotten your credentials for Intercom!
# Invoiced
Source: https://docs.hotglue.com/connectors/invoiced
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Invoiced](https://invoiced.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-invoiced](https://github.com/hotgluexyz/tap-invoiced) |
| Tap Metrics |
Usage: Success Rate:
|
# Iterable
Source: https://docs.hotglue.com/connectors/iterable
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Iterable](https://iterable.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-iterable](https://gitlab.com/hotglue/tap-iterable) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Iterable connector.
The first thing you will need to do get your Iterable credentials is have an Iterable account. There is no easy way to get access to a free account, so let us know if you don't have an account. If you do already have an account, you can [log in at this link](https://app.iterable.com/login).
## API Key
We are going to go through how to find your API key.

Once you have logged in to Iterable, you will be shown the home page of the Iterable platform. On the menu bar on the top of the page, hover over the tab that is called **Integrations**.

From the prompted drop down, select the **API keys** option.

You will now be on your API keys page. Go ahead and click on the **New API Key** button in the upper right hand side of your screen.

You most likely want to call your API key "hotglue" or something similar. You also want to make your API key a **Server-side** key. Once you are done with that, click the Create button.

You will now be shown your API key. Make sure to note this down somewhere safe! As Iterable says, they will only show you this key once. You should now copy it into hotglue and you are all done getting your credentials!
# iTunes
Source: https://docs.hotglue.com/connectors/itunes
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [iTunes](https://itunes.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-itunes](https://gitlab.com/hotglue/tap-itunes) |
| Tap Metrics |
Usage: Success Rate:
|
# Jira
Source: https://docs.hotglue.com/connectors/jira
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Jira](https://atlassian.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-jira](https://github.com/hotgluexyz/tap-jira) |
| Target Repo | [https://gitlab.com/hotglue/target-jira](https://gitlab.com/hotglue/target-jira) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Jira connector.
The first thing that you need to do to get your Jira OAuth credentials is to [login](https://id.atlassian.com/login?continue=https%3A%2F%2Fdeveloper.atlassian.com%2F%2F) in to Jira's Developer console. If you do not have a Jira account, you can create a free one [here](https://www.atlassian.com/try/cloud/signup?bundle=jira-software\&edition=free).

Now that you have logged into Jira, you need to actually head the developer console. Your home page should look similar to this. Head to top right hand corner of the page and click on the icon with your initial in it.

## Creating the app
Now from the resulting drop down, you should click the **Developer console** tab.

You should now be on this page. To create an OAuth app, click on the **Create** button on the right side of the screen.

When it asks you what kind of app you would like to create, make sure to select the **OAuth 2.0 integration** option.

On this page, you should go ahead and name your private app as **your** company name, not hotglue. Remember, this is the app your customers will be seeing when they are connecting their Jira account to your platform. Once you are done inputting your app name (and agreeing to the Atlassian developer terms), click create.
## Configuring Permissions

On this page, you have the ability to edit the details of your application. The first thing you should do is head to the **Permissions** section of your app.

On this page, you can configure the scopes of your OAuth app. Go ahead and click **Add** on any of the scopes you would like to enable.

As you can see here, I have added some scopes to my app. It is important that you go in and configure each API in order to make sure the permissions you want are set. For this example, let's do this with the Jira platform REST API.

When you add the scopes for the Jira platform REST API, it defaults to just enabling the View user profiles permission. Since I want to be able to read into issue data, I am also going to add the View Jira issue data scope.
**Note: If you are only going to use this app to read data from Jira, you will only need to check scopes that can View objects in Jira. If you are also planning on writing data to Jira, you should add the Create/Manage scopes as well as the View scopes.**

Once you are done configuring the scopes, you can go ahead and head back to your app.
## Getting the credentials
Now it is finally time to grab your credentials.

Head into the **App details** section of your app.

At the bottom of this page, you can access your credentials! Take these and put them in hotglue.
# Jotform
Source: https://docs.hotglue.com/connectors/jotform
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Jotform](https://jotform.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-jotform](https://gitlab.com/hotglue/tap-jotform) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Jotform connector.
Login [here](https://www.jotform.com/myforms/). You will land on the All Forms page.

Click on your account name at the top right. A new form will open. Scroll down and click on **Settings**.

A new tab will open. Select the API option from right navigation pane.
### Create a new REST API key
Create your new consumer key pair. You can set the Permission levels. For the Jotform source, you only need to provide Read level permissions.

That's it! Insert API Secret into your hotglue Jotform source settings.
# Judge.me
Source: https://docs.hotglue.com/connectors/judgeme
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Judge.me](https://judge.me) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-judgeme](https://gitlab.com/hotglue/tap-judgeme) |
| Tap Metrics |
Usage: Success Rate:
|
# Kafka
Source: https://docs.hotglue.com/connectors/kafka
# Connector Details
| Name | Value |
| :---------- | :--------------------------------------------------------------------------------------- |
| Platform | [Apache Kafka](https://kafka.apache.org/) |
| Auth Type | Broker-dependent (e.g. SASL, TLS) |
| Direction | Write |
| Target Repo | [https://github.com/hotgluexyz/target-kafka](https://github.com/hotgluexyz/target-kafka) |
# Target Kafka
`target-kafka` writes Singer streams to Kafka topics using a producer. Each stream name maps to a topic name unless you override it (see `stream_topic_map`). Records are sent as message payloads for that topic.
## Config
Set at least **bootstrap\_servers**. If your brokers require SASL, set **sasl\_username** and **sasl\_password**; the target picks sensible defaults for `security_protocol` and `sasl_mechanism` when those are present. Expand the table below for every option.
```json theme={null}
{
"bootstrap_servers": "broker1.example.com:9092,broker2.example.com:9092",
"sasl_username": "...",
"sasl_password": "...",
"topic_prefix": "",
"client_id": "target-kafka"
}
```
## Configuration reference
| Property | Description | Default |
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
| `bootstrap_servers` | Comma-separated `host:port` list for Kafka bootstrap brokers. | (required) |
| `sasl_username` | SASL username when using SASL (for example PLAIN). | — |
| `sasl_password` | SASL password paired with `sasl_username`. Treat as a secret. | — |
| `security_protocol` | `PLAINTEXT`, `SSL`, `SASL_PLAINTEXT`, or `SASL_SSL`. If omitted, the target uses `SASL_SSL` when `sasl_username` and `sasl_password` are set, otherwise `PLAINTEXT`. | inferred |
| `sasl_mechanism` | SASL mechanism when the protocol is SASL-based (e.g. `PLAIN`, `SCRAM-SHA-256`). | `PLAIN` |
| `topic_prefix` | String prepended to each stream name when resolving the Kafka topic. | `""` |
| `stream_topic_map` | Object mapping stream names to topic names; entries override `topic_prefix` + stream name. | — |
| `client_id` | Client id the producer reports to the cluster. | `target-kafka` |
| `flush_timeout` | Seconds to wait for in-flight messages when flushing on state drain or shutdown. | `30` |
| `extra_producer_config` | Extra producer settings merged into the client (librdkafka-style keys, e.g. `compression.type`, `linger.ms`). | — |
# Katana MRP
Source: https://docs.hotglue.com/connectors/katana
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Katana MRP](https://katanamrp.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-katana](https://gitlab.com/hotglue/tap-katana) |
| Tap Metrics |
Usage: Success Rate:
|
# Keap
Source: https://docs.hotglue.com/connectors/keap
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Keap](https://keap.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Triggers | Supported |
| Tap Repo | [https://gitlab.com/hotglue/tap-keap](https://gitlab.com/hotglue/tap-keap) |
| Target Repo | [https://gitlab.com/hotglue/target-keap](https://gitlab.com/hotglue/target-keap) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Klaviyo
Source: https://docs.hotglue.com/connectors/klaviyo
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Klaviyo](https://klaviyo.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-klaviyo](https://github.com/hotgluexyz/tap-klaviyo) |
| Target Repo | [https://gitlab.com/hotglue/target-klaviyo](https://gitlab.com/hotglue/target-klaviyo) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Klaviyo connector.
The first thing you will need to do get your Klaviyo credentials is make an Klaviyo account. You can [make a free account (or sign up for a paid account) at this link](https://www.klaviyo.com/pricing?emailListSize=0\&smsContacts=0). If you already have an account, you can [log in at this link](https://www.klaviyo.com/login).
## API Key
First, we are going to go through how to find your personal API key.

Once you have logged in to Klaviyo, you will be shown the home page of the Klaviyo platform. In the top right corner, there is an icon with your initial and company name. Go ahead and click that icon.

Now go ahead and click on the Account tab from the drop down.

You will now be on your account page. Go ahead and click on the **Settings** tab in the upper right hand side of your screen.

Go ahead and select **API Keys** from the resulting dropdown.

Now you will be on a page where you can generate the API Key for hotglue.

You should go ahead and click the **Create Private API Key** button.

You should go ahead and name the API Key **hotglue**. Start this process by clicking the pencil icon under the label section.

Once you've typed in hotglue, click **Save Label**.

Now you should go ahead and copy your API Key. Do this by clicking the reveal button next to the API Key.

Now go ahead and copy that API key and paste it into hotglue!
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [v0.0.2 – Updated catalog to match Singer spec](https://github.com/hotgluexyz/tap-klaviyo/releases/tag/v0.0.2) | - Updated discover output to generate `metadata` according to Singer spec - Updated sync logic to use `selected` value from `metadata` in `catalog` rather than from `schema` entry |
# KPA
Source: https://docs.hotglue.com/connectors/kpa
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [KPA](https://kpa.io) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-kpa](https://github.com/hotgluexyz/tap-kpa) |
| Tap Metrics |
Usage: Success Rate:
|
# Kustomer
Source: https://docs.hotglue.com/connectors/kustomer
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Kustomer](https://kustomer.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-kustomer](https://gitlab.com/hotglue/tap-kustomer) |
| Tap Metrics |
Usage: Success Rate:
|
# Lightspeed (C-Series)
Source: https://docs.hotglue.com/connectors/lightspeed
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Lightspeed (C-Series)](https://lightspeedhq.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-lightspeed](https://github.com/hotgluexyz/tap-lightspeed) |
| Tap Metrics |
Usage: Success Rate:
|
| Unified Schema | Supported in [Ecommerce Unified Schema](https://hotglue.com/docs/unified). |
# Linear
Source: https://docs.hotglue.com/connectors/linear
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Linear](https://linear.app) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-linear](https://github.com/hotgluexyz/tap-linear) |
| Tap Metrics |
Usage: Success Rate:
|
# LinkedIn Ads
Source: https://docs.hotglue.com/connectors/linkedin-ads
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [LinkedIn Ads](https://linkedin.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/singer-io/tap-linkedin-ads](https://github.com/singer-io/tap-linkedin-ads) |
| Tap Metrics |
Usage: Success Rate:
|
# Linnworks
Source: https://docs.hotglue.com/connectors/linnworks
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Linnworks](https://linnworks.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-linnworks](https://github.com/hotgluexyz/tap-linnworks) |
| Tap Metrics |
Usage: Success Rate:
|
# LiveChat
Source: https://docs.hotglue.com/connectors/livechat
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [LiveChat](https://livechat.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-livechat](https://gitlab.com/hotglue/tap-livechat) |
| Tap Metrics |
Usage: Success Rate:
|
# Logic4
Source: https://docs.hotglue.com/connectors/logic4
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Logic4](https://logic4.nl) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-logic4](https://github.com/hotgluexyz/tap-logic4) |
| Target Repo | [https://github.com/hotgluexyz/target-logic4](https://github.com/hotgluexyz/target-logic4) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Looker
Source: https://docs.hotglue.com/connectors/looker
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Looker](https://looker.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-looker](https://gitlab.com/hotglue/tap-looker) |
| Tap Metrics |
Usage: Success Rate:
|
# Magento 2
Source: https://docs.hotglue.com/connectors/magento
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Magento 2](https://magento.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-magento](https://github.com/hotgluexyz/tap-magento) |
| Target Repo | [https://gitlab.com/hotglue/target-magento](https://gitlab.com/hotglue/target-magento) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
| Unified Schema | Supported in [Ecommerce Unified Schema](https://hotglue.com/docs/unified). |
# Credentials Setup
Follow the steps below to get the credentials you need to use the Magento 2 connector.
The Magento connector requires three fields. If you do not have Magento credentials, contact us about using the hotglue testing account.
1. **Store URL** - The Store URL is usually the domain that is assigned to your IP address. This is usually the root. If you do not yet have a domain, your store URL will include a series of four numbers, each separated by a period in dotted quad notation.
2. **Username** - This is the username you use to log into your Magento account
3. **Password** - This is the password you use to log into your Magento account
# Magento 1
Source: https://docs.hotglue.com/connectors/magento-v1
# Connector Details
| Name | Value |
| :---------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Magento 1](https://magento.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-magento-v1](https://gitlab.com/hotglue/tap-magento-v1) |
| Tap Metrics |
Usage:
|
# Mailchimp
Source: https://docs.hotglue.com/connectors/mailchimp
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Mailchimp](https://mailchimp.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Triggers | Supported |
| Tap Repo | [https://github.com/hotgluexyz/tap-mailchimp](https://github.com/hotgluexyz/tap-mailchimp) |
| Target Repo | [https://gitlab.com/hotglue/target-mailchimp-v2](https://gitlab.com/hotglue/target-mailchimp-v2) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Mailchimp connector.
To get your Mailchimp OAuth Client ID and OAuth Client Secret, go ahead and [log in to Mailchimp](https://mailchimp.com/login).

Once you are logged in, click your account picture in the bottom left hand corner of the page. This will trigger a menu to pop-up.

In this menu, go ahead and select the Account tab.

On the Account page, go ahead and click the Extras to prompt the drop down.

From the resulting drop down, select the Registered apps tab.

Now you should go ahead and begin registering your app. To do that, click the Register An App button.

You will now be on this page where you should fill in your information. Make sure that you set the Redirect URL to:
```text theme={null}
https://hotglue.xyz/callback
```
Once you have filled everything in, click the Create button.

You will now have your credentials! Take these credentials and copy them into hotglue.
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------- |
| [v1.1.4](https://github.com/hotgluexyz/tap-mailchimp/releases/tag/v1.1.4) | |
| [v1.1.3](https://github.com/hotgluexyz/tap-mailchimp/releases/tag/v1.1.3) | Minor change to the way catalog is generated to play nicely with other tools. Needed to include a `metadata` entry with a `breadcrumb: []` |
# MailerLite
Source: https://docs.hotglue.com/connectors/mailerlite
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [MailerLite](https://mailerlite.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-mailerlite](https://gitlab.com/hotglue/tap-mailerlite) |
| Target Repo | [https://gitlab.com/hotglue/target-mailerlite](https://gitlab.com/hotglue/target-mailerlite) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the MailerLite connector.
The first thing you need to do is log in to [Mailerlite](https://accounts.mailerlite.com/).

Login page will shown-up.

Enter the credentials and click on **Log in** button.

You will land on Dashboard page.

Click on **Account settings** from left nav pane. Enter company name and website and other information.

Navigate back to Dashboard from highlighted button.

Select **Integrations** from left nav-pane.

Click on Use button.

Click on **Generate new token** button to get the token.

Enter the name of token and click on Create token button.

Now you can go ahead and copy API token into hotglue.
# Mailgun
Source: https://docs.hotglue.com/connectors/mailgun
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Mailgun](https://mailgun.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-mailgun](https://github.com/hotgluexyz/tap-mailgun) |
| Target Repo | [https://github.com/hotgluexyz/target-mailgun](https://github.com/hotgluexyz/target-mailgun) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Mailgun connector.
## Private Key
The first thing you need to do is log in to [Mailgun](https://mailgun.com). They have a free tier, so if you don't have an account, you can make one.

Your home page should look something like this. On the bottom left side of the screen, you should click on the **Settings** option.

You should now see a menu of items. You should go ahead and select the **API Keys** option.

Now you should see your keys. Go ahead an unveil the **Private API Key** by clicking the eye icon. Once you do that, you should copy this key into hotglue!
# Tap Changelog
| Version | Notes |
| :---------------------------------------------------------------------------------------------------------------- | :-------------------------------------------- |
| [v0.1.1 - Add support for members, mailing\_lists](https://github.com/hotgluexyz/tap-mailgun/releases/tag/v0.1.1) | Add support for `members` and `mailing_lists` |
# Target Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------- |
| [v1.0.0 - Mailgun target](https://github.com/hotgluexyz/target-mailgun/releases/tag/v1.0.0) | Allows you to send any files as attachments in an email using Mailgun |
# Mailjet
Source: https://docs.hotglue.com/connectors/mailjet
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Mailjet](https://mailjet.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-mailjet](https://gitlab.com/hotglue/tap-mailjet) |
| Tap Metrics |
Usage: Success Rate:
|
# Mailshake
Source: https://docs.hotglue.com/connectors/mailshake
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Mailshake](https://mailshake.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-mailshake](https://github.com/hotgluexyz/tap-mailshake) |
| Tap Metrics |
Usage: Success Rate:
|
# Mailstep
Source: https://docs.hotglue.com/connectors/mailship
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Mailstep](https://mailstep.cz) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-mailship](https://gitlab.com/hotglue/tap-mailship) |
| Tap Metrics |
Usage: Success Rate:
|
# Marketplacer
Source: https://docs.hotglue.com/connectors/marketplacer
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Marketplacer](https://marketplacer.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Triggers | Supported |
| Tap Repo | [https://gitlab.com/hotglue/tap-marketplacer](https://gitlab.com/hotglue/tap-marketplacer) |
| Target Repo | [https://gitlab.com/hotglue/target-marketplacer](https://gitlab.com/hotglue/target-marketplacer) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
| Unified Schema | Supported in [Unified Schema](https://hotglue.com/docs/unified). |
# Medusa
Source: https://docs.hotglue.com/connectors/medusa
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Medusa](https://medusajs.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-medusa](https://github.com/hotgluexyz/tap-medusa) |
| Tap Metrics |
Usage: Success Rate:
|
| Unified Schema | Supported in [Ecommerce Unified Schema](https://hotglue.com/docs/unified). |
# Metronome
Source: https://docs.hotglue.com/connectors/metronome
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Metronome](https://metronome.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-metronome](https://gitlab.com/hotglue/tap-metronome) |
| Tap Metrics |
Usage: Success Rate:
|
# Mixpanel
Source: https://docs.hotglue.com/connectors/mixpanel
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Mixpanel](https://mixpanel.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-mixpanel](https://github.com/hotgluexyz/tap-mixpanel) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Mixpanel connector.
The first thing you need to do is log in to Mixpanel and open the **project** you want to connect.

Click on the Settings button and select **Project Settings**.

Scroll down to the page and you will find API Secret.
Now you can insert API Secret into your hotglue Mixpanel source settings.
# Tap Changelog
| Version | Notes |
| :----------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- |
| [v1.2.16](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.16) | |
| [v1.2.15](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.15) | |
| [v1.2.14](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.14) | - Added logic to ignore malformed records |
| [v1.2.13 - Disable date-time validation](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.13) | - Disable date-time validation as it is not enforced by Mixpanel |
| [v1.2.12 - Update 500 response handler](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.12) | Treat all 500 errors the same, and skip the record |
| [v1.2.11 - Change error handling](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.11) | Instead of retrying requests when getting json parse errors, just print a warning and skip the payload |
| [v1.2.10 - Add retry logic](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.10) | - Add retry logic to handle malformed responses from API |
| [v1.2.9 – Bump page\_limit param](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.9) | - Bumped `page_limit` from 200 to 1,000 to increase sync speed |
| [v1.2.8 - Fix bug with pulling unsubscribed](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.8) | - Handle pulling `mp_reserved_unsubscribed` property (with the malformed entries as `'false'`) |
| [v1.2.7 – Handle malformed cohorts](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.7) | - Handle malformed cohort error from Mixpanel (skipping that cohort) |
| [v1.2.6 - Fix incorrect cohort\_members output](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.6) | - Updated logic to use a unique session id when requesting `cohort_members` to avoid pulling incorrect cached results from a past query |
| [v1.2.5 - Pagination fixes](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.5) | Fixed bug which caused pagination to stop working when querying `cohort_members` |
| [v1.2.2 - Bug fixes](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.2) | - Fixed bug which caused execution of tap to fail when "unexpected error" from MIxpanel API was hit |
| [v1.2.1 - Handle group with cohorts of different groups](https://github.com/hotgluexyz/tap-mixpanel/releases/tag/v1.2.1) | - Fixed bug which caused execution of tap to fail with error `Cannot query one group with cohorts of different groups` when syncing `cohort_members` |
# Monday.com
Source: https://docs.hotglue.com/connectors/monday
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Monday.com](https://monday.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-monday](https://gitlab.com/hotglue/tap-monday) |
| Tap Metrics |
Usage: Success Rate:
|
# MongoDB
Source: https://docs.hotglue.com/connectors/mongodb
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [MongoDB](https://mongodb.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-mongodb](https://github.com/hotgluexyz/tap-mongodb) |
| Target Repo | [https://gitlab.com/hotglue/target-mongodb](https://gitlab.com/hotglue/target-mongodb) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the MongoDB connector.
First, we are going to go through how to find your personal API key.

Once you have logged in to MongoDB, you will be shown the home page of the MongoDB platform.

Now go ahead and click on the **Database -> Clustor.**

Click on Connect button.

Click Connect with the MangoDB Shell.

You should find the **host** and the **username**.

Select **Database** from left side navigation.

In **Collections** tab database name and information is given.

Select **Database Access** from left-side navigation. Click on **Edit** button.

Click on Edit Password.


You can get the password by clicking \*\*Autogenerate Secure Password \*\*button. Click on \*\*Copy \*\*button to copy the password.
You now have all the information Host, Username, password, database name and Auth Database that hotglue needs to connect to the MongoDB.
# Montapacking
Source: https://docs.hotglue.com/connectors/montapacking
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Montapacking](https://monta.nl) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-montapacking.git@v0](https://gitlab.com/hotglue/tap-montapacking.git@v0) |
| Target Repo | [https://gitlab.com/hotglue/target-montapacking-v2](https://gitlab.com/hotglue/target-montapacking-v2) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Moosend
Source: https://docs.hotglue.com/connectors/moosend
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Moosend](https://moosend.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-moosend](https://gitlab.com/hotglue/tap-moosend) |
| Target Repo | [https://gitlab.com/hotglue/target-moosend](https://gitlab.com/hotglue/target-moosend) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Microsoft SQL
Source: https://docs.hotglue.com/connectors/mssql
# Connector Details
| Name | Value |
| -------------- | ---------------------------------------------------------------------------------------- |
| Platform | [Microsoft SQL](https://www.microsoft.com/en-us/sql-server) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-mssql](https://github.com/hotgluexyz/tap-mssql) |
| Target Repo | [https://github.com/hotgluexyz/target-mssql](https://github.com/hotgluexyz/target-mssql) |
| Tap Metrics | Usage: |
| Target Metrics | Usage: |
# Tap MSSQL
## Config
`tap-mssql` requires the following connection parameters to be specified in the config:
```json theme={null}
{
"host": "your-server-hostname",
"port": "1433",
"database": "your_database",
"user": "your_username",
"password": "your_password"
}
```
## Example ETL Script
```python theme={null}
import gluestick as gs
import os
# Define standard Hotglue directories
ROOT_DIR = os.environ.get("ROOT_DIR", ".")
INPUT_DIR = f"{ROOT_DIR}/sync-output"
OUTPUT_DIR = f"{ROOT_DIR}/etl-output"
# Read sync output
input = gs.Reader()
# Get tenant id
tenant_id = os.environ.get('USER_ID', os.environ.get('TENANT', 'default'))
# Iterate through the different streams in the sync output
for key in eval(str(input)):
input_df = input.get(key)
"""
Here we get the metadata for extracting the key properties, such as primary and replication keys.
The database export targets will utilize these primary keys when upserting data.
If you wish to hardcode your choice of primary keys, you can do so here.
"""
metadata = input.get_metadata(key)
if metadata.get("key_properties"):
# Use the key_properties (e.g. primary and replication keys) from the catalog
key_properties = eval(metadata["key_properties"])
else:
key_properties = []
# Include tenant_id as a field if desired
input_df["tenant"] = tenant_id
# Write this stream to the OUTPUT directory with the specified key_properties
gs.to_singer(input_df, key, OUTPUT_DIR, keys=key_properties)
```
## Optional config flags
| Property | Description | Default |
| ----------------------- | ----------------------------------------------------------------------- | --------- |
| `dialect` | The SQLAlchemy dialect | `mssql` |
| `driver_type` | The Python driver used to connect to SQL Server (`pymssql` or `pyodbc`) | `pymssql` |
| `sqlalchemy_eng_params` | SQLAlchemy engine parameters (e.g., `fast_executemany`, `future`) | `None` |
| `sqlalchemy_url_query` | SQLAlchemy URL query options passed through to ODBC | `None` |
| `batch_config` | Optional batch message configuration | `None` |
| `start_date` | The earliest record date to sync | `None` |
| `hd_jsonschema_types` | Enable higher-defined JSON Schema types to assist targets | `false` |
| `stream_maps` | Config object for stream maps capability | `None` |
| `stream_map_config` | User-defined config values for map expressions | `None` |
| `flattening_enabled` | Enable schema flattening and expand nested properties | `None` |
| `flattening_max_depth` | The max depth to flatten schemas | `None` |
| `lookback_window_days` | Number of past days to include when pulling data | `None` |
### The `sqlalchemy_url_query` Option
When using `pyodbc` as the `driver_type`, you can pass ODBC-specific options. This is useful when connecting via Azure Active Directory or when certificate trust settings are required:
```json theme={null}
{
"host": "your-server-hostname",
"database": "your_database",
"user": "your_username",
"password": "your_password",
"driver_type": "pyodbc",
"sqlalchemy_url_query": {
"driver": "ODBC Driver 18 for SQL Server",
"TrustServerCertificate": "yes",
"Authentication": "ActiveDirectoryPassword"
}
}
```
### The `sqlalchemy_eng_params` Option
Enable `fast_executemany` to significantly reduce round trips to the server and improve bulk insert performance:
```json theme={null}
{
"host": "your-server-hostname",
"database": "your_database",
"user": "your_username",
"password": "your_password",
"sqlalchemy_eng_params": {
"fast_executemany": "True"
}
}
```
## Connecting to Microsoft Fabric Warehouse
Use an **Entra service principal** to connect to Microsoft Fabric Warehouse — no username/password required.
Follow the steps below to set up service principal authentication for Microsoft Fabric.
### 1. Register an app in Entra ID
* Navigate to the [Azure Portal](https://portal.azure.com) and go to **Azure Active Directory** → **App registrations** → **New registration**
* Give the app a name (e.g., `tap-mssql-fabric`) and select **Single tenant**
* Click **Register**
### 2. Get your Client ID
* On the app's **Overview** page, copy the **Application (client) ID**
* This value will be used as `user` in the tap config
### 3. Create a client secret
* Go to **Manage** → **Certificates & secrets** → **New client secret**
* Add a description and choose an expiry period, then click **Add**
* **Copy the secret Value immediately** — it is only shown once and will be used as `password` in the tap config
If you lose the client secret value, you will need to create a new secret.
### 4. Grant the app access to Fabric
* Open your workspace in [Microsoft Fabric](https://app.fabric.microsoft.com)
* Add the app as a **member** with at minimum a **Viewer** role
* Confirm the app has access to both the workspace and the specific database in your config
### 5. Get the warehouse host
* In Microsoft Fabric, open your workspace and select the **Warehouse**
* Go to **Settings** (gear icon) → **SQL Endpoint**
* Copy the SQL connection string — it follows this format: `.datawarehouse.fabric.microsoft.com`
### Config for Fabric with Entra service principal
```json theme={null}
{
"dialect": "mssql",
"driver_type": "pyodbc",
"host": "your-warehouse.datawarehouse.fabric.microsoft.com",
"database": "your_warehouse",
"user": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"password": "your-client-secret-value",
"sqlalchemy_url_query": {
"driver": "ODBC Driver 18 for SQL Server",
"Authentication": "ActiveDirectoryServicePrincipal"
}
}
```
***
# Target MSSQL
`target-mssql` is a Singer Target that loads data from your integrations into a Microsoft SQL Server database.
## Config
You can configure the target using one of two approaches:
### Option 1: Connection String
Use a single connection string that includes all database details:
```json theme={null}
{
"sqlalchemy_url": "mssql+pyodbc://username:password@host:port/database?driver=ODBC+Driver+17+for+SQL+Server&Encrypt=yes&TrustServerCertificate=yes"
}
```
If your password contains special characters, URL-encode them (e.g., `@` becomes `%40`).
### Option 2: Individual Connection Parameters
Specify each connection detail separately:
```json theme={null}
{
"user": "your_username",
"password": "your_password",
"host": "your-server-hostname",
"port": "1433",
"database": "your_database_name"
}
```
| Parameter | Description | Example |
| ---------- | ------------------------------- | ------------------------------------ |
| `user` | Database username | `"sa"` or `"admin_user"` |
| `password` | Database password | `"P@55w0rd"` |
| `host` | Server hostname or IP address | `"localhost"` or `"sql.company.com"` |
| `port` | SQL Server port (default: 1433) | `"1433"` |
| `database` | Target database name | `"my_warehouse"` |
## Additional Settings
| Setting | Description | Default |
| ----------------------- | ---------------------------------------------------- | ------- |
| `default_target_schema` | Schema where tables will be created | `"dbo"` |
| `truncate` | Drop and recreate all tables before loading (global) | `false` |
| `input_path` | Directory containing per-stream configuration file | Not set |
## Per-Stream Configuration
For advanced control over specific tables, create a `target-tables-config.json` in the directory specified by `input_path`.
```json theme={null}
{
"streams": {
"users": {
"truncate": true,
"replication_method": "truncate"
},
"orders": {
"truncate": false,
"replication_method": "merge"
}
}
}
```
**Options per stream:**
| Option | Description |
| -------------------- | ------------------------------------------------------------------------------------ |
| `truncate` | Drop and recreate this specific table before loading |
| `replication_method` | `"truncate"` replaces the entire table; `"merge"` upserts data using the primary key |
## Configuration Examples
### Basic Setup
```json theme={null}
{
"user": "sa",
"password": "P@55w0rd",
"host": "localhost",
"port": "1433",
"database": "mydatabase",
"default_target_schema": "dbo"
}
```
### With Per-Stream Control
```json theme={null}
{
"user": "sa",
"password": "P@55w0rd",
"host": "localhost",
"port": "1433",
"database": "mydatabase",
"input_path": "./etl-output"
}
```
Then create `target-tables-config.json` in `./etl-output`:
```json theme={null}
{
"streams": {
"customers": {
"truncate": true
},
"transactions": {
"replication_method": "merge"
}
}
}
```
# MYOB
Source: https://docs.hotglue.com/connectors/myob
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [MYOB](https://myob.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-myob](https://gitlab.com/hotglue/tap-myob) |
| Tap Metrics |
Usage: Success Rate:
|
# MySQL
Source: https://docs.hotglue.com/connectors/mysql
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [MySQL](https://mysql.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/transferwise/pipelinewise-tap-mysql](https://github.com/transferwise/pipelinewise-tap-mysql) |
| Target Repo | [https://github.com/hotgluexyz/target-mysql-v2](https://github.com/hotgluexyz/target-mysql-v2) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Target MySQL
## Config
`target-mysql` requires the standard 5 connection parameters to be specified in the config:
```json theme={null}
{
"host": "https://...",
"port": "3306",
"user": "...",
"password": "...",
"database": "...",
}
```
## Example ETL Script
```python theme={null}
import gluestick as gs
import os
# Define standard Hotglue directories
ROOT_DIR = os.environ.get("ROOT_DIR", ".")
INPUT_DIR = f"{ROOT_DIR}/sync-output"
OUTPUT_DIR = f"{ROOT_DIR}/etl-output"
# Read sync output
input = gs.Reader()
# Get tenant id
tenant_id = os.environ.get('USER_ID', os.environ.get('TENANT', 'default'))
# Iterate through the different streams in the sync output
for key in eval(str(input)):
input_df = input.get(key)
"""
Here we get the metadata for extracting the key properties, such as primary and replication keys.
The database export targets will utilize these primary keys when upserting data.
If you wish to hardcode your choice of primary keys, you can do so here.
"""
metadata = input.get_metadata(key)
if metadata.get("key_properties"):
# Use the key_properties (e.g. primary and replication keys) from the catalog
key_properties = eval(metadata["key_properties"])
else:
key_properties = []
# Include tenant_id as a field if desired
input_df["tenant"] = tenant_id
# Write this stream to the OUTPUT directory with the specified key_properties
gs.to_singer(input_df, key, OUTPUT_DIR, keys=key_properties)
```
## Optional config flags
| Property | Description | Default |
| ------------------------- | -------------------------------------------------------- | ------------------ |
| table\_name\_pattern | MySQL table name pattern to use when creating tables | "\$\{TABLE\_NAME}" |
| lower\_case\_table\_names | Use lowercase for table names or not | true |
| allow\_column\_alter | Allow column alterations or not | false |
| replace\_null | Replace null values with others or not | false |
| table\_config | Dictionary with specifications on insert/upsert/truncate | |
### The `replace_null` Option (Experimental)
By enabling the `replace_null` option, null values are replaced with 'empty' equivalents based on their data type. Use with caution as it may alter data semantics.
When `replace_null` is `true`, null values are replaced as follows:
| JSON Schema Data Type | Null Value Replacement |
| --------------------- | ---------------------- |
| string | Empty string(`""`) |
| number | `0` |
| object | Empty object(`{}`) |
| array | Empty array(`[]`) |
| boolean | `false` |
| null | null |
### The `table_config` option
By default, target-mysql will upsert your payload into each table. This means it will insert all new data into your table, but perform an update on primary key collision.
The `table_config` allows you to override this behavior with one of two insertion methods:
* `truncate`: Delete the existing table and replace it with the new data
* `insert`: Attempt to insert all records as new rows, throwing an error on primary key collision
If you want to use the `truncate` or `insert` methods, you can specify which tables should use the method using the `table_config` flag:
```json theme={null}
{
"host": "..."
....
"table_config": {
"accounts": "truncate",
"vendors": "insert",
}
}
```
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [1.6.0 (2024-05-09)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.6.0) | ## What's Changed \* Prefer SSL connection to source by @louis-pie in [https://github.com/transferwise/pipelinewise-tap-mysql/pull/181](https://github.com/transferwise/pipelinewise-tap-mysql/pull/181)
**Full Changelog**: [https://github.com/transferwise/pipelinewise-tap-mysql/compare/v1.5.5...v1.5.6](https://github.com/transferwise/pipelinewise-tap-mysql/compare/v1.5.5...v1.5.6) |
| [1.5.5 (2023-07-05)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.5.5) | ## What's Changed \* LookupError: unknown encoding: utf8mb3 by @Samira-El in [https://github.com/transferwise/pipelinewise-tap-mysql/pull/163](https://github.com/transferwise/pipelinewise-tap-mysql/pull/163) \* Bump plpygis from 0.2.0 to 0.2.1 by @dependabot in [https://github.com/transferwise/pipelinewise-tap-mysql/pull/142](https://github.com/transferwise/pipelinewise-tap-mysql/pull/142)
**Full Changelog**: [https://github.com/transferwise/pipelinewise-tap-mysql/compare/v1.5.4...v1.5.5](https://github.com/transferwise/pipelinewise-tap-mysql/compare/v1.5.4...v1.5.5) |
| [1.5.4 (2023-05-22)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.5.4) | ## What's Changed \* AP-1477: Bump python-mysql-replication by @Samira-El in [https://github.com/transferwise/pipelinewise-tap-mysql/pull/156](https://github.com/transferwise/pipelinewise-tap-mysql/pull/156)
**Full Changelog**: [https://github.com/transferwise/pipelinewise-tap-mysql/compare/v1.5.3...v1.5.4](https://github.com/transferwise/pipelinewise-tap-mysql/compare/v1.5.3...v1.5.4) |
| [1.5.3 (2023-04-25)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.5.3) | \* LOG\_BASED: Set mariadb slave capability to 4 to mitigate bug in Mariadb 10.6.12 ([https://github.com/transferwise/pipelinewise-tap-mysql/pull/149](https://github.com/transferwise/pipelinewise-tap-mysql/pull/149))
|
| [1.5.2 (2022-08-12)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.5.2) | \* Bump mysql-replication to 0.30 |
| [1.5.1 (2022-04-05)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.5.1) | Fix: Handle case when BINLOG\_GTID\_POS returns multiple comma separated GTIDs |
| [1.5.0 (2022-03-11)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.5.0) | - Support logical replication using GTID, for both Mariadb & MySql - Log error message when session sqls fail - Bump depenedencies to support Mysql 8 - Migrate CI to Github Actions. |
| [1.4.3 (2021-04-09)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.4.3) | \* Fix in LOG\_BASED method: re-discovery constantly running when table has unsupported column type. \* Add support for tinytext column type \* Bump pendulum to 1.5.1 \* Add unit tests and re-arrange tests folder |
| [1.4.2 (2021-03-15)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.4.2) | Fixing typo introduced by a previous change. |
| [1.4.1 (2021-03-12)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.4.1) | Fix data loss during log\_based replication. |
| [1.4.0 (2020-11-09)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.4.0) | Support MySQL spatial types |
| [1.3.8 (2020-10-16)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.8) | Fix mapping bit to boolean values |
| [1.3.7 (2020-09-04)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.7) | Fix an issue with converting row to singer record where encountering a `time` type column causes the override of the whole row. |
| [1.3.6 (2020-09-02)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.6) | Fixed an issue when every extracted row was logged at `INFO` level and produced huge log files |
| [1.3.5 (2020-08-27)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.5) | Fix issue with `time` sql type not properly processed.
Previously, it used to be turned into a datetime in the form of `1970-01-01 HH:MM:SS`, and now it's formatted to only be `HH:MM:SS` |
| [1.3.4 (2020-08-05)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.4) | Fix few issues with new discovered schema after changes are detected during LOG\_BASED runtime. |
| [1.3.3 (2020-07-23)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.3) | During LOG\_BASED runtime, detect new columns, incl renamed ones, by comparing the columns in the binlog event to the stream schema, and if there are any additional columns, run discovery and send a new SCHEMA message to target. This helps avoid data loss. |
| [1.3.2 (2020-06-15)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.2) | - Revert `pymysql` back to `0.7.11`. `pymysql >= 0.8.1` introducing some not expected and not backward compatible changes how it's dealing with invalid datetime columns. |
| [1.3.1 (2020-06-15)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.1) | - Fix dependency issue by removing `attrs` from `setup.py` - Bump `pymysql` to `0.9.3` |
| [1.3.0 (2020-05-18)](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.3.0) | - Add optional `session_sqls` connection parameter - Support `JSON` column types |
| [Make logging customizable](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.2.0) | |
| [Update bookmark only if binlog position is valid](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.1.5) | |
| [Update bookmark when reading bookmark finished](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.1.4) | |
| [Update bookmark only before writing state message](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.1.3) | |
| [Handle null bytes in Binary type columns using SQL](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.1.2) | |
| [Handle padding 0s in Binary type columns](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.1.1) | |
| [ Support binary and varbinary columns](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.1.0) | |
| [Upgrade mysql-replication package](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.0.7) | |
| [Add license classifier](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.0.6) | |
| [Remove BINARY and VARBINARY support](https://github.com/transferwise/pipelinewise-tap-mysql/releases/tag/v1.0.5) | |
# Netohq
Source: https://docs.hotglue.com/connectors/netohq
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Netohq](https://netohq.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-netohq](https://gitlab.com/hotglue/tap-netohq) |
| Tap Metrics |
Usage: Success Rate:
|
# NetSuite
Source: https://docs.hotglue.com/connectors/netsuite
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [NetSuite](https://NetSuite.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-netsuite-rest](https://github.com/hotgluexyz/tap-netsuite-rest) |
| Target Repo | [https://github.com/hotgluexyz/target-netsuite-v2](https://github.com/hotgluexyz/target-netsuite-v2) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
| Unified Schema | Supported in [Accounting Unified Schema](https://hotglue.com/docs/unified). |
# Credentials Setup
Follow the steps below to get the credentials you need to use the NetSuite connector.
#### Step 1: Create a new Integration in NetSuite.
Head to Setup > Integration > Manage Integrations > New.
Now fill out the fields as shown.
* Choose an integration name of your choice.
* You must select Token Based Authentication and TBA: Issuetoken Endpoint
* You must NOT select Authorization Code Grant
Save your NetSuite Consumer Key and NetSuite Consumer Secret.
#### Step 2A (Easy): Create a NetSuite Role with the appropriate permissions.
This is the easiest way to setup a NetSuite Role with the appropriate permissions for Hotglue.
Head to Customization > SuiteBundler > Search & Install Bundles
Type in 572067 (*or 572066*) as your keyword, hit the search button, and select the Hotglue (read-only) (*or Hotglue (read+write)*) role.
If you want write permission given to Hotglue, you can type in 572066. Make sure the package says *Hotglue (read+write).*
Install the bundle.
Your role name for Step 3 will now be Hotglue (read-only) or Hotglue (read+write).
[Go to Step 3](#step-3-assign-netsuite-role-to-netsuite-user)
#### Step 2B (Hard): Create a NetSuite Role with the appropriate permissions.
It is recommended that you follow [Step 2A (Easy)](#step-2a-easy-%3A-create-a-netsuite-role-with-the-appropriate-permissions):
Head to Setup > Users/Roles > Manage Roles > New

Choose a new role name of your choice and go to Permissions - Setup on the bottom of the page.
Now add the following permissions:
* User Access Token (Full)
* SOAP Web Services (Full)
* Log in using Access Tokens (Full)
* Integration Application (Full)
* REST Web Services (Full)
* Access Token Management (Full)

Add the permissions you need to access relevant data in the Transactions, Reports, and Lists sections.
See a full list of available objects in the [NetSuite docs](https://www.NetSuite.com/help/helpcenter/en_US/srbrowser/Browser2016_1/schema/record/account.html)
Hit the save button.
#### Step 3: Assign NetSuite Role to NetSuite User
If you want to assign the Integration Token a New User, head to Lists > Employees > Employees > New

Alternatively, if you already have a User you'd like to use ready, head to Lists > Employees > Employees > Search and open the user.

Once you have opened the relevant user, and select Edit

Edit Employee
Scroll down to the Access > Roles tab, and add our new Integration Role to the list

Add Integration Role to User
Press Save
#### Step 4: Generate NetSuite Access Token / Secret
Head to Setup > Users/Roles > Access Tokens > New
On the Access Token page, select the Integration Record (Application Name), User, and Role we just setup.
Once configured, press Save. You will see your NetSuite Token ID (Key) / Secret at the bottom of the page:

#### Step 5: Add the credentials to Hotglue
We're done! You're ready to use the NetSuite integration in Hotglue.
To find your account ID, you can either search NetSuite for Account ID, or you can take the first number in your URL for NetSuite.
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- |
| [v1.5.20](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.20) | |
| [v1.5.19](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.19) | |
| [v1.5.18](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.18) | |
| [v1.5.17](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.17) | |
| [v1.5.16](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.16) | |
| [v1.5.15](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.15) | |
| [v1.5.14](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.14) | |
| [v1.5.13](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.13) | |
| [v1.5.12](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.12) | |
| [v1.5.11](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.11) | - Update replicate key logic |
| [v1.5.10](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.10) | - Fix replication keys issues |
| [v1.5.9](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.9) | |
| [v1.5.8 - Add support for discount lines](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.8) | - Add support for discount lines in `Invoices` |
| [v1.5.7 - Add backoff handling](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.7) | - Add backoff handling in NetSuite SDK to handle gateway timeouts and concurrent request exceptions |
| [v1.5.6 - Bump NetSuite sdk](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.6) | - Bumped NetSuite sdk version |
| [v1.5.5 - Handle empty data error](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.5) | - Handle error when there's no data for a stream |
| [v1.5.4 - Fix Item schema issue](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.4) | - Updated `rate` schema to `string` instead of `number` |
| [v1.5.3 - Add support for Purchase Orders](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.3) | - Added support for Purchase Orders |
| [v1.5.1 – Add SalesOrder support](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.1) | Added support for pulling Sales Orders and added `internalid` to payloads |
| [v1.5.0 – Fix issue with duplicate columns in output](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.5.0) | - Fixed schema issue causing duplicate `LastModDate` entry in the output for `InventoryItem` |
| [v1.4.33 - Hotfix for pulling Vendor Payments and Vendor Bills](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.4.33) | Fixed bug pulling Vendor Payments and Vendor Bills which was caused by updating NetSuite SDK |
| [v1.4.32 - Add support for inventory management endpoints](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.4.32) | Added support for inventory management endpoints |
| [v1.4.31](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.4.31) | Update issue with `replication_key_value` missing assignment |
| [v1.4.30](https://github.com/hotgluexyz/tap-NetSuite/releases/tag/v1.4.30) | Add support for Vendors, VendorBills, VendorPayments, and Invoices |
# Notion
Source: https://docs.hotglue.com/connectors/notion
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Notion](https://notion.so) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-notion](https://gitlab.com/hotglue/tap-notion) |
| Tap Metrics |
Usage: Success Rate:
|
# Odoo
Source: https://docs.hotglue.com/connectors/odoo
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Odoo](https://odoo.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-odoo](https://gitlab.com/hotglue/tap-odoo) |
| Target Repo | [https://gitlab.com/hotglue/target-odoo-v3](https://gitlab.com/hotglue/target-odoo-v3) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Omnisend
Source: https://docs.hotglue.com/connectors/omnisend
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Omnisend](https://omnisend.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-omnisend](https://gitlab.com/hotglue/tap-omnisend) |
| Tap Metrics |
Usage: Success Rate:
|
# Ongoing WMS
Source: https://docs.hotglue.com/connectors/ongoing
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Ongoing WMS](https://ongoingwarehouse.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-ongoing](https://github.com/hotgluexyz/tap-ongoing) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Ongoing WMS connector.
## Goods Owner ID, API Username, and API Password
The first thing you need to do is log in to Ongoing WMS.

Your home page should look something like this. On the top left side of your screen, you should click the Applications option from the navigation menu.

Now, you should select the API for goods owners option.

On this page, you will see your Goods owners. For this example, I am going to use the hotglue testing owner. As you can see, the Goods owner ID is on the left hand side. This is one of the credentials you will need for hotglue! Go ahead and copy it into hotglue.
Once you have done that, you need to make sure the API is enabled for that specific user. If there is a check mark in the **Has API access** column, then it is already done. If it is not checked off, click the down arrow.

If the API access has not been enabled, go ahead and click Allow API access.

You should now fill out this form. Make sure you copy the credentials from your Username and Password into hotglue.

Once you have filled out this form, click create!

You will now be able to see the related User ID that you need to put into hotglue as well. Make sure to mark it down!

## Warehouse name
The last thing you will need is the Warehouse you are looking to connect. To find the name, head to the Warehouses section of your account.

Now go ahead and grab the name of whichever Warehouse you want to connect in hotglue. For this example, we are going to choose the hotglueWarehouse. And that is it! You now have all of your credentials.
# Open Exchange Rates
Source: https://docs.hotglue.com/connectors/openexchangerates
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Open Exchange Rates](https://openexchangerates.org) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-openexchangerates](https://gitlab.com/hotglue/tap-openexchangerates) |
| Tap Metrics |
Usage: Success Rate:
|
# Ordoro
Source: https://docs.hotglue.com/connectors/ordoro
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Ordoro](https://ordoro.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-ordoro](https://gitlab.com/hotglue/tap-ordoro) |
| Tap Metrics |
Usage: Success Rate:
|
# Outreach
Source: https://docs.hotglue.com/connectors/outreach
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Outreach](https://outreach.io) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-outreach](https://gitlab.com/hotglue/tap-outreach) |
| Tap Metrics |
Usage: Success Rate:
|
# PagerDuty
Source: https://docs.hotglue.com/connectors/pagerduty
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [PagerDuty](https://pagerduty.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-pagerduty](https://github.com/hotgluexyz/tap-pagerduty) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the PagerDuty connector.
The first thing you must do is [log in to PagerDuty](https://app.pagerduty.com).

Now that you have logged in, go ahead and click on the Integrations tab on the top of the page.

From the resulting drop down, you are going to want to select the API Access Keys option.

If you already have created your API Key, you will be able to find it here. If you have not made your API Key yet, start by clicking the Create New API Key button.

Now you should input the description of the key and click Create Key.

Now you have your API key. Don't forget to put it in hotglue! :)
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [v0.1.2 - Add support for Users Stream](https://github.com/hotgluexyz/tap-pagerduty/releases/tag/v0.1.2) | Add support for pulling users: [https://developer.pagerduty.com/api-reference/reference/REST/openapiv3.json/paths/\~1users/get](https://developer.pagerduty.com/api-reference/reference/REST/openapiv3.json/paths/~1users/get) |
# PayPal
Source: https://docs.hotglue.com/connectors/paypal
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [PayPal](https://paypal.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-paypal](https://gitlab.com/hotglue/tap-paypal) |
| Tap Metrics |
Usage: Success Rate:
|
# Picqer
Source: https://docs.hotglue.com/connectors/picqer
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Picqer](https://picqer.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-picqer](https://gitlab.com/hotglue/tap-picqer) |
| Target Repo | [https://gitlab.com/hotglue/target-picqer](https://gitlab.com/hotglue/target-picqer) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Pipedrive
Source: https://docs.hotglue.com/connectors/pipedrive
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [Pipedrive](https://pipedrive.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Triggers | Supported |
| Tap Repo | [https://github.com/hotgluexyz/tap-pipedrive](https://github.com/hotgluexyz/tap-pipedrive) |
| Target Repo | [https://gitlab.com/hotglue/target-pipedrive](https://gitlab.com/hotglue/target-pipedrive) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
| Unified Schema | Supported in [Sales Unified Schema](https://hotglue.com/docs/unified). |
# Credentials Setup
Follow the steps below to get the credentials you need to use the Pipedrive connector.
All you need to begin integrating with Pipedrive is an OAuth app and a sandbox account. Both are free through [Pipedrive's developer program](https://developers.pipedrive.com/). You are also welcome to use hotglue's OAuth app to test.
Once you have an account, head over to Pipedrive's [developer hub](https://app.pipedrive.com/developer-hub) to create an OAuth app.

1. Click "Create new app". You can use a private app to test, but you will eventually need to create a public app for your customers.
2. Name your app with your business name, and set your callback URL as `https://hotglue.xyz/callback`
3. Set your scopes. This will vary depending on the data you expect to utilize, but **See Recent Account Activity** will always be needed. Let us know if you need help figuring out what these need to be.
4. Click save. Below the scopes you will find your Client ID and secret. Paste these into hotglue.
# Tap Changelog
| Version | Notes |
| :------------------------------------------------------------------------ | :-------------------------------- |
| [v1.1.6](https://github.com/hotgluexyz/tap-pipedrive/releases/tag/v1.1.6) | |
| [v1.1.5](https://github.com/hotgluexyz/tap-pipedrive/releases/tag/v1.1.5) | |
| [v1.1.4](https://github.com/hotgluexyz/tap-pipedrive/releases/tag/v1.1.4) | clean up custom fields in catalog |
| [v1.1.3](https://github.com/hotgluexyz/tap-pipedrive/releases/tag/v1.1.3) | Bug fixes |
| [v1.1.2](https://github.com/hotgluexyz/tap-pipedrive/releases/tag/v1.1.2) | |
| [v1.1.1](https://github.com/hotgluexyz/tap-pipedrive/releases/tag/v1.1.1) | |
# plentymarkets
Source: https://docs.hotglue.com/connectors/plentymarkets
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [plentymarkets](https://plentymarkets.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-plentymarkets](https://gitlab.com/hotglue/tap-plentymarkets) |
| Tap Metrics |
Usage: Success Rate:
|
# PostgreSQL
Source: https://docs.hotglue.com/connectors/postgres
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------- |
| Platform | [PostgreSQL](https://postgresql.org) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-postgres](https://gitlab.com/hotglue/tap-postgres) |
| Target Repo | [https://github.com/hotgluexyz/pipelinewise-target-postgres](https://github.com/hotgluexyz/pipelinewise-target-postgres) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
# Target Postgres
## Config
`target-postgres` requires the standard 6 connection parameters to be specified in the config:
```json theme={null}
{
"host": "https://...",
"port": "5432",
"user": "...",
"password": "...",
"dbname": "...",
"default_target_schema": "public"
}
```
## Example ETL Script
```python theme={null}
import gluestick as gs
import os
# Define standard Hotglue directories
ROOT_DIR = os.environ.get("ROOT_DIR", ".")
INPUT_DIR = f"{ROOT_DIR}/sync-output"
OUTPUT_DIR = f"{ROOT_DIR}/etl-output"
# Read sync output
input = gs.Reader()
# Get tenant id
tenant_id = os.environ.get('USER_ID', os.environ.get('TENANT', 'default'))
# Iterate through the different streams in the sync output
for key in eval(str(input)):
input_df = input.get(key)
"""
Here we get the metadata for extracting the key properties, such as primary and replication keys.
The database export targets will utilize these primary keys when upserting data.
If you wish to hardcode your choice of primary keys, you can do so here.
"""
metadata = input.get_metadata(key)
if metadata.get("key_properties"):
# Use the key_properties (e.g. primary and replication keys) from the catalog
key_properties = eval(metadata["key_properties"])
else:
key_properties = []
# Include tenant_id as a field if desired
input_df["tenant"] = tenant_id
# Write this stream to the OUTPUT directory with the specified key_properties
gs.to_singer(input_df, key, OUTPUT_DIR, keys=key_properties)
```
## Optional config flags
| Property | Type | Description |
| ------------------------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ssl | Boolean | (Default: False) Enable SSL for the connection to Postgres. |
| insertion\_method | String | (Default: 'incremental') Currently only handles 'truncate' (drop and re-create table before adding rows) and 'incremental' (upsert new rows) |
| batch\_size\_rows | Integer | (Default: 100000) Maximum number of rows in each batch. At the end of each batch, the rows in the batch are loaded into Postgres. |
| flush\_all\_streams | Boolean | (Default: False) Flush and load every stream into Postgres when one batch is full. Warning: This may trigger the COPY command to use files with low number of records. |
| parallelism | Integer | (Default: 0) The number of threads used to flush tables. 0 will create a thread for each stream, up to parallelism\_max. -1 will create a thread for each CPU core. Any other positive number will create that number of threads, up to parallelism\_max. |
| max\_parallelism | Integer | (Default: 16) Max number of parallel threads to use when flushing tables. |
| default\_target\_schema | String | Name of the schema where the tables will be created. If `schema_mapping` is not defined then every stream sent by the tap is loaded into this schema. |
| default\_target\_schema\_select\_permission | String | Grant USAGE privilege on newly created schemas and grant SELECT privilege on newly created |
| schema\_mapping | Object | Useful if you want to load multiple streams from one tap to multiple Postgres schemas. If the tap sends the `stream_id` in `-` format then this option overwrites the `default_target_schema` value. Note, that using `schema_mapping` you can overwrite the `default_target_schema_select_permission` value to grant SELECT permissions to different groups per schemas or optionally you can create indices automatically for the replicated tables. **Note**: This is an experimental feature and recommended to use via PipelineWise YAML files that will generate the object mapping in the right JSON format. For further info check a [PipelineWise YAML Example](https://transferwise.github.io/pipelinewise/connectors/taps/mysql.html#configuring-what-to-replicate). |
| add\_metadata\_columns | Boolean | (Default: False) Metadata columns add extra row level information about data ingestions, (i.e. when was the row read in source, when was inserted or deleted in postgres etc.) Metadata columns are creating automatically by adding extra columns to the tables with a column prefix `_SDC_`. The column names are following the stitch naming conventions documented at [https://www.stitchdata.com/docs/data-structure/integration-schemas#sdc-columns](https://www.stitchdata.com/docs/data-structure/integration-schemas#sdc-columns). Enabling metadata columns will flag the deleted rows by setting the `_SDC_DELETED_AT` metadata column. Without the `add_metadata_columns` option the deleted rows from singer taps will not be recognisable in Postgres. |
| hard\_delete | Boolean | (Default: False) When `hard_delete` option is true then DELETE SQL commands will be performed in Postgres to delete rows in tables. It's achieved by continuously checking the `_SDC_DELETED_AT` metadata column sent by the singer tap. Due to deleting rows requires metadata columns, `hard_delete` option automatically enables the `add_metadata_columns` option as well. |
| data\_flattening\_max\_level | Integer | (Default: 0) Object type RECORD items from taps can be transformed to flattened columns by creating columns automatically. When value is 0 (default) then flattening functionality is turned off. |
| primary\_key\_required | Boolean | (Default: True) Log based and Incremental replications on tables with no Primary Key cause duplicates when merging UPDATE events. When set to true, stop loading data if no Primary Key is defined. |
| validate\_records | Boolean | (Default: False) Validate every single record message to the corresponding JSON schema. This option is disabled by default and invalid RECORD messages will fail only at load time by Postgres. Enabling this option will detect invalid records earlier but could cause performance degradation. |
| temp\_dir | String | (Default: platform-dependent) Directory of temporary CSV files with RECORD messages. |
| insertion\_method\_tables | Array(String) | (Default: \[]) Tables to apply "insertion method" to. Has no effect if insertion method not specified. |
# Target Changelog
| Version | Notes |
| :-------------------------------------------------------------------------- | :------------------------------- |
| [v0.3.0](https://github.com/hotgluexyz/target-postgres/releases/tag/v0.3.0) | |
| [v0.2.6](https://github.com/hotgluexyz/target-postgres/releases/tag/v0.2.6) | |
| [v0.2.5](https://github.com/hotgluexyz/target-postgres/releases/tag/v0.2.5) | - Switch to using psycog2 binary |
# PostHog
Source: https://docs.hotglue.com/connectors/posthog
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [PostHog](https://posthog.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-posthog](https://gitlab.com/hotglue/tap-posthog) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the PostHog connector.
Inside your project in PostHog, Click on the login-in name at top right.

Select the settings icon to navigate to the settings page.

Scroll down the page and create a new Personal API key.
Now you can insert API Secret into your hotglue PostHog source settings:
# PowerBI
Source: https://docs.hotglue.com/connectors/powerbi
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [PowerBI](https://powerbi.microsoft.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-powerbi](https://gitlab.com/hotglue/tap-powerbi) |
| Target Repo | [https://gitlab.com/hotglue/target-powerbi](https://gitlab.com/hotglue/target-powerbi) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the PowerBI connector.
# Precoro
Source: https://docs.hotglue.com/connectors/precoro
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Precoro](https://precoro.com) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-precoro](https://gitlab.com/hotglue/tap-precoro) |
| Target Repo | [https://gitlab.com/hotglue/target-precoro](https://gitlab.com/hotglue/target-precoro) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# PrestaShop
Source: https://docs.hotglue.com/connectors/prestashop
# Connector Details
| Name | Value |
| :---------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [PrestaShop](https://prestashop.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-prestashop](https://gitlab.com/hotglue/tap-prestashop) |
| Tap Metrics |
Usage:
|
# Procore
Source: https://docs.hotglue.com/connectors/procore
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Procore](https://procore.com) |
| Auth Type | OAuth |
| Direction | Read |
| Tap Repo | [https://github.com/hotgluexyz/tap-procore](https://github.com/hotgluexyz/tap-procore) |
| Tap Metrics |
Usage: Success Rate:
|
# Credentials Setup
Follow the steps below to get the credentials you need to use the Procore connector.
In this section, you will learn how to get your OAuth credentials from Procore. First thing you must do is log in to their [developer portal](https://developers.procore.com).

Once you log in, you will see this page. You should click the Create A New App option.

Next, you should name your app accordingly. We suggest "company-name app". Then, click the Create button.

You will now be taken to this page. You will most likely have to wait a few minutes for Procore to finish setting up your sandbox. In the mean time, upload your logo for the App Avatar section on the page. Once you wait about 5 minutes, go ahead and refresh the page.

The next thing you should do is click Create New Version under Manage Manifests.

Follow the instructions given, and once you are finished, click the Create button.

You will now be able to see your OAuth Client ID and Client Secret for your app. Make sure that for the Redirect URL, you put
```text theme={null}
https://hotglue.xyz/callback
```
And that is it! You now have your credentials to start using the Procore credenitials in hotglue.
# Tap Changelog
| Version | Notes |
| :----------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------- |
| [v0.0.11 - Add Purchase Orders support](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.11) | - Added support for pulling Purchase Orders |
| [v0.0.10 - Fix subfolder processing](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.10) | Fix bug with `company_id` missing on subfolders |
| [v0.0.9 - Handle Procore-Company-Id header](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.9) | Meet requirement for production level Procore integrations to include a `Procore-Company-Id` header in each request. |
| [v0.0.8 - Handle refresh\_tokens correctly in prod](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.8) | Fixes to handle production Procore accounts correctly |
| [v0.0.7 - Add support for files in root directory](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.7) | Now supports pulling documents in the root project directory |
| [0.0.6 - Add `project_id` to stream response](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.6) | Add `project_id` to stream response |
| [v0.0.5 - Add Users Stream](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.5) | Added `Users` stream which includes all Project Members from Procore |
| [v0.0.4 - Add ProjectRoles stream](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.4) | Added ProjectRoles stream to tap |
| [v0.0.3 - Remove catalog config](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.3) | Remove catalog config... again |
| [v0.0.2 - Hot Fix](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.2) | Currently only works if all streams are selected in catalog |
| [v0.0.1 - Initial version](https://github.com/hotgluexyz/tap-procore/releases/tag/v0.0.1) | Singer tap for Procore built on Meltano's Singer SDK |
# PropX
Source: https://docs.hotglue.com/connectors/propx
# Connector Details
| Name | Value |
| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [PropX](https://propx.com) |
| Auth Type | API Keys |
| Direction | Read |
| Tap Repo | [https://gitlab.com/hotglue/tap-propx](https://gitlab.com/hotglue/tap-propx) |
| Tap Metrics |
Usage: Success Rate:
|
# QLS
Source: https://docs.hotglue.com/connectors/qls
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [QLS](https://qls.nl) |
| Auth Type | API Keys |
| Direction | Bidirectional |
| Tap Repo | [https://gitlab.com/hotglue/tap-qls](https://gitlab.com/hotglue/tap-qls) |
| Target Repo | [https://gitlab.com/hotglue/target-qls](https://gitlab.com/hotglue/target-qls) |
| Tap Metrics |
Usage: Success Rate:
|
| Target Metrics |
Usage: Success Rate:
|
# Azure Queue Storage
Source: https://docs.hotglue.com/connectors/queue-storage
# Connector Details
| Name | Value |
| :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Platform | [Azure Queue Storage](https://learn.microsoft.com/en-us/azure/storage/queues/storage-queues-introduction) |
| Auth Type | API Keys |
| Direction | Write |
| Target Repo | [https://github.com/hotgluexyz/target-queue-storage](https://github.com/hotgluexyz/target-queue-storage) |
| Target Metrics |
Usage: Success Rate:
|
# Credentials Setup
#### Step 1: Find your Storage Account
First, you will need to go to the [Azure Portal](https://azure.microsoft.com/en-us/get-started/azure-portal).
Sign in to your Azure Portal.
Use the search bar and search for `storage account`. Click on `Storage accounts`.
Find the storage account that contains the Queue you want to connect to. Click on its name.
#### Step 2: Create a Shared Access Signature and Connection String
Once you click on the name of the storage account, you will see a pop up with a sidebar.
In the sidebar, go to `Security + networking` and click on `Shared access signature`.
You must select the following options:
* `Allowed services` : `Queue`
* `Allowed resource types` : `Container`, `Object`
* `Allowed permissions` : `Read`, `Write`, `Delete`, `List`, `Add`, `Create`, `Update`, `Process`
For the `Start and expiry date/time` section, you should set the fields as follows:
* `Start`: Do not touch the start time, it should be the current datetime.
* `End`: This is when Hotglue's access to your queue storage will stop. You will have to get new credentials (repeat this entire process) each time you hit this end date.
For the `Allowed IP addresses`, leave the section blank. If your organization requires otherwise, you should contact us directly.
You must read the following about `Signing keys`, as it may affect how long the connection string credentials will be valid.
Choose your `Signing key` with the following considerations:
* Every time your `Signing key` (`Access key`) is rotated/regenerated, you will have to get new credentials (repeat this entire process) again.
* If you need more information, we recommend looking at [Microsoft's Docs](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?tabs=azure-portal)
Click on `Generate SAS and connection string`.
#### Step 3: Copy Credentials to Hotglue
For this step, you will need to copy over the `Connection string` to Hotglue.
Your `Queue Name` is the name of your queue in Azure.
Your `Queue Key` is a label of your choice.
Save your credentials.
Congratulations! You have successfully connected your Queue Storage to Hotglue!
# QuickBooks
Source: https://docs.hotglue.com/connectors/quickbooks
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [QuickBooks](https://quickbooks.intuit.com) |
| Auth Type | OAuth |
| Direction | Bidirectional |
| Tap Repo | [https://github.com/hotgluexyz/tap-quickbooks](https://github.com/hotgluexyz/tap-quickbooks) |
| Target Repo | [https://github.com/hotgluexyz/target-quickbooks-v2](https://github.com/hotgluexyz/target-quickbooks-v2) |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
| Unified Schema | Supported in [Accounting Unified Schema](https://hotglue.com/docs/unified). |
# Credentials Setup
Follow the steps below to get the credentials you need to use the QuickBooks connector.
To create a QuickBooks OAuth app, you will need to register for a [free developer account](https://developer.intuit.com/app/developer/qbdesktop/docs/get-started/create-an-intuit-developer-account) on the [Intuit Developer Portal](https://developer.intuit.com/app/developer/homepage).
Once you have registered for an Intuit Developer account, you should be able to access the [Developer Dashboard](https://developer.intuit.com/app/developer/dashboard) which should look something like below:

From here, you can create an OAuth app by selecting Create an app. Select QuickBooks Online and Payments as the platform you want to develop for, as pictured below:

You will then need to provide an app name, scope, and select the teamt o access the app. hotglue integrations generally **do not** deal with QuickBooks Payments, so you can just select the `com.intuit.quickbooks.accounting` scope as pictured below:

Once done, select **Create app**. This will take you to the App settings page, where you can configure two separate sets of credentials:
* **Development Settings** gives you credentials / settings for configuring an OAuth app to access QuickBooks Online Sandbox accounts. This is only for testing purposes.
* **Production Settings** gives you credentials / settngs for configuring an OAuth app to access QuickBooks Online Production accounts.
For this example, I will walk through the **Development Settings**, as the process is the same for both. Click on **Keys & credentials**

You should then see a screen similar to below, where you can a **Redirect URI**:

From this screen, add ` as a valid redirect URI. If you do not do this step, hotglue will not be able to make OAuth connections on your behalf. Once done, click **Save**

Now you can insert the client id and client secret pair from the **Keys** section into your hotglue QuickBooks source settings.
# Tap Changelog
| Version | Notes |
| :--------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------- |
| [v1.6.4](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.6.4) | |
| [v1.6.3](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.6.3) | |
| [v1.6.2](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.6.2) | |
| [v1.6.1](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.6.1) | |
| [v1.6.0](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.6.0) | |
| [v1.5.17](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.17) | |
| [v1.5.16](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.16) | fixes |
| [v1.5.15](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.15) | fixes |
| [v1.5.14](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.14) | bug fixes |
| [v1.5.13](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.13) | bug fixes |
| [v1.5.12](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.12) | fixes |
| [v1.5.11](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.11) | |
| [v1.5.10](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.10) | |
| [v1.5.9](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.9) | |
| [v1.5.8](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.8) | |
| [v1.5.7](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.7) | |
| [v1.5.6](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.6) | |
| [v1.5.5](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.5) | |
| [v1.5.4](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.4) | |
| [v1.5.3](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.3) | |
| [v1.5.2](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.2) | |
| [v1.5.1](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.1) | |
| [v1.5.0](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.5.0) | |
| [v1.4.53](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.53) | |
| [v1.4.52](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.52) | |
| [v1.4.49](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.49) | |
| [v1.4.48](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.48) | |
| [v1.4.47](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.47) | |
| [v1.4.46](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.46) | |
| [v1.4.45](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.45) | |
| [v1.4.44](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.44) | |
| [v1.4.43](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.43) | |
| [v1.4.42](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.42) | |
| [v1.4.41](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.41) | |
| [v1.4.39](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.39) | |
| [v1.4.38](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.38) | |
| [v1.4.37 - Include description on invoice and credit line item](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.37) | Include description on invoice and credit line item |
| [v1.4.36 - Add Support for SalesReceipt](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.36) | Adds support for `SalesReceipt` entity |
| [v1.4.35 - P\&L Stream Fixes](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.35) | Fixed bug with P\&L stream when malformed data was passed in |
| [v1.4.34](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.34) | Hot fix on `v1.4.33` for normal streams |
| [v1.4.33](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.33) | Enable full sync of P\&L report when state is not passed |
| [v1.4.32 - P\&L Report fixes](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.32) | - Avoid returning if current period has no data in P\&L |
| [v1.4.31 - Add support for Qty and UnitPrice in invoice line](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.31) | Add support for Qty and UnitPrice in invoice line |
| [v1.4.30 - Support for Purchases and TimeActivity](https://github.com/hotgluexyz/tap-quickbooks/releases/tag/v1.4.30) | Added two more QBO entities to discoverable list. |
# QuickBooks Desktop
Source: https://docs.hotglue.com/connectors/quickbooks-desktop
# Connector Details
| Name | Value |
| :------------- | :---------------------------------------------------------------------------------------------------------------- |
| Platform | [QuickBooks Desktop](https://api) |
| Auth Type | On-Premise |
| Direction | Bidirectional |
| Tap Metrics |
Usage:
|
| Target Metrics |
Usage:
|
| Unified Schema | Supported in [Accounting Unified Schema](https://hotglue.com/docs/unified). |
# Overview
Quickbooks Desktop is on-premise accounting software. It is a distinct product from Quickbooks Online.
The hotglue Quickbooks Desktop connector is an installed program (.exe) that is run on the same machine that manages the Quickbooks company file. While running, the connector allows you to read and write data like you would with a normal cloud connector.
## Enable and set up your connector in hotglue
### Set up your flow
To utilize the Quickbooks Desktop connector, you first need to add Quickbooks Desktop to a flow. You only need to do this once.
1. Click `Add Flow` on the left-side toolbar.
2. Give your flow a name and description, and choose `Source Flow`.
3. After creating your flow, go to the `Sources` tab and click on Quickbooks Desktop.
If you would like to write data back to QBD, you will also need to generate a target flow. If you only need to pull data out of QBD, you can skip this step:
1. Click `Add Flow` on the left-side toolbar.
2. Give your flow a name and description, and choose `Target Flow`.
3. After creating your flow, go to the `Targets` tab and click on Quickbooks Desktop.
### Set up your tenant
Unlike cloud connectors, which offload authentication to the user, Quickbooks Desktop authentication requires you to make two API requests per tenant.
The first request is a [POST to /linkedSources](/api-reference/v1/linked-sources/link-a-source) with a config object. This request "links" the tenant to your read flow, and creates the tenant if it doesn't already exist.
```bash cURL theme={null}
curl 'https://api.hotglue.com////linkedSources' \
--header 'Content-Type: application/json' \
--header 'x-api-key: ' \
--data '{
"source": {
"tap": "quickbooks-desktop",
"config": {
"company_file_name": "C:\\Users\\Public\\Documents\\Intuit\\QuickBooks\\Company Files\\hotglue.QBW",
"tables": {
"account": {
"sync": true,
"replication_key": "TimeModified"
},
"bill": {
"sync": true,
"replication_key": "TimeModified"
}
}
}
}
}'
```
`quickbooks-desktop`
The full path to the Quickbooks Desktop Company file
Defines which tables to sync and their properties. the keys (e.g., `account`, `bill`) are table names that can be customized dynamically.
Each table can have the following fields
Set to `true` to sync the table.
Set to the datetime field you would like to incrementally fetch records based on. Usually `TimeModified` if present.
The next request will return the "connector password" for your configured user. Your tenant will use the connector password to authenticate their connector on their machine.
```
curl 'https://api.hotglue.com////taps/quickbooks-desktop/token?write_flow_id=' \
--header 'x-api-key: '
```
If you haven't generated a signing key before, this request will error with:
**No signing key has been created for this environment.** To resolve, go to `Settings` > `API Keys`, and click `Generate Signing Key`.
Once your connector password is generated, you are ready to run the connector and start running jobs!
After you generate a config and password for one company, you can add additional company files for the connector to sync. This is done by utilizing [subtenants](https://docs.hotglue.com/key-concepts/tenants/subtenants).
Every time the connector runs on its cycle (usually every 60 seconds), it checks if the connected tenant has subtenants. If subtenants exist, it iterates through processing for each subtenant.
Once enabled in Settings > Widget, you can create subtenants via the syntax:
```
root_tenant_id + {subtenant delimeter} + {any string}
```
The default subtenant delimeter in all hotglue environments is `_`. That means if your initial `POST /linkedSources` looks like:
```
/dev.hg.test.com/AAAAAA/test-user/linkedSources
```
then the URL of a subtenant creation request should look like:
```
/dev.hg.test.com/AAAAAA/test-user_1/linkedSources
```
**NOTE:** Do not generate connector passwords for subtenants. Subtenants are created via new linkedSource entries (Step 1) ONLY.
## End-user instructions
### Requirements
**1. The Quickbooks Desktop Connector and Password**
**2. QuickBooks Desktop application**
Only Windows versions are supported. You can obtain a 30-day free trial via [Intuit's website](https://quickbooks.intuit.com/desktop/enterprise/contact/trial-download/).
**3. QuickBooks SDK**
This must be downloaded on the same machine as the connector. You can install the latest from [Intuit's Website](https://developer.intuit.com/app/developer/qbdesktop/docs/get-started/download-and-install-the-sdk).
### Run the connector
The Quickbooks Desktop connector is packaged as a .exe file. It is signed with an Extended Validation Code Signing Certificate issued by Sectigo, meaning it is verified and cannot be tampered with. Make sure Quickbooks Desktop is open and you are logged in to the Company File as an Administrator User before running the Quickbooks Desktop Connector
This ensures that the connector runs automatically when you restart your machine. To configure this:
1. Right click the windows icon on the bottom left
2. Select `run`, then type `shell:startup` > OK
3. This will open your startup folder. Drag the launcher from your downloads folder to here.
Right-click > `Run as administrator`
After the connector boots up, you will see a dialog requesting the connector password. Enter the password.
If the pop-up closes, that means the password is accepted, the connector is installed, and you are ready to begin syncing data.
# Connector Capabilities
The QuickBooks Desktop connector supports both read and write. Learn more below.
## Read
To read data from QuickBooks Desktop, you simply configure the `tables` section in the config. A list of supported objects for read is provided below.
### Supported Objects
* account
* balance\_sheet\_detail
* balance\_sheet\_summary
* bill
* check
* class
* credit\_memo
* customer
* estimates
* invoice
* item
* item\_sales\_tax
* journal\_entry
* price\_level
* profit\_and\_loss
* profit\_and\_loss\_budget
* purchase\_order
* sale\_order
* sales\_receipt
* sales\_tax\_code
* transaction\_list
* unit\_of\_measure\_set
* vendor
## Write
The QuickBooks Desktop connector also supports writing objects, using JSON files that follow the [qbXML raw schema](https://developer.intuit.com/app/developer/qbdesktop/docs/api-reference/qbdesktop).
When writing data to QuickBooks Desktop, ensure that the `.json` files are written to the `etl-output` folder in your jobs. Otherwise the connector will not process them.
### File Formatting
Currently the connector supports only `JSON` files, and must follow the following criteria:
* Files must be named following the convention `