On this page

AtlasTAP API · v2

Bar Safety Index API

Score any Houston bar, restaurant, or licensed venue on a 0–100 safety index calibrated against 199,293 HPD incidents and the underlying ZIP baseline. Built for proptech, insurance, rideshare, and fintech teams that need an actionable safety signal in a single REST call.

Sub-100ms response · 11,802 venues scored · REST · JSONRefreshed daily

Quick start

A single POST returns a score, tier, and a transparent factor breakdown. No SDK required — anything that can speak HTTPS can call the API.

Request

curl -X POST https://atlastap.deltakinetics.io/api/v1/safety-score \
  -H "Content-Type: application/json" \
  -H "X-AtlasTAP-Key: sk_live_your_key_here" \
  -d '{"address": "1600 Smith St, Houston, TX 77002"}'
Replace sk_live_your_key_here with your provisioned key.

Response (200)

{
  "score": 87,
  "tier": "B",
  "tabc_id": "8c4f...e21a",
  "trade_name": "Example Bar & Grill",
  "venue_category": "bar_premise",
  "address_matched": "1600 Smith St, Houston, TX 77002",
  "zip": "77002",
  "latitude": 29.7589,
  "longitude": -95.3677,
  "distance_m": 12.4,
  "factor_breakdown": {
    "bar_premise_at_address_365d": 0,
    "excess_violent_150m_365d": -1.2,
    "excess_assault_150m_365d": -0.8,
    "excess_nighttime_150m_180d": 0.3,
    "zip_baseline": 78
  },
  "computed_at": "2026-04-19T03:07:00.000Z",
  "version": "v2",
  "api_credits_remaining": 9999
}
Pretty-printed JSON. Empty/derived fields omitted for clarity.
score

0–100. Higher is safer. Calibrated against incident rate, not subjective.

tier

Letter grade A–E. Matches the buckets used in our consumer map.

factor_breakdown

Five normalized contributions that produced the score.

zip

USPS ZIP for the matched venue (basis for the ZIP baseline).

computed_at

When the score was last recomputed (daily run, 3:07 AM CT).

Authentication

All requests must include the X-AtlasTAP-Key header. Keys begin with sk_live_ and are provisioned manually after a short evaluation conversation — typically within one business day.

curl https://atlastap.deltakinetics.io/api/v1/safety-score \
  -H "X-AtlasTAP-Key: sk_live_your_key_here"

Safe to do

  • • Store the key in a server-side env var (e.g. ATLASTAP_API_KEY).
  • • Rotate by emailing api@deltakinetics.com — we’ll re-issue and grace the old key for 24h.
  • • Send hashed IP context — we never see raw IPs.

Don’t

  • • Embed the key in a browser bundle, mobile app, or extension.
  • • Share keys across products — request one per environment.
  • • Treat a 401 as a transient error. Stop and re-auth.

Need a key? Jump to Request a key.

Endpoints

Five endpoints in one resource. All responses are JSON and include your remaining credit balance under api_credits_remaining.

POSTGET/api/v1/safety-score

Resolve an address (or TABC id) to a single venue safety score.

Parameters

ParameterInTypeRequiredDescription
addressbody / querystringPOST: required · GET: optionalFree-form street address. Minimum 5 characters; must geocode within 50m of a scored TABC venue.
tabc_idquery (GET only)uuidGET: optionalDirect lookup by stable TABC venue id. Skips geocoding entirely.

Request

# By address (POST)
curl -X POST https://atlastap.deltakinetics.io/api/v1/safety-score \
  -H "X-AtlasTAP-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"address": "1600 Smith St, Houston, TX 77002"}'

# By TABC id (GET)
curl https://atlastap.deltakinetics.io/api/v1/safety-score?tabc_id=8c4f...e21a \
  -H "X-AtlasTAP-Key: sk_live_..."

Response (200)

{
  "score": 87,
  "tier": "B",
  "tabc_id": "8c4f...e21a",
  "trade_name": "Example Bar & Grill",
  "venue_category": "bar_premise",
  "address_matched": "1600 Smith St, Houston, TX 77002",
  "zip": "77002",
  "latitude": 29.7589,
  "longitude": -95.3677,
  "distance_m": 12.4,
  "factor_breakdown": {
    "bar_premise_at_address_365d": 0,
    "excess_violent_150m_365d": -1.2,
    "excess_assault_150m_365d": -0.8,
    "excess_nighttime_150m_180d": 0.3,
    "zip_baseline": 78
  },
  "computed_at": "2026-04-19T03:07:00.000Z",
  "version": "v2",
  "api_credits_remaining": 9999
}
400 bad_request401 missing_key / invalid_key402 credits_exhausted403 key_inactive404 no_venue_found / tabc_not_found429 rate_limited

Credits: 1 credit per call

POST/api/v1/safety-score/batch

Score up to 100 addresses in a single round trip.

Parameters

