> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://apidocs.polytomic.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://apidocs.polytomic.com/_mcp/server.

# S3 Compatible

Supports:
* ✅ Models
* ✅ Model sync destination
* ✅ Bulk sync source
* ✅ Bulk sync destination




## Connection

### Configuration
<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>aws_access_key_id</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Access key ID with read/write access to the bucket.</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>aws_secret_access_key</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Secret access key</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>csv_has_headers</code></td>
<td><code>boolean</code></td>
<td style="vertical-align: top;">CSV files have headers<br/><br/>Whether CSV files have a header row with field names.</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>endpoint</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Endpoint<br/><br/>URL of the S3-compatible API; ex: https://s3.example.com</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>is_single_table</code></td>
<td><code>boolean</code></td>
<td style="vertical-align: top;">Files are time-based snapshots<br/><br/>Treat the files as a single table. <a href="#is-single-table">↓</a></td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>s3_bucket_name</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">S3 bucket name<br/><br/>Bucket name (folder optional); ex: s3://polytomic/dataset</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>s3_bucket_region</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">S3 bucket region<br/><br/>Region to sign requests for. Most S3-compatible stores ignore this value.</td>
<td><code>false</code></td>
</tr>
</tbody>
</table>

<h4 id="is-single-table">`is_single_table`</h4>

<h5 id="is-single-table-true">When `is_single_table` is `true`</h5>

<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>is_directory_snapshot</code></td>
<td><code>boolean</code></td>
<td style="vertical-align: top;">Multi-directory multi-table</td>
<td><code>false</code></td>
</tr>
</tbody>
</table>

<h5 id="is-single-table-true-is-directory-snapshot-false">When `is_single_table` is `true` AND `is_directory_snapshot` is `false`</h5>

<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>single_table_file_format</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">File format<br/><br/>Accepted values: `csv`, `json`, `parquet`</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>single_table_name</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Collection name</td>
<td><code>false</code></td>
</tr>
</tbody>
</table>

<h5 id="is-single-table-true-is-directory-snapshot-true">When `is_single_table` is `true` AND `is_directory_snapshot` is `true`</h5>

<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>single_table_file_formats</code></td>
<td><code>array</code></td>
<td style="vertical-align: top;">File formats that may be present across different tables</td>
<td><code>false</code></td>
</tr>
</tbody>
</table>


<h4 id="is-directory-snapshot">`is_directory_snapshot`</h4>

<h5 id="is-directory-snapshot-true">When `is_directory_snapshot` is `true`</h5>

<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>directory_glob_pattern</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Tables glob path</td>
<td><code>true</code></td>
</tr>
</tbody>
</table>


<h4 id="single-table-file-format">`single_table_file_format`</h4>

<h5 id="single-table-file-format-csv">When `single_table_file_format` is `csv` OR `single_table_file_formats` contains `csv`</h5>

<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>skip_lines</code></td>
<td><code>integer</code></td>
<td style="vertical-align: top;">Skip first lines<br/><br/>Skip first N lines of each CSV file.</td>
<td><code>false</code></td>
</tr>
</tbody>
</table>



#### Example

```json
{
  "name": "S3 Compatible connection",
  "type": "s3_compatible",
  "configuration": {
    "aws_access_key_id": "AKIAIOSFODNN7EXAMPLE",
    "aws_secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    "csv_has_headers": false,
    "endpoint": "https://s3.example.com",
    "is_single_table": false,
    "s3_bucket_name": "s3://polytomic/dataset",
    "s3_bucket_region": "us-east-1"
  }
}
```

## Model Sync
### Source
#### Configuration
<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>file_format</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">File format<br/><br/>Accepted values: `csv`, `json`, `parquet`</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>key</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Object key<br/><br/>The key of the object in the bucket to read from.</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>model_from</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Files<br/><br/>The model is generated from a single file or a multi-file archive. Accepted values: `single_file`, `multi_file_archive`</td>
<td><code>true</code></td>
</tr>
<tr>
<td><code>skip_lines</code></td>
<td><code>integer</code></td>
<td style="vertical-align: top;">Skip first lines<br/><br/>Skip first N lines of each CSV file.</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>subfolder</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Subfolder to read files from from (optional)</td>
<td><code>false</code></td>
</tr>
</tbody>
</table>


#### Example
```json
{
  ...
  "configuration": {
    "file_format": "",
    "key": "",
    "model_from": "",
    "skip_lines": 0,
    "subfolder": ""
  }
}
```

### Target
S3 Compatible connections may be used as the destination in a model sync.
#### All targets

##### Configuration
<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>format</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Output format<br/><br/>Output file encoding. Accepted values: `csv`, `json-doc`, `json`, `parquet`</td>
<td><code>false</code></td>
</tr>
</tbody>
</table>


##### Example
```json
{
  ...
  "target": {
      "configuration": {
        "format": "csv"
    }
  }
}
```








## Bulk Sync
### Source
S3 Compatible connections may be used as a bulk sync source. No additional configuration options are required.

### Destination
#### Configuration
<table>
<thead>
<tr>
<th>Name</th><th>Type</th><th>Description</th><th>Required</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>advanced</code></td>
<td><code>object</code></td>
<td style="vertical-align: top;"></td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>format</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Output file encoding</td>
<td><code>false</code></td>
</tr>
<tr>
<td><code>subfolder</code></td>
<td><code>string</code></td>
<td style="vertical-align: top;">Subfolder to write to (optional)</td>
<td><code>false</code></td>
</tr>
</tbody>
</table>


#### Example
```json
{
  ...
  "destination_configuration": {
    "advanced": {
        "write_incremental": false
    },
    "format": "csv",
    "subfolder": "reports"
  }
}
```