Hotglue API V2
The Hotglue API v2 enables programmatic management of embedded integrations including linked connectors, flow configurations, job execution, tenant management, and connector state for SaaS product integrations.
The Hotglue API v2 enables programmatic management of embedded integrations including linked connectors, flow configurations, job execution, tenant management, and connector state for SaaS product integrations.
openapi: 3.1.0
info:
title: Hotglue API V2
description: >-
The Hotglue API v2 enables programmatic management of embedded
integrations including linked connectors, flow configurations, job
execution, tenant management, and connector state for SaaS product
integrations.
version: '2.0'
contact:
name: Hotglue Support
url: https://docs.hotglue.com
externalDocs:
description: Hotglue API Reference v2
url: https://docs.hotglue.com/api-reference/v2
servers:
- url: https://api.hotglue.com
description: Hotglue Production API
tags:
- name: Linked Connectors
description: Create, retrieve, update, and delete linked connectors for a tenant.
- name: Connector State
description: Manage bookmark and sync state for linked connectors.
- name: Connector Metadata
description: Retrieve available and supported connectors.
- name: Jobs
description: Run jobs for linked connectors.
- name: Discover
description: Trigger and poll connector discovery.
security:
- ApiKeyAuth: []
paths:
/v2/{env_id}/{flow_id}/{tenant}/linkedConnectors:
parameters:
- $ref: '#/components/parameters/EnvId'
- $ref: '#/components/parameters/FlowId'
- $ref: '#/components/parameters/Tenant'
get:
tags: [Linked Connectors]
summary: Retrieve linked connectors
operationId: getLinkedConnectors
parameters:
- name: config
in: query
schema: { type: boolean }
description: Request the underlying config for the linked source.
- name: catalog
in: query
schema: { type: boolean }
description: Request the catalog of available fields.
- name: token
in: query
required: true
schema: { type: string }
description: JWT token from private signing key.
responses:
'200':
description: Array of linked connector objects.
content:
application/json:
schema:
type: array
items: { $ref: '#/components/schemas/LinkedConnector' }
'400': { $ref: '#/components/responses/BadRequest' }
post:
tags: [Linked Connectors]
summary: Link a connector
operationId: linkConnector
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/LinkConnectorRequest' }
responses:
'200': { $ref: '#/components/responses/EmptyOk' }
'400': { $ref: '#/components/responses/BadRequest' }
patch:
tags: [Linked Connectors]
summary: Update a linked connector
operationId: updateLinkedConnector
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/UpdateLinkedConnectorRequest' }
responses:
'200': { $ref: '#/components/responses/EmptyOk' }
'400': { $ref: '#/components/responses/BadRequest' }
delete:
tags: [Linked Connectors]
summary: Unlink a connector
operationId: unlinkConnector
parameters:
- name: connector_id
in: query
required: true
schema: { type: string }
responses:
'200': { $ref: '#/components/responses/EmptyOk' }
'400': { $ref: '#/components/responses/BadRequest' }
/v2/{env_id}/{flow_id}/{tenant}/linkedConnectors/discover:
parameters:
- $ref: '#/components/parameters/EnvId'
- $ref: '#/components/parameters/FlowId'
- $ref: '#/components/parameters/Tenant'
get:
tags: [Discover]
summary: Trigger connector discovery
operationId: triggerDiscover
parameters:
- name: connector_id
in: query
required: true
schema: { type: string }
- name: v2_source
in: query
schema: { type: boolean }
responses:
'200':
description: Catalog of available tables and fields.
content:
application/json:
schema: { type: object }
'400': { $ref: '#/components/responses/BadRequest' }
/v2/{env_id}/{flow_id}/{tenant}/linkedConnectors/discover/poll:
parameters:
- $ref: '#/components/parameters/EnvId'
- $ref: '#/components/parameters/FlowId'
- $ref: '#/components/parameters/Tenant'
get:
tags: [Discover]
summary: Poll discover status
operationId: pollDiscover
parameters:
- name: connector_id
in: query
required: true
schema: { type: string }
responses:
'200':
description: Discover status.
content:
application/json:
schema:
type: object
properties:
status:
type: string
nullable: true
example: RUNNING
'400': { $ref: '#/components/responses/BadRequest' }
/v2/{env_id}/{flow_id}/{tenant}/linkedConnectors/state:
parameters:
- $ref: '#/components/parameters/EnvId'
- $ref: '#/components/parameters/FlowId'
- $ref: '#/components/parameters/Tenant'
get:
tags: [Connector State]
summary: Retrieve connector state
operationId: getConnectorState
parameters:
- name: connector_id
in: query
required: true
schema: { type: string }
responses:
'200':
description: Connector state with bookmarks.
content:
application/json:
schema: { $ref: '#/components/schemas/ConnectorState' }
'400': { $ref: '#/components/responses/BadRequest' }
put:
tags: [Connector State]
summary: Set connector state
operationId: setConnectorState
parameters:
- name: connector_id
in: query
required: true
schema: { type: string }
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
state: { type: object }
responses:
'200': { $ref: '#/components/responses/EmptyOk' }
'400': { $ref: '#/components/responses/BadRequest' }
delete:
tags: [Connector State]
summary: Delete connector state
operationId: deleteConnectorState
parameters:
- name: connector_id
in: query
required: true
schema: { type: string }
responses:
'200': { $ref: '#/components/responses/EmptyOk' }
'400': { $ref: '#/components/responses/BadRequest' }
/v2/{env_id}/{flow_id}/{tenant}/jobs:
parameters:
- $ref: '#/components/parameters/EnvId'
- $ref: '#/components/parameters/FlowId'
- $ref: '#/components/parameters/Tenant'
post:
tags: [Jobs]
summary: Run a job
operationId: runJob
requestBody:
required: true
content:
application/json:
schema: { $ref: '#/components/schemas/RunJobRequest' }
responses:
'200':
description: Job created.
content:
application/json:
schema: { $ref: '#/components/schemas/Job' }
'400': { $ref: '#/components/responses/BadRequest' }
/v2/{env_id}/availableConnectors:
get:
tags: [Connector Metadata]
summary: Retrieve available connectors
operationId: listAvailableConnectors
parameters:
- $ref: '#/components/parameters/EnvId'
responses:
'200':
description: Array of available connectors.
content:
application/json:
schema:
type: array
items: { type: object }
'400': { $ref: '#/components/responses/BadRequest' }
/v2/{env_id}/{flow_id}/supportedConnectors:
get:
tags: [Connector Metadata]
summary: Retrieve supported connectors
operationId: listSupportedConnectors
parameters:
- $ref: '#/components/parameters/EnvId'
- $ref: '#/components/parameters/FlowId'
responses:
'200':
description: Array of supported connectors.
content:
application/json:
schema:
type: array
items: { type: object }
'400': { $ref: '#/components/responses/BadRequest' }
components:
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
parameters:
EnvId:
name: env_id
in: path
required: true
schema: { type: string }
description: Environment identifier.
FlowId:
name: flow_id
in: path
required: true
schema: { type: string }
description: Flow identifier.
Tenant:
name: tenant
in: path
required: true
schema: { type: string }
description: Tenant identifier.
responses:
EmptyOk:
description: Successful empty response.
content:
application/json:
schema: { type: object }
BadRequest:
description: Bad request.
content:
application/json:
schema: { type: object }
schemas:
LinkedConnector:
type: object
properties:
tap: { type: string }
domain: { type: string }
label: { type: string }
tap_url: { type: string }
auth_url: { type: string }
icon: { type: string }
type: { type: string }
client_id: { type: string }
fieldMap: { type: object }
LinkConnectorRequest:
type: object
required: [connector]
properties:
connector:
type: object
required: [id]
properties:
id: { type: string }
config: { type: object }
symlink:
type: object
properties:
id: { type: string }
tenant: { type: string }
type: { type: string }
schedule:
type: object
properties:
schedule_expression: { type: string }
state: { type: string, enum: [ENABLED, DISABLED] }
field_map: { type: object }
UpdateLinkedConnectorRequest:
type: object
required: [connector_id]
properties:
connector_id: { type: string }
field_map: { type: object }
config: { type: object }
ConnectorState:
type: object
properties:
bookmarks: { type: object }
RunJobRequest:
type: object
required: [connector_id, job_type]
properties:
connector_id: { type: string }
job_type: { type: string, enum: [read, write] }
job_name: { type: string }
override_start_date: { type: string }
override_end_date: { type: string }
reset_source_state: { type: boolean }
override_selected_tables: { type: array, items: { type: string } }
override_source_config: { type: object }
override_target_config: { type: object }
override_connector_config: { type: object }
override_field_map: { type: object }
environment_variables: { type: object }
state: { type: object }
streaming_job: { type: boolean }
ignore_parallel_jobs: { type: boolean }
Job:
type: object
properties:
job_id: { type: string }
env_id: { type: string }
flow_id: { type: string }
job_name: { type: string }
tenant: { type: string }
started_by: { type: string }
s3_root: { type: string }
start_time: { type: string }
state: { type: object }
tap: { type: string }
status:
type: string
enum:
- JOB_CREATED
- DISCOVER_STARTED
- DISCOVER_FAILED
- SYNC_STARTED
- SYNC_FAILED
- SYNC_SUCCESS
- ETL_STARTED
- ETL_FAILED
- ETL_SUCCESS
- EXPORT_STARTED
- EXPORT_FAILED
- JOB_COMPLETED
scheduled_job: { type: boolean }
message: { type: string }
last_updated: { type: string }
processed_rows: { type: integer }