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

# FTPS

> Configure FTP over TLS/SSL datasources

# FTPS

FTPS (FTP over TLS/SSL) datasources allow CloudQuant Data Liberator to read CSV, TSV, and other delimited files from FTP servers secured with TLS encryption. This is commonly used with legacy financial data feeds and vendor systems that require explicit FTPS connections.

<Note>
  See [Supported Data Formats](/datasource-config/supported-formats) for every file extension Liberator can ingest over FTPS, including formats added in 2.1 and 2.2.
</Note>

## Connection configuration

### Required fields

| Field             | Type   | Description                       |
| ----------------- | ------ | --------------------------------- |
| `connection_type` | string | Must be `"ftps"`                  |
| `host`            | string | FTP server hostname or IP address |
| `user`            | string | Username for authentication       |

### Optional fields

| Field         | Type   | Default | Description                                                                      |
| ------------- | ------ | ------- | -------------------------------------------------------------------------------- |
| `port`        | int    | `21`    | FTP control port number                                                          |
| `password`    | string |         | Password for authentication                                                      |
| `key`         | string |         | Client certificate private key (PEM format) for certificate-based authentication |
| `no_verify`   | bool   | `false` | Skip TLS certificate verification                                                |
| `prefix`      | string | `""`    | Remote directory path to use as root                                             |
| `mount_point` | string |         | Local mount path for FUSE-based access                                           |
| `config_name` | string |         | Internal configuration identifier                                                |

<Warning>
  Setting `no_verify` to `true` disables TLS certificate validation. This should only be used for testing or when connecting to servers with self-signed certificates on trusted internal networks. Never use this in production with external servers.
</Warning>

<Note>
  You must provide either `password` or `key` for authentication. Password authentication is most common for FTPS. Client certificate authentication (`key`) is used when the server requires mutual TLS.
</Note>

### Example connection

```json theme={null}
{
  "name": "ftps-vendor-feed",
  "connection_type": "ftps",
  "host": "ftp.securefeed.example.com",
  "port": 21,
  "user": "datafeed",
  "password": "v3nd0rP@ss",
  "prefix": "/outgoing/daily/"
}
```

### Example connection (self-signed certificate)

```json theme={null}
{
  "name": "ftps-internal-data",
  "connection_type": "ftps",
  "host": "ftp.internal.corp.net",
  "port": 990,
  "user": "etl-service",
  "password": "internalPass123",
  "no_verify": true,
  "prefix": "/data/exports/"
}
```

## Dataset configuration (data\_args)

The `data_args` fields are identical to all file-based sources. See [Local File](/datasource-config/local-file) for the full reference. The `file_pattern` is evaluated relative to the `prefix` configured on the connection.

### Required data\_args

| Field             | Type           | Description                                                         |
| ----------------- | -------------- | ------------------------------------------------------------------- |
| `file_pattern`    | string         | Glob pattern relative to the prefix, e.g., `"*.csv"`                |
| `data_dt_column`  | string or list | Column(s) containing the datetime value                             |
| `data_dt_format`  | string or list | strptime format or special values (`"muts"`, `"uts"`, `"datetime"`) |
| `data_key_column` | string or list | Symbol/key column(s)                                                |

### Optional data\_args

| Field                     | Type   | Default              | Description                              |
| ------------------------- | ------ | -------------------- | ---------------------------------------- |
| `sep_override`            | string | `","`                | Delimiter character                      |
| `encoding`                | string | `"utf-8"`            | File encoding                            |
| `data_dt_timezone`        | string | `"UTC"`              | Source data timezone                     |
| `fname_dt_regex`          | string |                      | Regex to extract date from filename      |
| `fname_dt_format`         | string |                      | strptime format for filename date        |
| `fname_dt_timezone`       | string |                      | Timezone of filename date                |
| `fname_dt_nudge`          | int    | `0`                  | Microsecond offset for filename date     |
| `fname_dt_approx_seconds` | int    |                      | Approximate seconds per file             |
| `arrow_sort`              | list   | `["symbol", "muts"]` | Sort order                               |
| `arrow_timestamp`         | bool   | `true`               | Generate human-readable timestamp column |

## Complete example

### Connection

```json theme={null}
{
  "name": "ftps-reference-data",
  "connection_type": "ftps",
  "host": "ftps.refdata.example.com",
  "port": 21,
  "user": "cq-download",
  "password": "refDataP@ss",
  "prefix": "/reference/securities/"
}
```

### Dataset

```json theme={null}
{
  "name": "security-master",
  "connection": "ftps-reference-data",
  "data_args": {
    "file_pattern": "secmaster_*.csv",
    "sep_override": "|",
    "encoding": "utf-8",
    "data_dt_column": "effective_date",
    "data_dt_format": "%Y-%m-%d",
    "data_dt_timezone": "America/New_York",
    "data_key_column": "cusip",
    "fname_dt_regex": "secmaster_(\\d{8})\\.csv",
    "fname_dt_format": "%Y%m%d",
    "fname_dt_timezone": "America/New_York",
    "fname_dt_approx_seconds": 86400,
    "arrow_sort": ["symbol", "muts"],
    "arrow_timestamp": true
  },
  "schema": [
    { "name": "cusip", "type": "string", "group": "key", "description": "CUSIP identifier" },
    { "name": "effective_date", "type": "string", "group": "time", "description": "Effective date" },
    { "name": "ticker", "type": "string", "group": "value", "description": "Ticker symbol" },
    { "name": "company_name", "type": "string", "group": "value", "description": "Company name" },
    { "name": "exchange", "type": "string", "group": "value", "description": "Primary exchange" },
    { "name": "sector", "type": "string", "group": "value", "description": "GICS sector" },
    { "name": "shares_outstanding", "type": "int64", "group": "value", "description": "Shares outstanding" }
  ]
}
```

## FTPS vs SFTP

| Feature               | FTPS                            | SFTP           |
| --------------------- | ------------------------------- | -------------- |
| Protocol              | FTP + TLS                       | SSH subsystem  |
| Default port          | 21 (explicit) or 990 (implicit) | 22             |
| Firewall friendliness | Requires data port range        | Single port    |
| Common use            | Legacy financial feeds          | Modern systems |
| Certificate           | TLS/SSL certificates            | SSH host keys  |

<Tip>
  If your data vendor supports both FTPS and SFTP, prefer SFTP. It uses a single port, simplifies firewall configuration, and is generally easier to manage.
</Tip>

## Network requirements

| Requirement        | Detail                                                                              |
| ------------------ | ----------------------------------------------------------------------------------- |
| **Outbound port**  | TCP port 21 (control) + passive data port range to the FTP server                   |
| **Passive mode**   | FTP passive mode is required; ensure the passive port range is open                 |
| **DNS resolution** | The hostname must resolve from the CloudQuant Data Liberator host                   |
| **TLS support**    | Server must support explicit TLS (AUTH TLS) on port 21, or implicit TLS on port 990 |
