Concepts
Delivery modes
Choose between privacy-first browser callback delivery and signed server-to-server webhook delivery for CSVJetty imports.
CSVJetty supports two ways to hand validated rows to your application. Choose callback delivery when the browser should hand records directly to your code, or webhook delivery when CSVJetty should send them server-to-server.
Two delivery modes
| Callback | Webhook | |
|---|---|---|
| Where rows go | Your onData handler in the browser | CSVJetty sends rows to your HTTPS endpoint |
| CSVJetty backend handles row data | No | Yes, temporarily for delivery and retries |
| Best for | Most React apps and privacy-sensitive flows | Server-to-server processing and durable delivery |
| Authentication | Your app authenticates its own save API | Verify the CSVJetty HMAC signature |
| Retry model | Your callback can retry through your app flow | Saved webhook batches can be retried |
Callback delivery
With callback delivery, CSVJetty passes each import batch to your onData handler. The normal production pattern is to send that payload from your React application to an authenticated API route you control.
Privacy-first path
See Callback delivery for the implementation pattern.
Webhook delivery
With webhook delivery, CSVJetty sends import batches directly to the HTTPS endpoint saved on the importer. Requests are signed, include an idempotency key, and support row-level rejection responses.
Webhook payloads are retained temporarily when needed for reliable delivery and retries; successfully delivered payloads are removed, and failed payloads expire after the retry window.
See Webhook delivery for signature verification and response handling.
Which should you choose?
A common payload model
Both modes deliver the same core import information: an import ID, file name, normalized rows, original row numbers, skipped-row count, uploaded headers, and the final column mapping. Webhooks additionally include batch metadata.
See the complete Import payload reference.