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.

OpenAPI Specification

hotglue-openapi.yml Raw ↑
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 }