TextQL Connectors API

List available data connectors

Operations 8

GET /v2/connectors List Connectors #
POST /v2/connectors Create Connector #
GET /v2/connectors/types List Connector Types #
POST /v2/connectors/test Test Connector #
PATCH /v2/connectors/{id} Update Connector #
DELETE /v2/connectors/{id} Delete Connector #
GET /v2/connectors/{id}/access Get Connector Access #
PUT /v2/connectors/{id}/access Update Connector Access #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/textql-connectors-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

textql-connectors-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: TextQL v2 Connectors API
  version: '2.0'
  description: REST API for TextQL platform operations. All endpoints require Bearer token authentication.
servers:
- url: https://app.textql.com
security:
- bearerAuth: []
tags:
- name: Connectors
  description: List available data connectors
paths:
  /v2/connectors:
    get:
      tags:
      - Connectors
      summary: List Connectors
      description: List all data connectors available to the authenticated organization.
      operationId: v2.listConnectors
      responses:
        '200':
          description: List of connectors
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Connector'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      tags:
      - Connectors
      summary: Create Connector
      description: 'Create a new data connector from the supplied configuration. Creation

        validates the config but does not open a connection — call

        `POST /v2/connectors/test` first if you want to verify reachability.'
      operationId: v2.createConnector
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateConnectorRequest'
      responses:
        '201':
          description: Created connector
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Connector'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
  /v2/connectors/types:
    get:
      tags:
      - Connectors
      summary: List Connector Types
      description: 'Enumerate every supported connector type and the fields each requires,

        so you can build a valid `config` without reading the proto. For each

        type, `connector_type` is the value to set as `config.connector_type`

        and `config_key` is the metadata object to nest under `config`.


        Fields flagged `confidential` are write-only (passwords, keys, tokens) —

        they are never returned by read endpoints, and when `optional_on_update`

        is true they may be omitted on `PATCH` to preserve the stored value.'
      operationId: v2.listConnectorTypes
      responses:
        '200':
          description: Supported connector types and their field schemas
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListConnectorTypesResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
  /v2/connectors/test:
    post:
      tags:
      - Connectors
      summary: Test Connector
      description: 'Test a connector configuration without persisting it. A failed

        connection is reported as `200` with `{"success": false, "error": "..."}`

        — the request itself succeeded, only the downstream connection failed.

        HTTP error statuses are reserved for an invalid config (`400`) or

        auth/permission failures.


        Pass `connector_id` to test changes against an existing connector:

        confidential fields left empty in the request are filled in from the

        stored connector before the connection is attempted.'
      operationId: v2.testConnector
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TestConnectorRequest'
      responses:
        '200':
          description: Test result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TestConnectorResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
  /v2/connectors/{id}:
    patch:
      tags:
      - Connectors
      summary: Update Connector
      description: 'Update an existing connector. The `connector_type` in the body must

        match the stored connector''s type. Confidential fields (passwords, keys,

        tokens) left empty are preserved from the stored connector, so you only

        need to send the fields you are changing.'
      operationId: v2.updateConnector
      parameters:
      - $ref: '#/components/parameters/ConnectorId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateConnectorRequest'
      responses:
        '200':
          description: Updated connector
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Connector'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      tags:
      - Connectors
      summary: Delete Connector
      description: 'Delete a connector by id. Example/system connectors cannot be deleted

        (TextQL Usage connectors return `400`; example connectors are hidden

        rather than removed).'
      operationId: v2.deleteConnector
      parameters:
      - $ref: '#/components/parameters/ConnectorId'
      responses:
        '200':
          description: Deletion result
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: integer
                    format: int32
                  success:
                    type: boolean
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
  /v2/connectors/{id}/access:
    get:
      tags:
      - Connectors
      summary: Get Connector Access
      description: 'Get a connector''s access configuration: its org-wide visibility and the

        member, role, and group grants on it. Requires read access to the

        connector.'
      operationId: v2.getConnectorAccess
      parameters:
      - $ref: '#/components/parameters/ConnectorId'
      responses:
        '200':
          description: Current access configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConnectorAccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
    put:
      tags:
      - Connectors
      summary: Update Connector Access
      description: 'Declaratively replace a connector''s access configuration. Grants not in

        the request are revoked, new ones are created, and `is_public` sets

        org-wide visibility. The caller''s own owner grant is always preserved,

        even when omitted from `grants`.


        Requires owner access to the connector (or org admin). Grants are

        validated (members, roles, and groups must exist in the organization)

        up front, and the replacement is applied atomically in a single

        transaction, so a failed request leaves access unchanged.'
      operationId: v2.updateConnectorAccess
      parameters:
      - $ref: '#/components/parameters/ConnectorId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateConnectorAccessRequest'
      responses:
        '200':
          description: Resulting access configuration
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConnectorAccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    ConnectorAccessGrant:
      type: object
      required:
      - access_type
      description: 'One access grant. Set exactly one of `member_id`, `role_id`, or

        `group_id`. Resolve ids via `GET /v2/members` and `GET /v2/roles`.

        '
      properties:
        member_id:
          type: string
          example: 9b2f7a64-11d0-4c1b-8f3e-2f9c5b7f6e10
        role_id:
          type: string
          example: 80de0196-496f-44fe-9d4c-8013b3b44082
        group_id:
          type: string
        access_type:
          type: string
          enum:
          - owner
          - editor
          - viewer
    MySQLMetadata:
      type: object
      description: 'Connection metadata for `connector_type: MYSQL`.'
      required:
      - host
      - user
      - password
      - database
      properties:
        host:
          type: string
        port:
          type: integer
          format: int32
          default: 3306
        user:
          type: string
        password:
          type: string
          description: Write-only. Omit on update to keep the stored value.
        database:
          type: string
    PostgresMetadata:
      type: object
      description: 'Connection metadata for `connector_type: POSTGRES`.'
      required:
      - host
      - user
      - password
      - database
      properties:
        host:
          type: string
        port:
          type: integer
          format: int32
          default: 5432
        user:
          type: string
        password:
          type: string
          description: Write-only. Omit on update to keep the stored value.
        database:
          type: string
        schemas:
          type: array
          items:
            type: string
        ssl_mode:
          type: boolean
    UpdateConnectorRequest:
      type: object
      required:
      - config
      properties:
        config:
          $ref: '#/components/schemas/ConnectorConfig'
        allow_sql_write_operations:
          type: boolean
          description: Allow the connector to execute write/DDL SQL.
        include_db_session_metadata:
          type: boolean
          description: Attach database session metadata to queries.
    ConnectorTypeInfo:
      type: object
      description: A supported connector type and the shape of its config.
      properties:
        connector_type:
          type: string
          description: Value to set as config.connector_type (e.g. `KDB`).
        config_key:
          type: string
          description: Metadata object key to nest under config (e.g. `kdb`).
        fields:
          type: array
          items:
            $ref: '#/components/schemas/ConnectorTypeField'
    SnowflakeMetadata:
      type: object
      description: 'Connection metadata for `connector_type: SNOWFLAKE`. Authenticate with

        either `username` + `password`, or `username` + `private_key` (key-pair

        auth, PEM-encoded PKCS#8; add `private_key_passphrase` if the key is

        encrypted). The OAuth and SSO fields are for org-level or per-member

        OAuth setups; see the Snowflake datasource docs for those flows.

        '
      required:
      - locator
      - database
      - warehouse
      properties:
        locator:
          type: string
          description: Account locator/identifier, e.g. `myorg-account123`.
        username:
          type: string
        password:
          type: string
          description: Write-only. Omit on update to keep the stored value.
        private_key:
          type: string
          description: Write-only. PEM-encoded private key for key-pair auth.
        private_key_passphrase:
          type: string
          description: Write-only. Passphrase when `private_key` is encrypted.
        role:
          type: string
          description: Snowflake role to assume for queries.
        database:
          type: string
        schema:
          type: string
        warehouse:
          type: string
        oauth_access_token:
          type: string
          description: Write-only.
        oauth_refresh_token:
          type: string
          description: Write-only.
        oauth_client_id:
          type: string
        oauth_client_secret:
          type: string
          description: Write-only.
        enable_sso_auth:
          type: boolean
          description: Pass the caller's IdP token directly to Snowflake External OAuth.
        token_exchange_endpoint:
          type: string
          description: IdP token exchange URL (RFC 8693) for per-member SSO auth.
        token_exchange_audience:
          type: string
        token_exchange_scope:
          type: string
    TestConnectorResponse:
      type: object
      required:
      - success
      properties:
        success:
          type: boolean
          description: Whether the connection succeeded.
        error:
          type: string
          description: Failure detail when `success` is false; empty otherwise.
    Connector:
      type: object
      properties:
        id:
          type: integer
          format: int32
          description: Connector ID
        name:
          type: string
          description: Connector name
        type:
          type: string
          description: Connector type
    TestConnectorRequest:
      type: object
      required:
      - config
      properties:
        config:
          $ref: '#/components/schemas/ConnectorConfig'
        connector_id:
          type: string
          description: 'Optional. ID of an existing connector whose confidential fields

            should fill in any empty confidential fields in `config` before the

            connection is attempted.

            '
    ConnectorConfig:
      type: object
      required:
      - connector_type
      - name
      description: 'A connector''s type, display name, and type-specific connection metadata.


        Set exactly one metadata field matching `connector_type` (e.g.

        `connector_type: POSTGRES` ⇒ set `postgres`). The common database types

        are documented below; every supported type follows the same shape — see

        the proto `ConnectorConfig` for the full list (Snowflake, BigQuery,

        Databricks, Tableau, PowerBI, SQL Server, Trino, etc.).


        Confidential fields (passwords, keys, tokens) are write-only: they are

        never returned by read endpoints, and on update they are preserved from

        the stored connector when sent empty.

        '
      properties:
        connector_type:
          type: string
          description: 'Connector type enum name, e.g. `POSTGRES`, `REDSHIFT`, `MYSQL`,

            `SNOWFLAKE`, `BIGQUERY`, `DATABRICKS`, `TABLEAU`, `POWERBI`.

            '
          example: POSTGRES
        name:
          type: string
          description: Human-readable connector name
        auth_strategy:
          type: string
          description: 'Authentication strategy. Defaults to `service_role` when omitted;

            other values (`member_oauth`, `per_member_oauth`) are inferred from

            the metadata for OAuth-capable connectors.

            '
        postgres:
          $ref: '#/components/schemas/PostgresMetadata'
        redshift:
          $ref: '#/components/schemas/RedshiftMetadata'
        mysql:
          $ref: '#/components/schemas/MySQLMetadata'
        snowflake:
          $ref: '#/components/schemas/SnowflakeMetadata'
    RedshiftMetadata:
      type: object
      description: 'Connection metadata for `connector_type: REDSHIFT`.'
      required:
      - host
      - database
      properties:
        host:
          type: string
        port:
          type: integer
          format: int32
          default: 5439
        user:
          type: string
        password:
          type: string
          description: Write-only. Omit on update to keep the stored value.
        database:
          type: string
        schemas:
          type: array
          items:
            type: string
        auth_type:
          type: string
          description: '`PASSWORD` (default) or `IAM_ROLE`.'
    ConnectorAccess:
      type: object
      properties:
        is_public:
          type: boolean
        grants:
          type: array
          items:
            allOf:
            - $ref: '#/components/schemas/ConnectorAccessGrant'
            - type: object
              properties:
                granted_by:
                  type: string
                  description: Member id that created the grant.
                expires_at:
                  type: string
                  description: RFC 3339 timestamp; absent for non-expiring grants.
    CreateConnectorRequest:
      type: object
      required:
      - config
      properties:
        config:
          $ref: '#/components/schemas/ConnectorConfig'
        access:
          allOf:
          - $ref: '#/components/schemas/UpdateConnectorAccessRequest'
          description: 'Access configuration applied atomically with creation. Grants are

            validated before the connector is created, so an invalid grant

            never leaves a partially configured connector. When omitted, the

            connector is created org-visible (`is_public: true`). The creating

            member always receives an owner grant.

            '
    UpdateConnectorAccessRequest:
      type: object
      required:
      - is_public
      properties:
        is_public:
          type: boolean
          description: When true, every member of the organization can use the connector.
        grants:
          type: array
          items:
            $ref: '#/components/schemas/ConnectorAccessGrant'
    ListConnectorTypesResponse:
      type: object
      required:
      - types
      properties:
        types:
          type: array
          items:
            $ref: '#/components/schemas/ConnectorTypeInfo'
    ConnectorTypeField:
      type: object
      description: One configurable field of a connector type.
      properties:
        name:
          type: string
        type:
          type: string
          description: 'JSON-friendly type: string, number, boolean, array, or object.'
        confidential:
          type: boolean
          description: Write-only field (password/key/token); never returned by read endpoints.
        optional_on_update:
          type: boolean
          description: May be omitted on PATCH to preserve the stored value.
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Machine-readable error code
              enum:
              - invalid_request
              - unauthenticated
              - permission_denied
              - not_found
              - conflict
              - rate_limit_exceeded
              - internal
              - timeout
              - cancelled
              - execution_failed
              - no_report
            message:
              type: string
              description: Human-readable error message
  parameters:
    ConnectorId:
      name: id
      in: path
      required: true
      schema:
        type: integer
        format: int32
      description: Connector ID
  responses:
    Conflict:
      description: Resource already exists
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: conflict
              message: A connector already exists for this account
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: not_found
              message: Resource not found
    RateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: rate_limit_exceeded
              message: Rate limit exceeded
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: internal
              message: Internal server error
    Forbidden:
      description: Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: permission_denied
              message: Insufficient permissions
    BadRequest:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: invalid_request
              message: Invalid request body
    Unauthorized:
      description: Missing or invalid authentication
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: unauthenticated
              message: Authentication required
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or JWT token