Partners send what their systems can produce: a vendor exports a comma-separated order file, a carrier emits XML, a legacy ERP spits out a fixed-width EDI batch. Your application wants clean, validated JSON. The usual fix is a conversion microservice that watches a drop folder, reparses every dialect, and falls over on the one row with an unescaped comma. FTPasHTTPS moves that conversion into the upload itself, so your endpoint only ever receives the shape it asked for.

How inline conversion works

  1. A client uploads a file via STOR over SFTP, FTPS or FTP.
  2. FTPasHTTPS detects the format and applies your transform — for example, parse CSV and emit JSON.
  3. If a schema is configured, the parsed records are validated. Invalid files are rejected before anything downstream sees them.
  4. The converted output is forwarded to your webhook (HMAC-SHA256 signed) and/or written to S3, GCS, Azure Blob or another SFTP server.
  5. Your endpoint's 200 maps to 226 Transfer complete; a validation failure or 5xx maps to 451 Action aborted.

Configuration + example payload

The transform is declared on the server. Here a CSV upload is converted to JSON, validated against a schema, then delivered:

# CSV -> JSON transform with schema validation
{
  "protocol": "sftp",
  "transform": {
    "from": "csv",
    "to": "json",
    "csv": { "delimiter": ",", "header": true },
    "validate": { "schema": "orders.schema.json", "onError": "reject" }
  },
  "forward": [
    { "type": "webhook", "url": "https://api.acme.com/orders",
      "hmac": { "algorithm": "sha256", "secret": "${WEBHOOK_SECRET}" } },
    { "type": "s3", "bucket": "acme-orders-json",
      "keyTemplate": "json/{date}/{filename}.json" }
  ]
}

A vendor uploads plain CSV:

# orders-2026-06-20.csv (what the vendor sends)
order_id,sku,qty,price
A-1001,WIDGET-RED,4,9.99
A-1002,WIDGET-BLUE,1,12.50

Your webhook receives validated JSON — no CSV parsing on your side:

// POST body delivered to https://api.acme.com/orders
[
  { "order_id": "A-1001", "sku": "WIDGET-RED",  "qty": 4, "price": 9.99 },
  { "order_id": "A-1002", "sku": "WIDGET-BLUE", "qty": 1, "price": 12.50 }
]

Beyond CSV. The same transform pipeline converts between CSV, JSON and XML, turns fixed-format EDI batches into JSON, and can layer on PGP decryption (for partners who encrypt) and compression — all inline, all before the file reaches your app.

Inline transform vs. a DIY conversion service

ConcernDIY drop folder + parser serviceFTPasHTTPS inline transform
When conversion runsAfter a cron/poll picks the file upDuring the upload, streaming
Bad-file rejectionDiscovered downstream, after acceptRejected at upload with 451
Schema validationHand-rolled per formatDeclared once, enforced inline
Formats handledWhatever you codedCSV, JSON, XML, EDI-style
PGP / compressionSeparate steps to wire upPart of the same flow
File on diskSits in the drop folderNever touches disk
Retries & auditYou build itBackoff, dead-letter queue, audit log

When to use it (and the limits)

Inline conversion is the right tool when partners send formats your app does not speak, when you want malformed files bounced at the source instead of poisoning a queue, or when each new vendor currently means another bespoke parser. It is especially handy for order, inventory and EDI feeds where the structure is known and a schema can enforce it. Transformations and schema validation are available from the Professional plan; PGP is an Enterprise feature.

Keep the constraints in mind: transforms operate on structured, record-oriented files — this is format conversion and validation, not arbitrary data enrichment or joins against external systems. Conversion happens per upload, so it is not a batch reprocessor for files already in storage. And very large files are bounded by your plan's transfer and size caps.

Why validate at the edge instead of downstream

The biggest win of converting on upload is not the format change — it is rejecting bad data before it becomes your problem. When validation runs inside a downstream worker, a malformed file has already been accepted: it sits in a queue, triggers a partial run, or worse, gets half-processed before the bad row surfaces. Cleaning that up means reconciliation, dead-letter triage, and an awkward email to the partner days later.

Validate at the edge and the failure happens where it is cheapest to fix. A file that violates the schema never produces a webhook call or an object in your bucket; the uploading client gets 451 Action aborted on the spot, so the partner's own system flags the failed transfer immediately and can resend a corrected file. Your application, meanwhile, is guaranteed that anything it receives already matches the contract — right field names, right types, right shape — which means no defensive parsing, no per-vendor special cases, and a far smaller surface for injection or malformed-input bugs. The audit log captures every rejection alongside every accepted transfer, so you always have evidence of what was refused and why.

Frequently asked questions

How do I convert a CSV file to JSON automatically on upload?

Enable a CSV-to-JSON transformation on your server. When a client uploads a CSV over SFTP or FTP, it is parsed and converted to JSON inline, then delivered to your webhook or written to cloud storage. You write no parsing or conversion code.

Which file formats can FTPasHTTPS convert between?

It transforms between CSV, JSON and XML inline. It can also validate against a schema, apply PGP encryption or decryption, and compress or decompress files as part of the same upload flow.

Can I validate a file against a schema before accepting it?

Yes. Schema validation runs inline during the upload. If a file fails, FTPasHTTPS returns 451 Action aborted so the bad file is rejected at the source, and the rejection is recorded in the audit log.

Does the converted file ever get written to disk?

No. The upload is parsed, transformed and forwarded in a streaming flow without touching disk. The converted output goes straight to your webhook, S3, GCS, Azure Blob or another SFTP server.

Can I convert and forward in the same step?

Yes. A single upload can be transformed (for example CSV to JSON), validated, then forwarded to a webhook and cloud storage at once. Your endpoint's HTTP response maps back to FTP codes for the uploading client.

Stop writing parsers for every partner

Declare a transform once, validate against your schema, and receive clean JSON every time. Set it up in minutes.

Start free — no credit card