Objects
Every object the API takes or gives back, with its fields.
LonLat
A location as [longitude, latitude], in that order, in standard GPS coordinates (WGS84). Longitude comes first, so Boston is [-71.06, 42.36].
Type: array of any.
GeographyLevel
A kind of official area:
- state
- county
- tract: a census tract, a neighborhood-sized area of about 4,000 people
- block_group: a smaller piece of a tract, usually 600 to 3,000 people
- place: a city or town
- zcta: a ZIP code area (the Census Bureau's version of a ZIP code)
- congressional_district
- state_legislative_district
Type: string.
TopicId
A topic you can ask for:
- demographics: Demographics (population, age, households, education)
- income: Income & poverty
- housing: Housing (homes, vacancy, owners and renters, home values, rents)
- labor: Labor market (jobs located in the area, hiring, unemployment and residents' work)
- businesses: Businesses & amenities (places such as grocery stores, bank branches, workplaces, public facilities)
- health: Health (health outcomes, insurance, Medicare, care facilities, shortage areas, food access)
- environment: Environment & hazards (natural hazards, flood zones, regulated sites, drinking water, oil and gas wells)
- incentives: Tax incentives (Opportunity Zones and other areas where tax incentives apply)
- transportation: Transportation (traffic, transit, EV charging, commuting, fatal crashes)
- spending: Consumer spending (what households spend a year, estimated from their incomes)
- timeuse: Time use (how residents spend their week, and how many people are present at each hour)
- education: Education (public schools and colleges)
- broadband: Broadband (home and business internet service offered, its speeds and providers)
Type: string.
Topic
A subject you can ask about, and the groups of measures in it.
| Field | Type | What it is |
|---|---|---|
idrequired | TopicId | A topic you can ask for:
|
labelrequired | string | The topic's name in plain words. |
description | string | What the topic covers. |
groupsrequired | array of string | The groups in this topic. You pay one credit per group per place. |
availablerequired | boolean | False until this topic's data is in a published release. |
PointGeometry
A single location. Its numbers come from the official area it falls in.
| Field | Type | What it is |
|---|---|---|
typerequired | "Point" | |
coordinatesrequired | LonLat | A location as [longitude, latitude], in that order, in standard GPS coordinates (WGS84). Longitude comes first, so Boston is [-71.06, 42.36]. |
BufferGeometry
A radius, meaning everywhere within a set distance of a point, measured in a straight line.
| Field | Type | What it is |
|---|---|---|
typerequired | "buffer" | |
centerrequired | LonLat | A location as [longitude, latitude], in that order, in standard GPS coordinates (WGS84). Longitude comes first, so Boston is [-71.06, 42.36]. |
radiusrequired | number | How far out to go. Up to 50 miles (80 km). |
unit | string | mi (miles), km (kilometers) or m (meters). Default |
IsochroneGeometry
A drive-time area (also called an isochrone), meaning everywhere you can reach from a point within a set number of minutes by car, on foot or by bike, without traffic delays. The point must be within 5 km (3 miles) of a road. Drawing one costs 2 credits.
| Field | Type | What it is |
|---|---|---|
typerequired | "isochrone" | |
centerrequired | LonLat | A location as [longitude, latitude], in that order, in standard GPS coordinates (WGS84). Longitude comes first, so Boston is [-71.06, 42.36]. |
moderequired | string | How you travel: drive, walk or bike. |
minutesrequired | integer | Travel time, 1 to 60 minutes. Walking and biking go up to 30. |
GeoJSONPolygon
Your own outline, written as GeoJSON (the standard format for map shapes). Use Polygon for one shape or MultiPolygon for a shape made of several separate pieces. Coordinates are [longitude, latitude]. Up to 10,000 corner points and 25,000 square kilometers.
| Field | Type | What it is |
|---|---|---|
typerequired | string | Polygon (one shape) or MultiPolygon (several separate pieces). |
coordinatesrequired | array of any | The corner points of the outline, as [longitude, latitude] pairs. |
GeoidGeometry
An official area, given by its GEOID (the ID number the government gives each area). Find one with /geographies/lookup.
| Field | Type | What it is |
|---|---|---|
typerequired | "geoid" | |
geoidrequired | string | The area's official ID number. |
Geometry
The place, in any one of these forms.
Type: PointGeometry or BufferGeometry or IsochroneGeometry or GeoJSONPolygon or GeoidGeometry.
Area
One place you want numbers for.
| Field | Type | What it is |
|---|---|---|
idrequired | string | Your own name or ID for the place. We send it back with the results so you can match them up. |
geometryrequired | Geometry | The place, in any one of these forms. |
EnrichOptions
Optional settings. The defaults suit most uses.
| Field | Type | What it is |
|---|---|---|
release | string | Which data release to use (a frozen snapshot, such as 2026.11 or 2026.11.1). Name one to get the same answer every time; |
base_geography | string | The official areas used as building blocks for your shape: block_group (smaller and more detailed, the default) or tract (larger, with smaller margins of error). Default |
apportionment | string | How we split official areas that your shape only partly covers:
|
benchmarks | array of string | Also return the same numbers for the county, state or whole country, for comparison, plus where your place ranks. The county and state are the ones holding most of your place's people. Rates and medians are ranked against the census tracts in that county, state or country; counts, such as population, aren't ranked, since they grow with the size of your shape. Free. |
include_moe | boolean | Include margins of error (how far the true number could reasonably be from our estimate). On by default. Default |
include_geometry | boolean | Send back the outline of each place, for example to draw it on a map. Default |
repair_geometry | boolean | Try to fix small problems in your outlines, such as an edge that crosses itself, instead of returning an error. Default |
dry_run | boolean | Show what the request would cost without running it. Free. Default |
EnrichRequest
The places you want numbers for, and what to return. Ask for a preset, or at least one of topics, groups, variables or indices.
| Field | Type | What it is |
|---|---|---|
preset | string | A ready-made request by name (GET /presets lists them): its groups and comparisons are added to anything else you ask for. Its suggested area isn't applied for you; send that shape as the place. |
areasrequired | array of Area | The places, up to 100. For more, use /jobs. |
topics | array of TopicId | Whole topics, such as demographics. You pay one credit for each group in the topic, per place. |
groups | array of string | Groups of related measures, such as housing.costs. One credit per group per place. |
variables | array of string | Single measures, such as income.household.median. You pay for the group each one belongs to, once per group per place. |
indices | array of string | Indices (single scores that combine several measures), such as kadrin.economic_momentum. Three credits each per place. |
options | EnrichOptions | Optional settings. The defaults suit most uses. |
Send at least one of preset, topics, groups, variables or indices.
Preset
A ready-made request.
| Field | Type | What it is |
|---|---|---|
idrequired | string | Ask for it by this name, as |
labelrequired | string | Its name in plain words. |
description | string | What it's for. |
groupsrequired | array of object | The groups it includes, which is what you pay for. |
benchmarks | array of string | The comparisons it adds (free). One of |
around | object | The area it suggests around each point, as /jobs' |
credits_per_placerequired | integer | What each place costs: one credit per group, plus 2 if the suggested area is a drive-time area. |
Value
One number, with everything you need to judge how far to trust it.
| Field | Type | What it is |
|---|---|---|
valuerequired | number or null | The number. Empty when there isn't enough data; a warning explains why. |
moe | number or null | Margin of error, meaning how far the true number could reasonably be from the estimate. The true value is very likely (90% of the time) between value minus moe and value plus moe. |
ci | array of number or null | For modeled numbers (estimated by a statistical model rather than a survey), the range the true value very likely falls in, as [low, high]. |
unitrequired | string | What the number counts or measures, such as people, dollars or percent. |
aggregationrequired | string | How the number was combined for your shape:
|
hours | array of object | For people present by hour: the number at each hour of an average day, starting with midnight to 1 am. The value above is the day's average. |
resolution | any | The smallest kind of area this number is published for. If that's bigger than your shape, a warning says so. |
sourcerequired | string | Where the number comes from, such as acs5 (the Census Bureau's American Community Survey, 5-year estimates). |
vintagerequired | string | The years the number describes, such as 2020-2024; for building and drilling permits the months, such as 2025-10 to 2026-09; for oil and gas wells the date the state's records describe, such as 2026-10-20, or the earliest and latest where your place reaches states with different dates (2025-07-22 to 2026-10-20). |
coverage | number | For numbers we have only for some cities or states, such as building permits, oil and gas wells and layoff notices: the share of your place's homes that are in the cities (or states) whose records we have for this measure (0.2 is 20%). Below 1, the number counts only that part and the warning |
benchmarks | object | The same number for the county, state and country, for comparison. |
percentiles | object of number | Where your place ranks against the census tracts (neighborhood-sized areas) in the county, state or whole country: 80 means higher than 80% of them. Only for rates and medians. |
IndexValue
An index score for one place.
| Field | Type | What it is |
|---|---|---|
value | number or null | The score. |
scale | string | The range the score can take. |
version | string | The version of the index recipe used. |
percentiles | object of number | Where your place ranks against other areas. |
Warning
Something to know before relying on a number.
| Field | Type | What it is |
|---|---|---|
coderequired | string |
|
variable | string | The measure the warning is about. |
messagerequired | string | The warning in plain words. |
AreaResult
The result for one place.
| Field | Type | What it is |
|---|---|---|
idrequired | string | The name or ID you gave the place. |
area | object | Facts about the shape itself. |
values | object of Value | The numbers you asked for, keyed by measure ID, such as income.household.median. |
indices | object of IndexValue | The index scores you asked for, keyed by index ID. |
apportionment | object | How official areas that your shape only partly covers were split. |
warnings | array of Warning | Anything to know before relying on these numbers. |
error | any | If this place failed, what went wrong. Failed places aren't charged. |
Source
Where numbers come from.
| Field | Type | What it is |
|---|---|---|
id | string | A short ID for the source, such as acs5. |
name | string | Its full name, such as U.S. Census Bureau, American Community Survey 5-year estimates. |
vintage | string | The years the data describes. |
license | string | The terms the source publishes its data under. |
url | string | Where to read more about the source. |
EnrichResponse
The results for your places.
| Field | Type | What it is |
|---|---|---|
request_idrequired | string | An ID for this request. Include it if you contact support. |
releaserequired | string | The data release that answered this request. |
credits_usedrequired | integer | Credits this request used. |
resultsrequired | array of AreaResult | One result per place, in the order you sent them. |
sources | array of Source | Every source behind the numbers in this response. |
JobCostEstimate
What a /jobs file would cost, and how we read it, returned instead of a job when options.dry_run is on. Free.
| Field | Type | What it is |
|---|---|---|
dry_runrequired | true | |
estimated_creditsrequired | integer | Total credits the job would use if every place works. |
placesrequired | integer | Rows with a place we can use. |
rowsrequired | integer | Rows in the file. |
file_columns | array of string | Your file's columns, in order. |
place_columns | object of string | Which of your columns we read as what, such as {"lat": "Latitude"}. |
preview | array of array of any | Your file's first rows, as written. |
problems | array of object | The first rows we can't use, and why. |
problem_count | integer | How many rows we can't use. They aren't charged. |
CostEstimate
What a request would cost, returned instead of results when dry_run is on. Free.
| Field | Type | What it is |
|---|---|---|
dry_runrequired | true | |
estimated_creditsrequired | integer | Total credits the request would use. |
breakdown | array of object | The cost for each place. |
Variable
A single measure you can ask for, such as median household income.
| Field | Type | What it is |
|---|---|---|
idrequired | string | The measure's ID. |
labelrequired | string | Its name in plain words. |
topicrequired | TopicId | A topic you can ask for:
|
group | string | The group it belongs to, which is what you pay for. |
typerequired | string | What kind of number it is:
|
unit | string | What it's measured in, such as people, dollars or percent. |
universe | string | Who or what is counted, such as households or people 25 and older. |
aggregation | string | How it's combined for your shape. See |
sourcerequired | string | Where it comes from, such as acs5 (the Census Bureau's American Community Survey). |
version | integer | Goes up by one whenever a change at the source alters what the measure counts, so a measure never changes meaning silently. |
geographies | array of GeographyLevel | The kinds of area it's published for. |
vintages | array of string | The years available. |
license | string | The terms the source publishes it under. |
IndexSummary
An index, meaning a single score that combines several measures.
| Field | Type | What it is |
|---|---|---|
id | string | The index's ID. |
name | string | Its name in plain words. |
version | string | The current version of its recipe. |
scale | string | The range the score can take, such as 0-100. |
finest_geography | any | The smallest kind of area the score is available for. |
IndexMethodology
How an index is built.
JobSpec
What to return for every place in your file. Works like an /enrich request.
| Field | Type | What it is |
|---|---|---|
preset | string | A ready-made request by name (GET /presets lists them): its groups and comparisons are added to anything else you ask for. Its suggested area isn't applied for you; send it as |
topics | array of TopicId | Whole topics. One credit for each group in the topic, per place. |
groups | array of string | Groups of related measures. One credit per group per place. |
variables | array of string | Single measures. You pay for the group each one belongs to. |
indices | array of string | Indices. Three credits each per place. |
options | EnrichOptions | Optional settings. The defaults suit most uses. |
around | object | Turn every point in your file into an area around it: a radius (type buffer) or a drive-, walk- or bike-time area (type isochrone, 2 credits each to draw). Rows that are already shapes or official areas are used as they are. |
output_format | string | The results file: csv (a spreadsheet), geojson (a map file, with each place's outline)
or parquet (a compact data file). One row per place, in the order you sent them, with
columns id, error and error_detail (if the place failed), area_km2, then each measure by
its ID (in a preset's order, if you asked for one) with its margin of error as |
columns | string | The results' column names: ids (measure IDs, such as income.household.median) or labels (plain words with the unit, such as "Median household income (dollars)" and "Median household income (dollars), margin of error"), with the warnings in plain words too. Default |
place_columns | object of string or null | Which of your columns hold what, when their names aren't the usual ones, such as {"lat": "North", "lon": "East"} or {"address": "Where"}. The keys are id, lat, lon, geoid, wkt, address, street, city, state and zip; null for one stops us guessing it. |
keep_columns | boolean | Repeat every column of your file in the results, before ours, so each row reads as your row plus its numbers. A name we'd use that your file already has gets ' (Kadrin)' added. Default |
webhook_url | string | Optional. An https address on the public internet that we call when the job finishes, with only the job's ID and status; fetch the details with GET /jobs/{id} and your key. |
Job
A large upload and its progress.
| Field | Type | What it is |
|---|---|---|
idrequired | string | The job's ID. Use it to check progress. |
statusrequired | string | queued (waiting to start), running, succeeded, failed (nothing is charged) or canceled. |
areas_total | integer | Places in your file. |
areas_done | integer | Places finished so far. |
estimated_credits | integer | Expected cost in credits. |
credits_used | integer | Credits used so far. |
results_url | string or null | Link to download the results once the job has finished (or was canceled part way). Expires after 7 days. |
release | string | The data release the job uses, fixed when it was accepted. |
expires_at | string or null | When the results are deleted. |
file_name | string or null | The name of the file you sent. |
preset | string or null | The preset you asked for, if any. |
created_at | string | When we accepted the job. |
finished_at | string or null | When it finished. |
error | any | If the job failed, what went wrong. |
Problem
What went wrong, in plain words. Failed requests are never charged.
| Field | Type | What it is |
|---|---|---|
typerequired | string | A link to more help on this kind of error, in the docs: https://docs.kadrindata.com/errors# |
titlerequired | string | A short summary of the error. |
statusrequired | integer | The HTTP status code, a standard number for the kind of error, such as 400 (something in the request needs fixing). |
coderequired | string |
|
detail | string | What happened and what to do next. |
area_id | string | Which place failed, if the error is about one place. |
request_id | string | An ID for this request. Include it if you contact support. |