Webhooks & APIIntegrations

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.

n8n workflow with HTTP Request pointing at 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.

n8n HTTP Request node
FieldValue
MethodPOST
URLThe Wexio endpoint URL
AuthenticationNone (we'll use a custom header instead)
Send HeadersEnable
Headersx-webhook-secret → Wexio signing secret; Content-Typeapplication/json
Send BodyEnable
Body Content TypeJSON
Specify BodyUsing JSON (raw) — paste your JSON with {{ $json.fieldName }} interpolation

3. Contact resolution, schema, flow

As with any inbound connection:

  1. Configure identifier + path on the Wexio connection.
  2. Tap Capture schema, run the n8n workflow once, let Wexio learn the fields.
  3. 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.

n8n proxy pattern

Example for PayPal v2:

  1. Trigger: n8n Webhook node, listening on a public URL.
  2. Verify: a Function node that fetches PayPal's cert from cert_url in the event, verifies the signature, throws on mismatch.
  3. Reshape: a Set node that flattens PayPal's nested resource into a Wexio-friendly shape.
  4. Forward: HTTP Request node → Wexio inbound URL, with x-webhook-secret header.

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

SymptomCauseFix
401 UNAUTHORIZEDx-webhook-secret missing or wrongRe-copy the secret into the n8n HTTP Request headers
400 INVALID_JSONBody content type set to Form-URLEncodedSwitch to JSON, use "Using JSON (raw)" for nested objects
Timeout from Wexion8n workflow took > HTTP timeout to respondWexio responds within seconds; check your n8n instance isn't queuing on a low-concurrency worker
Duplicate flow runsn8n retry + Wexio not dedupingSend X-Idempotency-Key with a stable per-event ID (e.g. the source record's UUID)

On this page