API status: operational · v1 stable · p99 84ms (last 24h)
VRA API · Public methodology v3.1 · No card required
Public API · Free tier · No sales call

Score any audience in one HTTP request.

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.

$ curl https://api.verifiedaudiences.com/v1/score -H "Authorization: Bearer $VRA_KEY" -d '{"segment_id":"liveramp.auto_intender.us"}'
POST /v1/score
200 OK · 87ms
Request
POST /v1/score
Authorization: Bearer vra_live_•••••3f9
Content-Type: application/json

{
  "segment_id": "liveramp.auto_intender.us",
  "region": "US"
}
Response 87ms
{
  "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"
}
A VRA Certified · No. VRA-04-2241-A · 2026
84ms
p99 latency
Bid-time ready
1,000/mo
Free tier
No card required
$0
Supplier funding
Today, ever, by charter
v3.1
Public methodology
Reproducible · peer-reviewed
Three endpoints

A score, a lookup, and a webhook. That's the whole API.

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.

— 01
POST/v1/score

Score any audience.

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.

Method
POST · JSON
Avg latency
62ms · p99 84ms
Cost
1 credit · ¢0.01
Auth
Bearer token
See the call →
— 02
GET/v1/registry/{id}

Look up a known supplier.

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.

Method
GET
Avg latency
22ms
Cost
Free · unmetered
Auth
Optional
Browse the registry →
— 03
POST/v1/webhooks

Subscribe to downgrades.

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.

Method
POST · register
Delivery
HMAC-signed
Cost
Free · all tiers
Auth
Bearer token
Wire it up →
Quick start

Three steps. Five minutes. Live grade.

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.

i.

Sign up. Get a key.

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.

ii.

Make your first call.

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.

iii.

Wire it into your stack.

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.

iv.

Stay free, or pay as you go.

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
}
tip › Sandbox keys (vra_test_*) return deterministic fixtures and don't count against your free quota. Production keys (vra_live_*) hit real benchmark data.
What the score means

A grade is only as good as the document behind it.

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.

i.

Benchmarked, not asserted.

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.

ii.

Five composite signals, one letter.

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.

iii.

Reissued quarterly. Watched continuously.

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.

iv.

Independent, by charter.

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.

Response schema · /v1/score

Every field, documented.

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.

grade Single-letter composite. One of A, B, C, D, F. string
composite Continuous 0–100 score behind the letter. number
signals All five inputs to the grade, individually scored. object
certified True for grades A and B. Authorizes the VRA mark. boolean
last_reviewed ISO date of most recent reassessment. string
methodology Pipeline version that produced this grade. string
Full reference docs →
What your API calls return

Every rated segment, queryable.

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.

GET /v1/registry · Live
All A & B Downgrades 90d Unrated
Grade Supplier · Segment Composite Δ 90d Last reviewed
A
Liveramp liveramp.auto_intender.us · verified
98.4 · IQ ▲ +1 grade 04.22.26 JSON →
A
Experian experian.mosaic.established_hh
96.1 · IQ — no change 04.18.26 JSON →
B
OpenAP openap.cpg_hh.nlsn_matched
87.2 · IQ — no change 04.18.26 JSON →
C
Lotame lotame.auto_intender.25_54
73.5 · IQ ▼ −1 grade 04.15.26 JSON →
D
Vendor X vendor_x.hhi_250k_plus
52.1 · IQ ▼ −2 grades 04.11.26 JSON →
—
[Unnamed Vendor] Declined assessment · listed for transparency
— · — — n/a — Why? →
1,284 segments · 47 suppliers · last reissue 04.30.26
Try a registry GET in your terminal →
Pricing

Free to start. Pay-as-you-go. No procurement cycle.

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.

Developer
$0 / mo
Everything you need to prototype, ship a side project, or evaluate the API for a larger buy.
  • 1,000 scored requests / month
  • Unmetered registry GETs
  • Full v3.1 payload — no field gating
  • Sandbox keys, deterministic fixtures
  • Webhooks for downgrade alerts
  • Community support
Get a free key
Scale
Custom
DSPs, ad-tech infrastructure, and enterprise buy-side teams scoring at impression rate. Annual contract.
  • 10M+ req/month, committed
  • Negotiated rate, billed monthly
  • p99 latency SLA · 60ms
  • Private routing · dedicated capacity
  • Solutions engineer · Slack channel
  • SOC 2 · DPA · custom terms
Talk to us
Common questions

For the people writing the integration.

Is the API actually free to start, or is there a card on file?

+

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.

How fast is the API at bid time?

+

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.

Are there official SDKs?

+

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.

Can I score a custom audience that isn't in the registry?

+

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.

How does authentication work?

+

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.

What if a grade changes after I've already used it in a buy?

+

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.

Will the methodology change under me?

+

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.

Can I see real production traffic before signing up?

+

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.

Ship it

Your first grade in five minutes.

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.

Free tier · 1,000 req/mo · ¢0.01/score after that · Volume tiers from 1M req/mo