Skip to content
Live relay2x.com

Let your systems talk. Let operations move faster.

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

POST https://example.com/hooks/2x
x-olaysms.delivered
x-olay-id9c1e…b72d
x-imzat=1763113267,v1=5d2c…e41a

Signature verified · within 300 s

EventHTTPTryTime
sms.delivered 200 #1 09:41:07
email.delivered 200 #1 09:41:05
sms.failed 200 #2 09:40:58
sms.failed 503 #1 09:35:58
email.queued 200 #1 09:35:41

Retries: 1 min → 5 min → 30 min → 2 h → 6 h → 24 h

Illustrative view · sample data

Capabilities

What is ready, what comes next

Every line states its status: use what is live today, help shape what is in early access.

Live

Signed webhooks

Timestamp and HMAC-SHA256 in the x-imza header; requests older than 5 minutes are rejected.

Live

Retry schedule

1 min, 5 min, 30 min, 2 h, 6 h, 24 h. An endpoint is disabled after 20 consecutive failures.

Live

Idempotency

A repeated request with the same key returns the first result; a different body gets 422.

Live

Scoped keys

Scopes such as sms.send, email.read, webhook.manage; sender and IP limits, expiry.

Live

Secret rotation

Rotate the webhook signing secret with one call; the new value is shown once.

Early access

ERP connectors

A catalog of ready connectors for common ERP systems.

Early access

Field mapping

Transform incoming events into your own fields with schema validation.

Early access

Delivery monitoring

Per-endpoint success rate, last delivery and a dead-letter view.

Use cases

Where it helps

01

Write delivery status to your ERP

Attach sms.delivered and email.failed events to the order or account record.

02

Retry-safe integration

On a network glitch, retry with the same Idempotency-Key; no duplicate message is created.

03

Environment separation

Live and test projects carry separate keys; test keys never reach real recipients.

Developers

Start with a single request

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.

  • Base URL: https://api.reach2x.com
  • Bearer API key; permission per scope
  • Idempotency-Key required on sends
  • Errors as RFC 9457 problem+json with a stable code

Docs

curl Register a webhook endpoint
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"]
  }'
Response201 Created
{
  "webhook": {
    "id": "1b2c3d4e-5f60-4a7b-8c9d-0e1f2a3b4c5d",
    "url": "https://example.com/hooks/2x",
    "status": "active",
    "secret_prefix": "whsec_9fK2"
  },
  "secret": "whsec_… (shown only once)"
}
webhook.js Verify the signature (Node.js)
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))
  );
}
Security

Secure by default

The points below describe how the API behaves today, not future promises.

Scoped API keys

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.

Tenant isolation

Asking for an id that belongs to another organization returns 404; nothing about its existence leaks.

Idempotency

Sending calls require an Idempotency-Key. A repeated request with the same key returns the original result instead of a second message.

Signed webhooks

Every event is signed with HMAC-SHA256 and carries a timestamp; failed deliveries are retried with growing intervals.

Masked recipients

Phone numbers and email addresses are masked in responses; message bodies can never be read back through the API.

Test keys

Keys starting with rx_test_ never deliver to a real recipient, so you can try your integration safely.

Pricing

Early access — pricing soon

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.

One product

Only the channel you need. No separate account, no separate portal.

Pricing soonEarly access

Several products

Add products to the same organization; keys, members and logs stay shared.

Pricing soonEarly access

The whole 2X family

Email, SMS, verification and the next channels under one organization.

Pricing soonEarly access

FAQ

Frequently asked questions

Can the same event arrive twice?

Yes, under network conditions it can. Deduplicate by the x-olay-id header.

What if my endpoint does not respond?

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.

Are there rules for the webhook URL?

Only https URLs that resolve to a public address are accepted.

Are the ERP connectors ready?

No, they are in early access. Today you can build your own integration with webhooks and the API.

Open your account and send your first request today.

Sign-up is free. Try it with a test key without touching real recipients.