SFTP & CSV Upload
Uploading call recordings and metadata via SFTP with an accompanying CSV is the simplest way to integrate with Conversation Intelligence (CI). There's no API to build against — you only need to deliver audio files and a correctly structured CSV to an SFTP location, and Capacity handles the rest.
How It Works
Capacity polls an SFTP location on a scheduled basis, picking up any new audio files and their accompanying CSV. Each row in the CSV describes one call and points to its corresponding audio file. Once picked up, the audio and metadata are matched and ingested into CI.
SFTP Access
You can deliver files using either your own SFTP server or one hosted by Capacity.
| Option | What's Needed | Authentication method |
|---|---|---|
| Capacity-Hosted SFTP | Capacity provisions and issues you an SFTP host | username and password or SSH keys |
| Your Own SFTP | You host the SFTP | username and password or SSH keys |
Polling frequency
This can be configured down to as little as every 30 minutes.
Although a folder structure is not strictly required, it is recommended that files are organised into one folder per date (e.g. /2026-08-12/), with that day's audio and CSV files placed inside. This keeps deliveries clean and makes it easier to trace files back to a specific day if there's ever a discrepancy.
CSV File Structure
Formatting Rules
- Comma-delimited, UTF-8 encoded
- Header row is required, with exact column names — files without a matching header will fail to process
- One row represents one call. You can deliver a single CSV covering many calls, or one CSV per call — either works
- No limit on the number of rows per file
See the Supported Audio Types & Codecs article for accepted audio formats.
Required Fields
| Column | Description/Accepted Values |
|---|---|
| callId | A unique identifier for the call |
| dateTime | Date and time of the call, in UTC ISO 8601 format (e.g. 2026-08-06T14:32:00Z) |
| callDirection | Inbound, Outbound, Internal |
| agentId | Identifies the agent on the call. Email address is preferred, but any unique identifier is accepted |
| agnetFirstName | Identifies the agent first name for easier recognition |
| agentLastName | Identifies the agent last name for easier recognition |
| audioFileName | Must exactly match the delivered audio file name, including its extension |
Optional Fields
Any additional column you include is automatically captured as metadata against the call — no extra configuration is needed. Common examples:
| Column | Purpose |
|---|---|
| masterId | Links multiple Call IDs together into a single composite interaction — use this where a customer journey spans more than one recorded segment |
| customerNumber | The customer's phone number or account reference |
| campaignName | Campaign name or code/name |
| dispostionName | Call outcome/disposition code/name |
| teamName | Used to segregate data — for reporting, filtering, or access control |
| ...other... | Captured automatically as call metadata for reporting and filtering |
Retention
Once a CSV has been successfully processed, they can be purged automatically. Alternatively, retention can be set to delete files after a configured number of days, regardless of processing status. Let Capacity know which approach you'd prefer during setup.
Audio files will always be deleted upon successful processing
Testing & Go-Live
Before switching over fully, it's recommended to deliver a small test batch of calls first to confirm the CSV structure and audio matching are working as expected.
What to Share with Capacity
| Item | Value/Confirmed |
|---|---|
| SFTP hosting option | ☐ Capacity-Hosted ☐ Own SFTP |
| SFTP username & password or SSH keys provided | |
| Polling frequency required | |
| CSV retention approach | ☐ Purge after processing ☐ Delete after ___ days |
| Test batch scheduled | ☐ Yes ☐ No |