ParameterInTypeRequiredDescription
addressesbodystring[]requiredArray of 1–100 address strings. Each must be ≥5 characters. The full batch is preflight-checked against your remaining credit balance before any lookup runs.

Request

curl -X POST https://atlastap.deltakinetics.io/api/v1/safety-score/batch \
  -H "X-AtlasTAP-Key: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "addresses": [
      "1600 Smith St, Houston, TX 77002",
      "2700 Polk St, Houston, TX 77003",
      "1400 Westheimer Rd, Houston, TX 77006"
    ]
  }'

Response (200)

{
  "batch_size": 3,
  "credits_consumed": 3,
  "api_credits_remaining": 9997,
  "results": [
    {
      "ok": true,
      "address_query": "1600 Smith St, Houston, TX 77002",
      "score": 87,
      "tier": "B",
      "tabc_id": "8c4f...e21a",
      "trade_name": "Example Bar & Grill",
      "venue_category": "bar_premise",
      "address_matched": "1600 Smith St, Houston, TX 77002",
      "zip": "77002",
      "distance_m": 12.4,
      "factor_breakdown": { "bar_premise_at_address_365d": 0, "excess_violent_150m_365d": -1.2, "excess_assault_150m_365d": -0.8, "excess_nighttime_150m_180d": 0.3, "zip_baseline": 78 },
      "computed_at": "2026-04-19T03:07:00.000Z"
    },
    { "ok": false, "address_query": "2700 Polk St, Houston, TX 77003", "error": "no_venue_found" },
    { "ok": true, "address_query": "1400 Westheimer Rd, Houston, TX 77006", "score": 72, "tier": "C", "...": "..." }
  ]
}
Each result has `ok: true|false`. Failed lookups don’t consume a credit beyond the preflight.
400 bad_request / batch_too_large401 missing_key / invalid_key402 credits_exhausted429 rate_limited

Credits: 1 credit per address (preflight reserves credits before fan-out)

GET/api/v1/safety-score/zip/{zip}

ZIP-level aggregate: tier distribution, top-5 safest, top-5 riskiest.

Parameters

ParameterInTypeRequiredDescription
zippathstringrequired5-digit US ZIP code. Non-Houston ZIPs return n_scored: 0 with an empty distribution.

Request

curl https://atlastap.deltakinetics.io/api/v1/safety-score/zip/77002 \
  -H "X-AtlasTAP-Key: sk_live_..."

Response (200)

{
  "zip": "77002",
  "n_venues_in_zip": 312,
  "n_scored": 184,
  "avg_score": 76.4,
  "tier_distribution": { "A": 14, "B": 71, "C": 62, "D": 28, "E": 9 },
  "top_safest": [
    { "tabc_id": "...", "score": 96, "tier": "A", "trade_name": "Example Hotel Bar" }
  ],
  "top_riskiest": [
    { "tabc_id": "...", "score": 41, "tier": "E", "trade_name": "Example Late-Night Club" }
  ],
  "api_credits_remaining": 9996
}
400 bad_request (non-numeric ZIP)401 missing_key / invalid_key402 credits_exhausted429 rate_limited500 db_error

Credits: 1 credit per call

GET/api/v1/health

Unauthenticated liveness check. Returns the most recent compute time so clients can detect staleness.

Request

curl https://atlastap.deltakinetics.io/api/v1/health

Response (200)

{
  "status": "ok",
  "version": "v2",
  "last_compute": "2026-04-19T03:07:00.000Z"
}
Status is ok | degraded. last_compute null means a fresh DB without scores yet.
500 degraded (DB unreachable)

Credits: Free · no key required

Scoring methodology

Version 2 (current) combines five normalized factors into a single 0–100 score, rebased so a “neutral” venue in a median-risk ZIP scores near 75. The factor weights are stable across daily compute runs so your downstream consumers see meaningful deltas, not numerical noise.

bar_premise_at_address_365d
Bar premise activity

Whether the matched location has been a bar premise in the last 365 days. Anchors the venue-type prior — a sushi counter and a 2 AM club shouldn’t share a baseline.

excess_violent_150m_365d
Excess violent crime

HPD violent incidents within 150m, normalized against the ZIP baseline rate over a rolling 365-day window. Negative values mean safer-than-baseline.

excess_assault_150m_365d
Excess assault

Same shape as above, scoped to assault. Separated because assault correlates more tightly with venue-level operational decisions (security, ID checks, last call).

excess_nighttime_150m_180d
Excess nighttime activity

Incidents between 22:00–04:00 within 150m, last 180 days. Captures the late-night risk surface most ZIP-level scores miss.

zip_baseline
ZIP baseline

Rolling 12-month neighborhood safety prior, expressed in the same 0–100 scale. Pulls each venue toward its environment when local signal is sparse.

Tier thresholds

TierScore rangeRead as
A≥ 90Top decile. Suitable for all clientele, including late-night.
B75 – 89Solid. Above-baseline safety with no recent red flags.
C60 – 74Average. Comparable to the surrounding ZIP.
D45 – 59Below average. Warrants a closer look before partnering.
E< 45High caution. Bottom decile against ZIP baseline.
Update frequency

