One connection from every carrier to every agency system.
Relay moves policy, document and commission data from carriers into the systems agencies already use. Checked, readable, and delivered in seconds instead of overnight.
Free for agencies and software partners. Carriers pay per active connection.
Carriers & MGAs
Send the files you already make. Relay checks them and delivers to every agency system you appoint.
- Live with pilot agencies in your first week
- Runs alongside your current download
- 25 live agency connections free
Agencies
See every policy change, document and commission statement from your carriers, in plain English.
- Know the moment a carrier goes quiet
- Approve who can send you data
- Free for agencies, always
Developers
One API for carrier data, with a Plaid-style Link flow your agency customers already understand.
- Sandbox keys the moment you sign up
- Webhooks, pull feed or AL3 — your choice
- Every partner gets the same API, including our own
- for agencies and software partners, always
- $0for agencies and software partners, always
- live agency connections free on Launch
- 25live agency connections free on Launch
- ways to deliver: webhooks, pull feed and AL3 mailbox
- 3ways to deliver: webhooks, pull feed and AL3 mailbox
- API for every agency system
- 1API for every agency system
See exactly what arrives.
Every transaction becomes one readable record: what changed, which documents came with it, and where it was delivered.
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,486.00 | |
| Collision deductible, vehicle 1 | $1,000 | |
| Vehicles | 2 |
Delivered to
- 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.
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.