Carrier data, delivered like it’s 2026.
Emerald Relay is the open network that moves policy, document and commission data from carriers to every agency system — in seconds, not overnight.
RWL RenewalPA-1002934Relay MutualPersonal autoSandbox data
Renewal for Avery Testwell, effective Nov 1, 2026. Premium up $214.00; a second vehicle was added.
| Field | Prior term | This term |
|---|---|---|
| Term premium | $1,272.00 | $1,486.00 |
| Collision deductible, vehicle 1 | $500 | $1,000 |
| Vehicles | 1 | 2 |
Delivery
- Agency system webhookDelivered and accepted by the agency system
- Partner pull feedAvailable at seq 18233
- AL3 mailboxQueued for the next hourly batch
How it works
A carrier sends data once. Relay checks it, turns it into one readable policy object, and routes it by agency code to every system that agency has authorized.
- 1Carriers sendAPI, the AL3 file they already export, or an upload.
- 2Relay validates, normalizes and routesOne policy object, routed by agency code.
- 3Agency systems receiveSigned webhooks, a pull feed, or an AL3 mailbox.
Carriers & MGAs
- Send the files you already make — we do the rest
- Live with pilot agencies this week
- One connection to every AMS
Agencies
- See every transaction in plain English
- Know the moment a carrier goes quiet
- Free for agencies, always
Software partners
- Plaid-style Link in an afternoon
- Webhooks, pull feed, and AL3 — your choice
- Every partner gets the same API — including our own
Two calls on each side
Carriers push transactions with one authenticated request. Partners receive a signed, thin webhook and fetch the full object over the API, so personal data stays out of webhook logs.
Carrier: push a renewal
curl https://sandbox.emeraldrelay.com/v1/ingest/transactions \
-H "Authorization: Bearer rk_test_…" \
-H "Idempotency-Key: renewal-PA-1002934-2026" \
-H "Content-Type: application/json" \
-d '{
"transactions": [{
"carrier": { "name": "Relay Mutual", "naic": "99901" },
"agency_code": { "code": "TEST-0001" },
"transaction": { "type": "RWL", "processed_date": "2026-10-20",
"effective_date": "2026-11-01" },
"policy": { "number": "PA-1002934", "lob": "AUTOP",
"term": { "effective": "2026-11-01", "expiration": "2027-05-01" },
"premium": { "written": "1486.00", "change": "214.00" } },
"insureds": [{ "name": { "full": "Avery Testwell" } }]
}]
}'Partner: handle the webhook
import { Relay, verifyWebhook } from "@emerald-relay/node";
const relay = new Relay({ clientId: process.env.RELAY_CLIENT_ID, secret: process.env.RELAY_SECRET });
export async function POST(req: Request) {
// Verify the raw body; re-serialized JSON won't match the signature.
const event = verifyWebhook(await req.text(), req.headers, process.env.RELAY_WEBHOOK_SECRET!);
const accessToken = await tokenForInstall(event.install_id);
if (event.type === "policy.transaction.created") {
// Thin event: fetch the full policy object over the API.
const txn = await relay.policyTransactions.get(accessToken, event.data.id);
await upsertPolicy(txn);
await relay.events.ack(accessToken, event.id, { result: "APPLIED" });
}
return new Response(null, { status: 204 });
}Security we can state plainly
Insurance data includes people's personal information. These are the controls in place today.
- Encryption in transit (TLS) and at rest, with a separate data key per organization
- Field-level encryption for sensitive fields such as dates of birth and license numbers
- Two-factor authentication required for owners and admins
- An audit log of every sign-in, key change and data access by staff
- Automated tests that check one tenant can never read another tenant's data
- SOC 2: not certified yet. Our current status is on the security page.