Signed webhooks
Timestamp and HMAC-SHA256 in the x-imza header; requests older than 5 minutes are rejected.
Relay2X carries 2X events safely into your own systems: signed webhooks, a retry schedule, duplicate-safe requests and project-bound keys. ERP connectors and field mapping are in early access.
Live today: signed webhooks, idempotency, scoped API keys · ERP connectors in early access
Signature verified · within 300 s
Retries: 1 min → 5 min → 30 min → 2 h → 6 h → 24 h
Illustrative view · sample data
Every line states its status: use what is live today, help shape what is in early access.
Timestamp and HMAC-SHA256 in the x-imza header; requests older than 5 minutes are rejected.
1 min, 5 min, 30 min, 2 h, 6 h, 24 h. An endpoint is disabled after 20 consecutive failures.
A repeated request with the same key returns the first result; a different body gets 422.
Scopes such as sms.send, email.read, webhook.manage; sender and IP limits, expiry.
Rotate the webhook signing secret with one call; the new value is shown once.
A catalog of ready connectors for common ERP systems.
Transform incoming events into your own fields with schema validation.
Per-endpoint success rate, last delivery and a dead-letter view.
Attach sms.delivered and email.failed events to the order or account record.
On a network glitch, retry with the same Idempotency-Key; no duplicate message is created.
Live and test projects carry separate keys; test keys never reach real recipients.
Register the endpoint, store the signing secret, verify every request and deduplicate by x-olay-id. Ordering is not guaranteed; rely on data.status and updated_at.
curl https://api.reach2x.com/v1/webhooks \
-H "Authorization: Bearer $REACH2X_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/2x",
"events": ["sms.delivered", "sms.failed", "email.delivered", "email.failed"]
}' {
"webhook": {
"id": "1b2c3d4e-5f60-4a7b-8c9d-0e1f2a3b4c5d",
"url": "https://example.com/hooks/2x",
"status": "active",
"secret_prefix": "whsec_9fK2"
},
"secret": "whsec_… (shown only once)"
} import crypto from 'node:crypto';
// header "x-imza": t=<unix seconds>,v1=<hex>
export function verify(rawBody, header, secret) {
const p = Object.fromEntries(header.split(',').map((x) => x.split('=')));
const expected = crypto
.createHmac('sha256', secret)
.update(`${p.t}.${rawBody}`)
.digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(p.t)) <= 300;
return (
fresh &&
expected.length === p.v1?.length &&
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(p.v1))
);
} The points below describe how the API behaves today, not future promises.
Each key belongs to one project and can only use the scopes it was given (e.g. sms.send, email.read). Only a hash is stored; the secret is shown once.
Asking for an id that belongs to another organization returns 404; nothing about its existence leaks.
Sending calls require an Idempotency-Key. A repeated request with the same key returns the original result instead of a second message.
Every event is signed with HMAC-SHA256 and carries a timestamp; failed deliveries are retried with growing intervals.
Phone numbers and email addresses are masked in responses; message bodies can never be read back through the API.
Keys starting with rx_test_ never deliver to a real recipient, so you can try your integration safely.
The price list is not published yet. Open your account now, start on a trial entitlement and see the plans first when they are announced.
Only the channel you need. No separate account, no separate portal.
Pricing soonEarly access
Add products to the same organization; keys, members and logs stay shared.
Pricing soonEarly access
Email, SMS, verification and the next channels under one organization.
Pricing soonEarly access
Yes, under network conditions it can. Deduplicate by the x-olay-id header.
Without a 2xx within 10 seconds the event is retried after 1 min, 5 min, 30 min, 2 h, 6 h and 24 h. After 20 consecutive failures the endpoint is disabled; recreate it to re-enable.
Only https URLs that resolve to a public address are accepted.
No, they are in early access. Today you can build your own integration with webhooks and the API.
Start with the product you need; add the others to the same account whenever you want.
One API and one account for all your channels
reach2x.comLive Mail2XTransactional email today; business mailboxes soon
mail2x.comLive Relay2XSigned webhooks, idempotency and scoped keys
relay2x.comLive TXT2XAn SMS API that knows the İYS rules
txt2x.comLaunching OTP2XOne-time verification codes over SMS and email
otp2x.comLaunching WA2XBusiness messaging on the official WhatsApp Business Platform
wa2x.comEarly access NOTI2XNotification orchestration from event to the right channel
noti2x.comEarly access PUSH2XMobile and web push notifications
push2x.comEarly accessSign-up is free. Try it with a test key without touching real recipients.