Recomputed daily at 3:07 AM CT against the prior 24h of HPD incident data and the latest TABC license snapshot. Cached responses always return the most recent compute.

Academic basis

Factor structure follows the routine activities literature (Cohen & Felson, 1979) and venue-level alcohol-density work from Pridemore & Grubesic. ZIP baseline rebasing is a standard empirical Bayes shrinkage to handle low-volume tracts.

Rate limits

Limits are enforced per key, per minute. Hitting the ceiling returns 429 rate_limited with a human-readable retry hint — back off, then retry.

PlanLookups / monthRate limitSLA
Free100 lookups / month10 req/minBest-effort
Pay-as-you-go10,000 lookups / month soft cap60 req/min99% monthly
Subscription100,000 lookups / month included300 req/min99.5% monthly
EnterpriseUnlimited / negotiated1,000+ req/min99.9% with credits

Pricing

Pick a plan that matches your call volume. Annual contracts available on Subscription and Enterprise — email api@deltakinetics.com for a quote.

Free
$0
Evaluation only
  • Volume: 100 lookups / month
  • Rate: 10 req/min
  • SLA: Best-effort
  • Support: Community email
Request access
Pay-as-you-go
$0.10 / lookup
No commitment
  • Volume: 10,000 lookups / month soft cap
  • Rate: 60 req/min
  • SLA: 99% monthly
  • Support: Email · 2 business days
Request access
Most popular
Subscription
$500 / month
or $5,000 / year
  • Volume: 100,000 lookups / month included
  • Rate: 300 req/min
  • SLA: 99.5% monthly
  • Support: Email + Slack · next business day
Or request access by email
Enterprise
Custom
Annual contract
  • Volume: Unlimited / negotiated
  • Rate: 1,000+ req/min
  • SLA: 99.9% with credits
  • Support: Dedicated · 4-hour response
Request access

Error reference

Errors always return a JSON body of the shape { "error": "<code>", "message": "<human>" } plus the HTTP status. Build your retry/handling on the error field — message text may be tuned over time.

CodeStatusMeaningBest practice
missing_key401No X-AtlasTAP-Key header on the request.Add the header on every call. The key prefix is sk_live_…
invalid_key401Key not recognised, or the prefix is wrong.Re-copy from your provisioning email. Keys begin with sk_.
key_inactive403Key was rotated, suspended, or revoked.Email api@deltakinetics.com — we’ll reissue and migrate usage.
credits_exhausted402No credits remaining on this key.Top up via deltakinetics.io/billing or upgrade your plan.
rate_limited429Too many requests in the last 60s for this key.Back off and retry; respect the per-plan req/min ceiling.
bad_request400Required parameter missing or malformed.Address strings must be ≥5 chars; ZIPs must be exactly 5 digits.
no_venue_found404Address parsed but no scored TABC venue within 50m.Confirm the address is a Houston bar / restaurant. Treat as a no-match in your UI.
tabc_not_found404tabc_id query param has no matching scored venue.Re-fetch the id from a recent /safety-score response.
batch_too_large400Batch endpoint received more than 100 addresses.Chunk the request client-side; sequence chunks within the rate limit.

FAQ

How fresh is the data?

The full venue_safety_scores table is recomputed daily at 3:07 AM CT against the prior 24h of HPD incident data and the latest TABC license snapshot. The /api/v1/health endpoint returns last_compute so you can show staleness in your own UI.

What coverage do you have today?

Greater Houston: 11,802 TABC venues mapped, 3,407 actively scored, 199,293 HPD incidents in the rolling window. Outside the Houston metro returns no_venue_found — Austin, Dallas, and San Antonio are on the 2026 roadmap.

Can I bulk-score my entire portfolio?

Yes. /api/v1/safety-score/batch accepts up to 100 addresses per call and runs them concurrently. Chunk larger portfolios client-side and pace the chunks against your per-minute rate limit. Subscription and Enterprise customers can request a one-off CSV-style backfill via api@deltakinetics.com.

How do I integrate with downstream insurance / underwriting workflows?

The score, tier, and factor_breakdown are deliberately stable across compute runs so they can drive automated rules. Most teams consume `score` for tiering, `factor_breakdown` for a defensible explanation, and `computed_at` for audit. Talk to us before you wire it into a binding decision — we’ll co-design thresholds with you.

11,802
venues mapped
199,293
HPD incidents
3,407
venues scored
Daily 3:07 AM CT
compute

Request an API key

We provision keys manually for now — usually within one business day. Tell us what you’re building and the volume you expect, and we’ll provision the right tier (free eval up through Enterprise) and email the key directly.

  • • Free evaluation tier: 100 lookups/month, no card required.
  • • 24h turnaround for Subscription and Enterprise quotes.
  • • Looking at a one-off pull for a specific portfolio? See Pulse Reports — those don’t require an API integration.