The VRA API returns a single grade — A · B · C · D · F — and the composite signals behind it, for any segment ID or match-file. Public methodology. 1,000 calls free. Production-ready in an afternoon.
POST /v1/score Authorization: Bearer vra_live_•••••3f9 Content-Type: application/json { "segment_id": "liveramp.auto_intender.us", "region": "US" }
{ "grade": "A", "composite": 98.4, "signals": { "identity_quality": 98.4, "non_residential_pct": 1.2, "privacy_relay_pct": 0.4, "freshness_days": 9, "benchmark_drift_sigma": 0.31 }, "certified": true, "last_reviewed": "2026-04-22", "methodology": "v3.1" }
No SDKs to install, no tag to embed, no integration cost. Standard REST, JSON in and JSON out, language-neutral. Whatever you build with the score is yours — buy-side filtering, reporting layers, dashboards, RFP automation.
Pass a known segment_id from the registry, or upload a sample match-file for a fresh score. Returns the VRA Grade and all five composite signals.
Fetch the current grade, all historical grades, last-reviewed date, and trend for any segment in the public registry. Cached aggressively, free above the score endpoint.
Browse the registry →Get a signed POST to your endpoint the moment a segment you care about loses a grade, exits the registry, or fails benchmark drift. Replace polling with push.
Wire it up →Sign up, paste a key, run a request. The free tier covers full v1 functionality — no feature gating, no upsell prompts in the response payload.
Email and a workspace name. Your key starts with vra_live_ for production and vra_test_ for sandbox. Sandbox returns deterministic fixtures so your tests don't burn credits.
Hit POST /v1/score with any registered segment_id. We respond with the grade, the composite, and every signal that went into it — same payload our subscribers see.
Pre-buy filtering at the DSP, post-buy reporting in your dashboard, RFP responses that cite a third-party grade. Webhooks push downgrades the moment they happen — no polling.
1,000 scored requests per month, free, forever. Past that, ¢0.01 per scored impression. Volume tiers from 1M req/mo. No commitment, no minimum, no procurement cycle to start.
# Score a segment by ID curl https://api.verifiedaudiences.com/v1/score \ -H "Authorization: Bearer $VRA_KEY" \ -H "Content-Type: application/json" \ -d '{"segment_id":"liveramp.auto_intender.us"}' # Look up the registry (no auth needed) curl https://api.verifiedaudiences.com/v1/registry/liveramp.auto_intender.us
// Node 18+ — no SDK required const res = await fetch("https://api.verifiedaudiences.com/v1/score", { method: "POST", headers: { "Authorization": `Bearer ${process.env.VRA_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ segment_id: "liveramp.auto_intender.us" }) }); const { grade, composite, signals } = await res.json(); // → grade: "A", composite: 98.4, signals: { ... } if (grade === "D" || grade === "F") blockBuy(segment);
# Python 3.9+ — stdlib only import os, json, urllib.request req = urllib.request.Request( "https://api.verifiedaudiences.com/v1/score", data=json.dumps({"segment_id": "liveramp.auto_intender.us"}).encode(), headers={ "Authorization": f"Bearer {os.environ['VRA_KEY']}", "Content-Type": "application/json", }, ) with urllib.request.urlopen(req) as r: score = json.loads(r.read()) print(score["grade"], score["composite"]) # A 98.4
// Go 1.21+ — stdlib only package main import ( "bytes"; "encoding/json" "fmt"; "net/http"; "os" ) func main() { body, _ := json.Marshal(map[string]string{ "segment_id": "liveramp.auto_intender.us", }) req, _ := http.NewRequest("POST", "https://api.verifiedaudiences.com/v1/score", bytes.NewReader(body)) req.Header.Set("Authorization", "Bearer "+os.Getenv("VRA_KEY")) res, _ := http.DefaultClient.Do(req) var out struct{ Grade string; Composite float64 } json.NewDecoder(res.Body).Decode(&out) fmt.Println(out.Grade, out.Composite) // A 98.4 }
vra_test_*) return deterministic fixtures and don't count against your free quota. Production keys (vra_live_*) hit real benchmark data.
Every grade the API returns is computable from raw inputs using the published v3.1 pipeline. Anyone can replicate any score we issue. The point isn't to trust us — it's that you don't have to.
Every grade is computed against a paid-tier ground-truth dataset (MaxMind Insights). Free-tier outputs achieve 99.6% precision and 97.4% recall on the benchmark — published and reproducible.
Identity quality, non-residential share, privacy-relay share, freshness, and longitudinal benchmark drift. Each is returned in the API payload alongside the grade. No hidden inputs.
Standard reviews each quarter; spot reviews any time a benchmark cohort shifts more than 1.5σ. Downgrades push to your webhook endpoint within 30 seconds of reissue.
VRA accepts no revenue from suppliers, and no revenue tier exists for suppliers. The API costs the same whether the buyer is a Fortune 50 or a solo developer prototyping at midnight.
The exact payload your code receives. No version-gated fields, no enterprise-only signals — what's below is what every key gets back, including free-tier.
A live, citeable record of every audience supplier and segment we've assessed. The same data backs the API and this public registry — browse it to see what your code will see.
Same API across every tier — same payload, same latency, same methodology. Tiers differ on volume, support, and whether you sign a contract. Most teams start free and never need to talk to us.
Genuinely free. Sign up with email, get a key, make calls. The 1,000 free requests per month renew automatically and never expire mid-month. We only ask for a card when you cross into the metered tier — and you'll see exactly when that happens because we hard-stop at the free limit by default rather than silently overage-billing.
p50 is 38ms, p99 is 84ms over the last 24 hours. For DSPs scoring at OpenRTB bid time, the Scale tier offers a 60ms p99 SLA on private routing. Registry GETs are aggressively edge-cached and typically return in 22ms, which is fast enough that most integrators just hit them directly rather than maintaining their own cache.
Two endpoints, JSON in and JSON out — there's not much to wrap. Official SDKs ship for TypeScript and Python (typed clients, retry logic, webhook signature verification). For everything else, the curl recipe in the docs is a faithful template. The Quick Start tab on this page shows the standard library version in JS, Python, and Go.
Yes. POST /v1/score accepts either a segment_id from the public registry, or a match_file upload (newline-delimited identifiers, hashed). Custom-audience scoring runs on the same v3.1 pipeline against the same benchmark — the only difference is the result isn't published back to the public registry unless you opt in.
Bearer tokens in the Authorization header — standard. Keys are scoped per workspace and can be rotated from the dashboard with zero downtime (old key keeps working for 24 hours after rotation). Sandbox keys (vra_test_*) and production keys (vra_live_*) are visually distinct so you don't ship a test key to prod by accident.
Subscribe to the webhook for that segment — you'll get a signed POST within 30 seconds of any grade change, with the old grade, the new grade, and the underlying signal that triggered the move. Most teams use this to flag affected campaigns for review rather than auto-pause; a downgrade from A to B is informational, a downgrade from B to D is usually action.
Methodology versions are immutable once published. The current version is v3.1; if v4 ships, you can pin to v3.1 in your API call (?methodology=v3.1) for as long as we keep it active, which is a minimum of 18 months past supersession. Major version changes ship with a migration guide and a side-by-side scoring window so you can compare grades before flipping.
Yes — the registry GET endpoint is unauthenticated and unmetered. Try curl https://api.verifiedaudiences.com/v1/registry/liveramp.auto_intender.us right now from your terminal. It returns the same JSON your authenticated code would see for that segment. The score endpoint requires a key only because we rate-limit per workspace, not because the data is gated.
Sign up, paste the key, run the curl. 1,000 free scored requests per month — every month, no card required, no sales call, no procurement cycle. Pay-as-you-go after that, or stay free forever if the volume fits.