> ## Documentation Index
> Fetch the complete documentation index at: https://filament.getgalaxy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Connectors

> Discover the sources and sinks available in a Filament deployment

Use these RPCs to discover the connectors compiled into a deployment and build
configuration forms from their schemas. Resource discovery and column lookup
may query the external source. Configuration validation checks values locally;
it is not a connection test. The messages are defined in
`protos/ingestion/v1/connectors.proto`.

## RPCs

| RPC                  | Description                                                |
| -------------------- | ---------------------------------------------------------- |
| `ListConnectors`     | Catalog the registered connectors and their config schemas |
| `GetConnector`       | Fetch one connector's spec by name and kind                |
| `ValidateConfig`     | Check a candidate config without saving it                 |
| `DiscoverResources`  | List the tables or resources a source config exposes       |
| `GetResourceColumns` | Load per-column metadata for selected resources            |

The catalog, validation, and resource discovery RPCs run under a 5-second
server-side timeout.
`GetResourceColumns` gets 30 seconds because it queries the external system
per resource. `DiscoverResources` and `GetResourceColumns` return
`unimplemented` for connectors that don't support discovery or column
introspection.

## ListConnectors

Filter by `kind` (`CONNECTOR_KIND_SOURCE`, `CONNECTOR_KIND_SINK`, or
unspecified for both). Supports [pagination](/pages/api-reference/service/introduction#pagination).
Each `ConnectorSpec` carries:

* `name`, `display_name`, `kind`, and `version`
* supported replication `modes` (`STANDARD`, `CDC`)
* its full `config_schema`: fields with types, scopes, defaults, and secret
  flags, enough to render a form
* logo URLs and `schema_field`
* `maturity` (`ALPHA`, `BETA`, `STABLE`)

## GetConnector

Fetches a single spec. Both `connector` (the name) and `kind` are required,
because some names register as both a source and a sink. An unknown
combination returns `not_found`.

## ValidateConfig

Runs the submitted `config` through the connector's schema and local
configuration checks. It catches problems such as missing fields, invalid enum
values, and incompatible settings. It does not call the connector's live
`TestConnection` method, so network and credential failures can still appear
during discovery or a run. Validation results are returned in the response:

```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
{"valid": false, "errors": [{"field": "port", "message": "port is required"}]}
```

An invalid config still produces a successful RPC with `valid: false`. RPC
errors are reserved for problems such as an unknown connector or missing
connector kind, which lets a client display all field errors together.

Pass `connection_id` to validate an edit to an existing
[connection](/pages/api-reference/service/connections). The submitted config
is overlaid on the stored, secret-resolved config, so the client never needs
to round-trip secrets it only holds masked.

## DiscoverResources

Lists the tables, streams, and endpoints a source config can read. Accepts
either an inline `config` or a `connection_id` (same overlay semantics as
`ValidateConfig`). Set `refresh` to bypass any cached listing. Each resource
reports `name`, `is_selectable`, its `primary_key` columns, a `selector`,
`display_name`, and connector-specific `metadata`.

## GetResourceColumns

Returns column metadata for the named `resources`, keyed per resource. Beyond
the basics (`name`, `logical_type`, `native_type`, `is_nullable`,
`is_primary_key`), each column carries the cursor-selection fields the
pipeline editor uses for incremental reads.

| Field                   | Meaning                                               |
| ----------------------- | ----------------------------------------------------- |
| `is_cursor_eligible`    | The column can serve as an incremental cursor         |
| `is_cursor_recommended` | The connector suggests it                             |
| `recommendation_rank`   | Ordering among recommended candidates                 |
| `warning`               | Why a technically eligible column is a poor choice    |
| `is_configurable`       | The user may pick it in the UI                        |
| `supports_lookback`     | A lookback window can be applied when cursoring on it |
