n8n
Connect self-hosted or cloud n8n to Wexio
n8n's HTTP Request node can POST to a Wexio inbound URL at the end of any workflow. n8n is especially useful as a proxy for providers Wexio doesn't support natively yet (PayPal v2, Discord, SendGrid signed events, etc.) — n8n verifies the provider's signature, reshapes the payload, then forwards to Wexio.

Provider docs: Setting up webhooks in n8n
Setup (Direct)
1. Create an inbound Wexio connection
Settings → Webhooks & API → New connection → Inbound. Auth mode: Shared Secret. Copy the endpoint URL and the signing secret.
2. Add an HTTP Request node in n8n
At the end of the n8n workflow, add HTTP Request.

| Field | Value |
|---|---|
| Method | POST |
| URL | The Wexio endpoint URL |
| Authentication | None (we'll use a custom header instead) |
| Send Headers | Enable |
| Headers | x-webhook-secret → Wexio signing secret; Content-Type → application/json |
| Send Body | Enable |
| Body Content Type | JSON |
| Specify Body | Using JSON (raw) — paste your JSON with {{ $json.fieldName }} interpolation |
3. Contact resolution, schema, flow
As with any inbound connection:
- Configure identifier + path on the Wexio connection.
- Tap Capture schema, run the n8n workflow once, let Wexio learn the fields.
- Add a Webhook Received trigger on a flow and pick this connection.
Setup (Proxy for unsupported providers)
Use n8n to accept the partner's webhook, verify their signature locally (n8n has built-in crypto nodes), reshape the payload into a shape Wexio understands, then forward.

Example for PayPal v2:
- Trigger: n8n Webhook node, listening on a public URL.
- Verify: a Function node that fetches PayPal's cert from
cert_urlin the event, verifies the signature, throws on mismatch. - Reshape: a Set node that flattens PayPal's nested resource into a Wexio-friendly shape.
- Forward: HTTP Request node → Wexio inbound URL, with
x-webhook-secretheader.
Wexio sees a clean authenticated POST with the shape its schema captured; the partner-specific complexity lives in n8n.
Example — Airtable row → Telegram
- n8n trigger: Airtable — on new row
- n8n HTTP Request: POST
{ "customer": { "email": "{{ $json.email }}", "name": "{{ $json.name }}" }, "record_id": "{{ $json.id }}" }to Wexio - Wexio connection:
Email+$.customer.email - Wexio flow: Webhook Received → Text "Hi
{{webhook.customer.name}}, your Airtable record{{webhook.record_id}}is ready."
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
401 UNAUTHORIZED | x-webhook-secret missing or wrong | Re-copy the secret into the n8n HTTP Request headers |
400 INVALID_JSON | Body content type set to Form-URLEncoded | Switch to JSON, use "Using JSON (raw)" for nested objects |
| Timeout from Wexio | n8n workflow took > HTTP timeout to respond | Wexio responds within seconds; check your n8n instance isn't queuing on a low-concurrency worker |
| Duplicate flow runs | n8n retry + Wexio not deduping | Send X-Idempotency-Key with a stable per-event ID (e.g. the source record's UUID) |