openapi: 3.2.0
info:
title: Pipeshub Connector Instances API
version: 1.0.0
contact:
name: API Support
email: support@pipeshub.com
description: 'Operations tagged Connector Instances across 2 of this provider''s published API definitions: pipeshub-openapi.yaml, pipeshub-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: '{instance_url}/api/v1'
description: Base API URL
variables:
instance_url:
default: https://app.pipeshub.com
description: Base server URL (without /api/v1)
- url: '{instance_url}'
description: Root URL (used for MCP endpoints mounted at /mcp)
variables:
instance_url:
default: https://app.pipeshub.com
description: Base server URL
security:
- bearerAuth: []
- oauth2: []
tags:
- name: Connector Instances
description: Create, manage, and delete connector instances for your organization
paths:
/connectors:
get:
tags:
- Connector Instances
summary: List connector instances
description: 'Get all configured connector instances for your organization.
Overview:
Returns instances created by users, filtered by scope and permissions.
Team-scope connectors are visible to all org users. Personal connectors
are only visible to their creators.
Instance States:
isConfigured: All required settings are complete
isAuthenticated: OAuth flow complete or credentials valid
isActive: Connector is enabled for sync/agent
desktopOnline: Owner device''s desktop app connected (Local FS only)
ownerDeviceId / ownerDeviceName: Desktop device that owns the connector, set on first enable (Local FS only)'
operationId: listConnectorInstances
security:
- bearerAuth: []
- oauth2:
- connector:read
parameters:
- name: scope
in: query
required: false
description: 'Filter by scope. Defaults to team when omitted.
'
schema:
allOf:
- $ref: '#/components/schemas/ConnectorScope'
default: team
- name: page
in: query
schema:
type: integer
minimum: 1
default: 1
- name: limit
in: query
schema:
type: integer
minimum: 1
maximum: 200
default: 20
- name: search
in: query
description: Full-text search across instance name, type, and app group
schema:
type: string
- name: isAuthenticated
in: query
description: 'Filter by authentication status.
true returns only authenticated instances;
false returns only unauthenticated ones.
Omit to return all.
'
schema:
type: boolean
- name: isActive
in: query
description: 'Filter by active status.
true returns only active instances;
false returns only inactive ones.
Omit to return all.
'
schema:
type: boolean
- name: connectorType
in: query
description: 'Filter by exact connector type string (e.g. Confluence,
GoogleDrive). Case-sensitive.
'
schema:
type: string
minLength: 1
responses:
'200':
description: Instances retrieved
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
connectors:
type: array
items:
$ref: '#/components/schemas/ConnectorInstance'
pagination:
$ref: '#/components/schemas/ConnectorPagination'
'401':
description: Unauthorized
post:
tags:
- Connector Instances
summary: Create connector instance
description: 'Create a new connector instance from a registry type.
Overview:
Creates a new connector instance that can then be configured and enabled.
The instance is created in an unconfigured state and needs authentication
and filter setup before it can be activated.
Scope Permissions:
team scope requires admin privileges
personal scope available to all users
Next Steps After Creation:
Configure authentication via PUT /{id}/config/auth
Complete OAuth flow if needed via GET /{id}/oauth/authorize
Set up filters via POST /{id}/filters
Enable connector via POST /{id}/toggle'
operationId: createConnectorInstance
security:
- bearerAuth: []
- oauth2:
- connector:write
requestBody:
required: true
description: Request payload
content:
application/json:
schema:
$ref: '#/components/schemas/CreateConnectorRequest'
examples:
googleDrive:
summary: Google Drive (Team)
value:
connectorType: google-drive
instanceName: Company Google Drive
scope: team
authType: OAUTH_ADMIN_CONSENT
confluence:
summary: Confluence (Personal)
value:
connectorType: confluence
instanceName: My Confluence
scope: personal
authType: API_TOKEN
slackWithOAuthApp:
summary: Slack with OAuth App (Non-Admin)
value:
connectorType: slack
instanceName: My Team Slack
scope: personal
authType: OAUTH
oauthConfigId: oauth_config_123
responses:
'201':
description: Instance created
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
connector:
$ref: '#/components/schemas/ConnectorInstance'
'400':
description: 'Invalid request. Possible reasons:
DESKTOP_OFFLINE - Local FS: the owner device''s desktop app is not connectedDESKTOP_UNCLAIMED - Local FS: no device owns the connector yetdetails.code and use the body below.
'
content:
application/json:
schema:
$ref: '#/components/schemas/LocalFsDesktopRefusal'
servers:
- url: '{instance_url}/api/v1'
description: Base API URL
variables:
instance_url:
default: https://app.pipeshub.com
description: Base server URL (without /api/v1)
- url: '{instance_url}'
description: Root URL (used for MCP endpoints mounted at /mcp)
variables:
instance_url:
default: https://app.pipeshub.com
description: Base server URL
/connectors/{connectorId}/name:
put:
tags:
- Connector Instances
summary: Update connector instance name
description: 'Update the display name of a connector instance.
Note: This only updates the display name, not the connector configuration.'
operationId: updateConnectorName
security:
- bearerAuth: []
- oauth2:
- connector:write
parameters:
- name: connectorId
in: path
required: true
schema:
type: string
description: Unique connector instance ID
requestBody:
required: true
description: Request body for Update connector instance name
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateConnectorNameRequest'
responses:
'200':
description: Name updated
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
connector:
$ref: '#/components/schemas/ConnectorInstance'
'400':
description: Invalid name
'401':
description: Unauthorized
'404':
description: Connector not found
servers:
- url: '{instance_url}/api/v1'
description: Base API URL
variables:
instance_url:
default: https://app.pipeshub.com
description: Base server URL (without /api/v1)
- url: '{instance_url}'
description: Root URL (used for MCP endpoints mounted at /mcp)
variables:
instance_url:
default: https://app.pipeshub.com
description: Base server URL
components:
schemas:
ConnectorSyncConfig:
type: object
description: Synchronization configuration for a connector instance
properties:
selectedStrategy:
type: string
enum:
- MANUAL
- SCHEDULED
- WEBHOOK
- REALTIME
description: 'Sync strategy: MANUAL (user-triggered), SCHEDULED (interval/cron), WEBHOOK (event-driven), REALTIME (WebSocket)'
default: MANUAL
scheduledConfig:
type: object
description: Configuration for scheduled sync strategy
properties:
intervalMinutes:
type: integer
description: Sync interval in minutes
minimum: 5
default: 60
example: 60
cronExpression:
type: string
description: Cron expression for advanced scheduling
example: 0 */6 * * *
timezone:
type: string
description: Timezone for scheduled sync
default: UTC
example: America/New_York
webhookConfig:
type: object
description: Configuration for webhook-based sync
properties:
webhookUrl:
type: string
description: URL to receive webhook events (auto-generated)
events:
type: array
items:
type: string
description: Subscribed event types
example:
- file.created
- file.modified
- file.deleted
values:
type: object
description: Sync setting values specific to the connector
additionalProperties: true
customValues:
type: object
description: Custom sync values
additionalProperties: true
ReindexConnectorRequestBody:
type: object
properties:
statusFilters:
type: array
items:
$ref: '#/components/schemas/IndexingStatusFilter'
description: 'Statuses to reindex. Omitting this reindexes everything for a KB
connector; other connector types default server-side to `FAILED`.
'
ResyncConnectorRequestBody:
type: object
required:
- connectorName
properties:
connectorName:
type: string
description: Connector type name (e.g. `Google Drive`, `DRIVE`).
example: DRIVE
fullSync:
type: boolean
description: When true, triggers a full sync instead of incremental.
default: false
CreateConnectorRequest:
type: object
description: Request to create a new connector instance
required:
- connectorType
- instanceName
- scope
properties:
connectorType:
type: string
description: Connector type from registry (e.g., google-drive, confluence, slack)
example: google-drive
instanceName:
type: string
description: Display name for this connector instance
minLength: 1
maxLength: 100
example: Marketing Team Drive
scope:
$ref: '#/components/schemas/ConnectorScope'
authType:
type: string
description: Authentication type (required if connector supports multiple auth methods)
enum:
- OAUTH
- OAUTH_ADMIN_CONSENT
- API_TOKEN
- USERNAME_PASSWORD
- SERVICE_ACCOUNT
example: OAUTH
oauthConfigId:
type: string
description: ID of admin-created OAuth App to use (required for non-admin users creating OAuth connectors, optional for admins)
example: oauth_config_123
config:
type: object
description: Initial configuration (can also be set after creation)
properties:
auth:
$ref: '#/components/schemas/ConnectorAuthConfig'
sync:
$ref: '#/components/schemas/ConnectorSyncConfig'
filters:
$ref: '#/components/schemas/ConnectorFiltersConfig'
baseUrl:
type: string
description: Base URL for self-hosted instances (e.g., Confluence Server, GitLab Self-Managed)
format: uri
example: https://confluence.mycompany.com
ConnectorAuthConfig:
type: object
description: Authentication configuration for a connector instance
properties:
values:
type: object
description: Authentication values (keys depend on connector's auth schema)
additionalProperties: true
example:
apiKey: sk-xxxxx
baseUrl: https://api.example.com
oauthConfigId:
type: string
description: ID of admin-created OAuth configuration to use
example: oauth_config_123
customValues:
type: object
description: Custom authentication values specific to the connector
additionalProperties: true
LocalFsDesktopRefusal:
type: object
description: '409 body returned when a Local FS connector cannot sync because of its
owner device.
'
required:
- success
- code
- message
- details
properties:
success:
type: boolean
example: false
code:
type: string
enum:
- DESKTOP_OFFLINE
- DESKTOP_UNCLAIMED
- DESKTOP_OWNED_BY_OTHER_DEVICE
message:
type: string
example: No desktop is connected for connector conn_abc123. Open the Pipeshub desktop app on the machine that owns this folder.
details:
type: object
required:
- code
- connectorId
- retryable
properties:
code:
type: string
enum:
- DESKTOP_OFFLINE
- DESKTOP_UNCLAIMED
- DESKTOP_OWNED_BY_OTHER_DEVICE
connectorId:
type: string
retryable:
type: boolean
ownerDeviceName:
type: string
description: Name of the owner device, when the connector has one.
IndexingStatusFilter:
type: string
description: 'Indexing status used to filter which records are included in a scoped
reindex (record or record-group). Omit `statusFilters` to reindex all
descendants regardless of status.
'
enum:
- NOT_STARTED
- QUEUED
- IN_PROGRESS
- COMPLETED
- FAILED
- FILE_TYPE_NOT_SUPPORTED
- AUTO_INDEX_OFF
- EMPTY
ConnectorAuthType:
type: string
description: 'Authentication method required by the connector:OAUTH - User OAuth consent flowOAUTH_ADMIN_CONSENT - Admin OAuth with org-wide consentAPI_TOKEN - API key or token authenticationUSERNAME_PASSWORD - Username/password credentialsNONE - No authentication requiredteam - Available to all users in the organization (admin-only creation)personal - Private to the creating user only