Your users import any format. Your system receives clean data. Three API calls.
The WeTransform SDK handles the full import pipeline for your users : CSV, XLS, JSON, XML, PDF file upload, format detection, AI column mapping, validation — and delivers the result via a typed event. You define the output schema once. Your users send whatever they have.
From your side: install the package, create an instance, open the UI, subscribe to successSubmit. The fileUrl in the event payload is the transformed file, ready for your system to process. That is the integration contract.
Simple to integrate
Install, configure, open. No import pipeline to build.
import { createWeTransform } from '@wetransform/core' const sdk = createWeTransform({ organizationHandle: 'your_organization', locale: 'en', displayAsModal: true, initialLocation: 'transformations', authentication: { customerId: 'your_customer_id', signature: 'your_signed_payload', templateHandle: 'your_output_format_name', sourceId: 'your_source_file_name', },}) // Subscribe to the successSubmit eventsdk.on('successSubmit', (payload) => console.log('File successfully submitted', payload)) // Open WeTransformawait sdk.open() // Switch locale without remountingawait sdk.setLocale('fr') // Close or destroy sessionawait sdk.close()await sdk.destroy()Illustrative example — see api.wetransform.com for the full configuration reference.
View @wetransform/core on npm →One object. Full control.
Pass a single configuration object to createWeTransform. Required fields are your organization handle and the customer authentication block. Everything else controls display, locale, and session scope.
| Parameter | Type | Description |
|---|---|---|
organizationHandlerequired | string | Your organization URL slug. |
authentication.customerIdrequired | string | Identifies the end user in your system. |
authentication.signaturerequired | string | HMAC-SHA256 token. Generated server-side — never exposed to the browser. |
authentication.templateHandle | string | Scope the session to a specific import template. |
locale | 'en' | 'fr' | UI language. Switch at runtime with sdk.setLocale(). |
displayAsModal | boolean | Modal overlay (true) or inline embed. |
customization | { colors?: { primary?: string; secondary?: string } } | Override UI colors to match your product's brand. Pass CSS color values for primary and secondary. Applied at mount time; can be updated via sdk.setCustomization(). |
React to what happens
Subscribe to typed events with sdk.on(event, handler). The key event is successSubmit — it carries the fileUrl and a signature you must verify server-side before processing.
| Event | Payload | Description |
|---|---|---|
open | — | SDK opened and mounted. |
ready | — | UI fully loaded and interactive. |
successSubmit | { customerId, templateHandle, fileUrl, signature, userFileName } | User submitted. Verify signature server-side before processing fileUrl. userFileName is the original file name as uploaded. |
error | Error | An error occurred in the SDK. |
close | — | User closed the SDK. |
destroy | — | Instance fully torn down. |
HMAC authentication — signed server-side
WeTransform uses HMAC-SHA256 to authenticate each session and to verify submitted files. The secret key never leaves your backend.
Sign the customer context server-side before passing it to the SDK. On successSubmit, verify the inbound signature before you process or store the file.
HMAC_SHA256("customerId:templateHandle:sourceId", secret)HMAC_SHA256("customerId:templateHandle:fileUrl", secret)Never expose the secret key to the browser. Generate the signature in your backend.
Choose what fits your stack
Two ways to integrate WeTransform — pick the one that matches your architecture.
@wetransform/coreRecommendedHeadless browser SDK. Full programmatic control: events, locale switching, modal or inline display, TypeScript types.
React, Vue, vanilla JS, any framework
@wetransform/vueVue 3 wrapper. useWeTransform() composable and <WeTransformSdk> renderless component for declarative control.
Vue 3
CSV import SDK for B2B SaaS — built for recurring, real-world data
Most CSV import SDKs handle a clean upload once. WeTransform is built for the recurring case: the same partners and customers sending slightly different files every week. The AI learns the mapping on the first import and reuses it. Your users stop re-mapping. Your system keeps receiving clean data.
Open-source alternatives like TableFlow give you the component — you run the infrastructure, you handle format variation, you build the recurring logic. WeTransform runs that infrastructure for you, hosted in the EU by default, with GDPR compliance baked in.
Vs embedded importers positioned similarly (Ingestro, Dromo, OneSchema): WeTransform is the only one built natively for recurring imports in mid-market B2B SaaS, with EU hosting as the default, not an add-on. Public pricing from €459/month. No enterprise pricing wall to get started.
Developer questions
A signed download URL for the transformed file in your configured output format. Verify the inbound HMAC signature before processing. The URL is time-limited — download or use webhooks for async handling.
CSV, TXT, Excel (clean and messy — merged cells, multiple tables), PDF, XML, JSON, and image files. All formats go through the same AI mapping pipeline — your output schema stays constant.
Yes. Call await sdk.setLocale('fr') at any time without remounting. The UI updates in place. Supported: 'en' and 'fr'.
Set displayAsModal: false. The SDK renders inline inside a container element of your choice, rather than opening a modal overlay.
@wetransform/vue wraps @wetransform/core with a renderless component and a useWeTransform() composable. The composable accepts a reactive config getter so your Vue reactivity drives the SDK state.
Yes. Pass a customization object at init time: createWeTransform({ ..., customization: { colors: { primary: '#your-color', secondary: '#your-color' } } }). You can also call sdk.setCustomization() at runtime without remounting.
Read the full SDK reference
Configuration reference, method signatures, event types, and Vue 3 examples — all at api.wetransform.com.