We've repeatedly encountered situations where a client launched a site on Wix, but business processes hit a wall with synchronization: leads manually lost, orders dropped, payment gateway mismatch. Wix is a closed platform — you cannot add arbitrary server code or modify infrastructure. Integrations are built via two mechanisms: Velo (formerly Corvid) — an embedded JavaScript environment based on Node.js, and Wix Headless API — REST/GraphQL APIs to work with data externally. Wix provides all the necessary tools to configure connections with any external service: from a simple webhook to a full headless solution. We set them up turnkey with guaranteed stability and documentation. Over 50 successful Wix integrations with CRMs, payment systems, and ERPs confirm our expertise.
What problems does Wix integration with external APIs solve?
- Lead loss — form data doesn't reach the CRM, managers waste time on manual entry.
- Catalog desynchronization — products in Wix Store don't update with the accounting system.
- Missing notifications — nobody learns about new orders or registrations in time.
- Velo limitations — function execution time up to 14 seconds, cannot install any npm packages.
- Webhook complications — JWT signature verification, error handling, retries.
Our experience allows us to avoid these pitfalls: we've done dozens of integrations for Wix sites of various scales — from simple forms to two-way synchronization with ERP.
How we set up Wix integration with an external service
We choose the mechanism based on the task. Below is a comparison of the main approaches.
| Mechanism | When to use | Code required | Performance | Complexity |
|---|---|---|---|---|
| Velo (jsw) | Any custom logic: form processing, synchronization, external API calls. | Yes (JavaScript) | Medium: 14 sec, 256 MB | High |
| Wix Automations | Simple scenarios: send data on event, call Zapier. | No (zero-code) | Low: no response handling | Low |
| Wix Headless API | Read/write site data from outside (CRM, ERP, mobile app). | Yes (any language) | High: 1000 requests/min limit | Medium |
| Webhooks | Notify external system about events (new order, contact). | On receiver side | High: asynchronous | Medium |
Velo: server-side code inside Wix
According to Wix documentation, functions run no longer than 14 seconds. Velo allows writing server functions (jsw files) that execute on Wix servers and can call external APIs. Keys are stored in wix-secrets-backend — built-in storage, not in code.
// backend/crmIntegration.jsw
import { fetch } from 'wix-fetch';
import { getSecret } from 'wix-secrets-backend';
export async function syncContactToCRM(contactData) {
const apiKey = await getSecret('CRM_API_KEY');
const response = await fetch('https://api.yourcrm.com/v1/contacts', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: contactData.email,
name: contactData.name,
phone: contactData.phone,
source: 'wix_website',
}),
});
if (!response.ok) {
throw new Error(`CRM sync failed: ${response.status}`);
}
return response.json();
}
jsw functions are called from the frontend via import:
// Client-side page code
import { syncContactToCRM } from 'backend/crmIntegration';
$w('#submitButton').onClick(async () => {
try {
await syncContactToCRM({
email: $w('#emailInput').value,
name: $w('#nameInput').value,
phone: $w('#phoneInput').value,
});
$w('#successMessage').show();
} catch (err) {
console.error('Sync error:', err);
}
});
We recommend this approach when full flexibility is needed: error handling, retries, data transformation. Velo is 3 times faster for custom scenarios than Automations with HTTP requests, as it doesn't require additional calls.
Wix Automations + HTTP requests
For simple no-code scenarios: Wix Automations (triggers on form events, orders, registrations) support the "HTTP request" action. Allows sending POST/GET to an external URL. This is a zero-code option for sending to CRM, Zapier, or n8n.
Limitations: no response handling, no conditional logic, no retries on error. If reliability is needed — choose Velo.
Wix Headless API: working with site data from outside
Wix provides REST API for accessing data collections, orders, contacts. Authentication via OAuth 2.0:
# Obtain token
curl -X POST https://www.wixapis.com/oauth2/token \
-H "Content-Type: application/json" \
-d '{
"clientId": "YOUR_CLIENT_ID",
"clientSecret": "YOUR_CLIENT_SECRET",
"grantType": "client_credentials"
}'
// Read data collection via API
$response = Http::withToken($accessToken)
->post('https://www.wixapis.com/wix-data/v2/items/query', [
'dataCollectionId' => 'Products',
'query' => [
'filter' => ['active' => true],
'sort' => [['fieldName' => 'createdDate', 'order' => 'DESC']],
'paging' => ['limit' => 50],
],
]);
$items = $response->json('dataItems');
Typical use case: an external CRM or ERP reads orders from Wix for processing, or writes data to custom collections on the site.
Webhooks from Wix
Wix supports outgoing webhooks for events: new contact, new order, order status change. Setup in the developer panel (Wix Developers → Webhooks). When an event occurs, Wix sends a POST to the specified URL.
Signature verification — via JWT with Wix's public key:
import { verify } from 'jsonwebtoken';
import jwksClient from 'jwks-rsa';
const client = jwksClient({
jwksUri: 'https://www.wix.com/.well-known/jwks.json',
});
async function verifyWixWebhook(token) {
const decoded = verify(token, async (header, cb) => {
const key = await client.getSigningKey(header.kid);
cb(null, key.getPublicKey());
});
return decoded;
}
Without verification, you can receive fake requests — we always implement signature checking.
How to avoid lead loss during Wix integration?
The main reason — lack of automatic data transfer. Leads stay in Wix, managers copy them manually. Solution: configure a Velo function that, upon form submission, sends data to the CRM. Additionally, we add a webhook on new contact — if Velo fails, data goes through the webhook. This provides 99.9% delivery guarantee.
Why is Velo not always sufficient?
Velo is powerful, but has limitations: 14-second execution time, 256 MB memory, no external modules. If you need to process mass import or heavy logic, it's better to use Wix Headless API: an external service reads data from Wix and synchronizes it. For example, when syncing a catalog of 1000 products, Velo may not fit the timeout, while Headless API handles it in a few requests.
Work process: from task to deployment
- Analysis — we dissect current business processes, integration points, data volume. We create a flow diagram.
- Design — we choose the mechanism (Velo, Automations, Headless, webhook), plan error handling and quotas.
- Implementation — we write code, set up secrets, test on Wix sandbox.
- Testing — we check scenarios: success, timeout, duplicates, connection loss.
- Deployment — we publish the site, monitor synchronization for the first 24 hours.
Average timeline: from 2 hours to 3 days depending on complexity.
What's included in our work
- Documentation — description of the configured integration, data schema, instructions for your team.
- Code — jsw functions, webhook receiver configuration, call examples.
- Access — creation and transfer of API keys, secrets setup in Wix.
- Training — short demonstration of the integration for your managers.
- Support — 14 days after launch: we fix incidents, answer questions.
Typical mistakes and solutions
| Mistake | Solution |
|---|---|
| Storing keys in code | Use wix-secrets-backend |
| Ignoring limits | Velo 14 sec, Headless API 1000 req/min. Design with buffer. |
| Skipping webhook verification | Without JWT check, an attacker can impersonate Wix. |
| Synchronization without idempotency | Repeated requests create duplicates. Add ID-based check. |
Cost and timeline
Cost is calculated individually after analyzing the task. Guidelines:
- Simple integration (form → CRM) — from 2 hours.
- Two-way catalog synchronization — from 1 day.
- Complex solution with multiple services — up to 5 days.
We guarantee stable operation and timely launch. We have over 50 Wix integrations with CRMs, payment systems, and marketing platforms behind us.
Contact us — we'll discuss your task and choose the optimal solution. Get a free consultation.







