API · preview Charter beta keys by invite · Public free tier launches Q3 2026 · Free for buyers, free for sellers
v1 · methodology v3.1 · base url api.verifiedaudiences.com
Charter beta · Public free tier launches Q3 2026

One HTTP call. One letter back.

The VRA API returns a single grade — A through F — and the underlying signals for any audience segment in the registry, or for any audience you score privately. Free for buyers, free for sellers, and the response is identical to what you can replicate from the methodology.

REST · JSON
Protocol
~84ms p99
Target latency
$0 / month
Charter beta
curl · score one segment
Live preview
$ curl https://api.verifiedaudiences.com/v1/score \
  -H 'Authorization: Bearer $VRA_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"segment_id": "liveramp.auto_intender.us"}'

# → 200 OK
{
  "segment_id": "liveramp.auto_intender.us",
  "grade": "A",
  "composite": 98.4,
  "signals": {
    // primary · 40%
    "ip_fanout": 1.4,
    "non_residential": 0.012,
    "privacy_relay": 0.004,
    "freshness_days": 7,
    "geo_precision_miles": 0.42
  },
  "methodology": "v3.1",
  "reviewed_at": "2026-04-22T14:22:00Z"
}
The endpoints

Three endpoints. That's the whole API.

Look up a segment, score one (or upload your own), and subscribe to grade changes. Same payload across all three. Anything you can do in the dashboard, you can do with one HTTP call.

GET No auth · Public
/v1/registry/{segment_id}

Look up a known segment.

Returns the current grade, composite, signals, and 90-day trend for any segment in the public registry. Unauthenticated, unmetered — try it from your terminal right now.

Cost
Free
Auth
None
POST Beta · invite
/v1/score

Score by ID or match-file.

Pass a segment_id to score a registry entry, or upload a hashed match-file to score your own audience. Same response schema either way.

Beta key
Free · invite
Latency
~84ms p99
WEBHOOK Subscribe · invite
/v1/webhooks/grade-change

Get notified on downgrades.

Signed POST to your endpoint within 30 seconds of any grade change for segments you subscribe to. Old grade, new grade, the signal that triggered it, and a re-validatable signature.

Cost
Free
SLA
< 30 sec
Wire it up

Three lines in your language of choice.

No SDK to install at launch — just standard HTTP and JSON. The free Developer tier is enough to prototype, evaluate, and ship a side project. Production volumes get a metered tier when public launch ships in Q3.

$ curl -X POST https://api.verifiedaudiences.com/v1/score \
  -H "Authorization: Bearer $VRA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"segment_id": "experian.mosaic.established_hh"}'
// Node 18+ (built-in fetch)
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: "experian.mosaic.established_hh" }),
});
const { grade, composite, signals } = await res.json();
console.log(`Grade: ${grade} (${composite})`); // → Grade: A (96.1)
import os, requests

r = requests.post(
    "https://api.verifiedaudiences.com/v1/score",
    headers={"Authorization": f"Bearer {os.environ['VRA_KEY']}"},
    json={"segment_id": "openap.cpg_hh.nlsn"},
    timeout=2.0,
)
data = r.json()
print(f"Grade: {data['grade']} ({data['composite']})")
# → Grade: B (87.2)
package main

import (
    "bytes"
    "encoding/json"
    "net/http"
    "os"
)

type Score struct {
    Grade     string  `json:"grade"`
    Composite float64 `json:"composite"`
}

func Score(id string) (*Score, error) {
    body, _ := json.Marshal(map[string]string{"segment_id": id})
    req, _ := http.NewRequest("POST",
        "https://api.verifiedaudiences.com/v1/score", bytes.NewReader(body))
    req.Header.Set("Authorization", "Bearer "+os.Getenv("VRA_KEY"))
    res, err := http.DefaultClient.Do(req)
    if err != nil { return nil, err }
    defer res.Body.Close()
    s := &Score{}
    json.NewDecoder(res.Body).Decode(s)
    return s, nil
}

Webhook payload (signed)

POST /your-endpoint
X-VRA-Signature: v1=...
{
  "event": "grade_change",
  "segment_id": "lotame.auto_2554",
  "old_grade": "B",
  "new_grade": "C",
  "trigger": "ip_fanout > 4.0 (proxy contamination)",
  "changed_at": "2026-04-15T11:02:18Z"
}

Private audit (OPRF · Apache 2.0)

$ npm install @vra/audit-client
$ vra audit \
    --input ./your-ips.csv \
    --segment "my-audience"

# Local OPRF · IPs never leave your VPC
# → grade: B  composite: 84.6  matched: 962,431
The response

Same shape, every endpoint.

Whether you score a known segment, upload a match-file, or look up the registry, you get the same fields back. Methodology version is always tagged so you know exactly which v3.x pipeline produced the result.

Score response · v1
Stable
{
  "segment_id": "liveramp.auto_intender.us",
  "grade": "A",
  "composite": 98.4,
  "signals": {
    // primary · 40%
    "ip_fanout": 1.4,
    "non_residential": 0.012,
    "privacy_relay": 0.004,
    "freshness_days": 7,
    "geo_precision_miles": 0.42
  },
  "trend_90d": "+1 grade",
  "methodology": "v3.1",
  "reviewed_at": "2026-04-22T14:22:00Z"
}
  • graderequired A, B, C, D, or F. The composite letter as defined in methodology v3.1. string
  • composite 0–100 weighted score behind the letter, useful for fine-grained sorting. number
  • signals.ip_fanoutprimary Median distinct identity fingerprints observed per IP per day. Real households: 1–3. Polluted IPs: 20+. Weight 40%. number
  • signals.non_residential 0–1 share from datacenter / hosting / commercial IP space. Weight 20%. number
  • signals.privacy_relay 0–1 share routed through iCloud Private Relay, VPNs, or anonymizers. Weight 15%. number
  • signals.freshness_days Days since the underlying signal was last observed. Weight 15%. int
  • signals.geo_precision_miles Pin-radius accuracy of the IP geolocation, in miles. Catches CGNAT and aggregation-point residue. Weight 10%. number
  • methodology Version of the published methodology used. Immutable per version. string

Free for buyers. Free for sellers. No card to start.

Charter beta keys are issued by invite during pre-launch. At public launch in Q3 2026, the Developer tier is open to anyone — buyers and sellers alike — with monthly free scored requests, full payload, and webhooks. Same methodology across every tier; what changes is volume and SLA.

$0
If you're aBuyer or agency
$0
If you're aAudience seller
★ Charter beta · by invite

Wire it up in sixty seconds.

Tell us which side of the trade you're on and we'll send a beta key, the v3.1 methodology working draft, and a sandbox workspace with deterministic fixtures. Reply within one business day.