GISFinder

Developers

API reference

Official government offices and resources for property, land and GIS questions across the United States. Version 1.0.0, base URL https://api.gisfinder.com/v1.

Generated from the OpenAPI 3.1 document. Start with the overview for keys, limits, paging and errors.

GET /jurisdictions/resolve

Jurisdiction chain and responsible offices for a point, an address or a place

Give exactly one of: lat and lon; address (free text, geocoded by GISFinder, cached for a day); or place and state (a county, city, town or township name and a two-letter state code). Returns the state, county, county subdivision and place from largest to smallest, and for each function (assessment, tax_collection, recording, zoning, permits, gis) the body that performs it, its office and its resources. An address or place name that matches several candidates answers 409 with the candidates in choices; ask again with a coordinate from the list or a more specific name.

ParameterInTypeAbout
X-Request-IdheaderstringEchoed as request_id; 8 to 64 characters of letters, digits, dot, underscore or hyphen. Otherwise GISFinder makes one.
If-None-MatchheaderstringAn ETag from an earlier response; a match answers 304 without a body
latquerynumber (from -90, to 90)Latitude, with lon
lonquerynumber (from -180, to 180)Longitude, with lat
addressquerystring (up to 200 characters)A street address, for example 350 S 5th St, Minneapolis, MN
placequerystring (up to 100 characters)A county, city, town or township name, with state
statequeryStateCodeTwo-letter state or territory code, with place

Responses:

  • 200 Resolved: envelope with data ResolveResult
  • 304 The data has not changed since the ETag in If-None-Match
  • 400 RFC 9457 problem: Problem
  • 401 RFC 9457 problem: Problem
  • 404 RFC 9457 problem: Problem
  • 409 RFC 9457 problem: Problem
  • 429 Too many requests; wait Retry-After seconds: Problem
  • 503 RFC 9457 problem: Problem

GET /resources

Ranked official resources for a place or a point

Give jurisdiction_id or lat and lon. With a topic, returns the resources for that topic from the place up to its state and the national level, the place's own first. Without a topic (only with jurisdiction_id), returns the place's own resources. The order is the same for every caller.

ParameterInTypeAbout
X-Request-IdheaderstringEchoed as request_id; 8 to 64 characters of letters, digits, dot, underscore or hyphen. Otherwise GISFinder makes one.
If-None-MatchheaderstringAn ETag from an earlier response; a match answers 304 without a body
jurisdiction_idqueryJurisdictionId
latquerynumber (from -90, to 90)
lonquerynumber (from -180, to 180)
topicqueryTopicRequired with lat and lon
limitqueryinteger (from 1, to 100, default 50)Items per page
cursorquerystring (up to 200 characters)The next_cursor of the previous page, unchanged. Only valid with the same other parameters.

Responses:

  • 200 Resources, best first: envelope with data ResourcePage
  • 304 The data has not changed since the ETag in If-None-Match
  • 400 RFC 9457 problem: Problem
  • 401 RFC 9457 problem: Problem
  • 404 RFC 9457 problem: Problem
  • 429 Too many requests; wait Retry-After seconds: Problem

GET /places/{jurisdiction_id}

Full directory for one place

The place, its chain, its offices, the responsible body per function, and its own resources (paged).

ParameterInTypeAbout
X-Request-IdheaderstringEchoed as request_id; 8 to 64 characters of letters, digits, dot, underscore or hyphen. Otherwise GISFinder makes one.
If-None-MatchheaderstringAn ETag from an earlier response; a match answers 304 without a body
jurisdiction_id requiredpathJurisdictionId
limitqueryinteger (from 1, to 100, default 50)Items per page
cursorquerystring (up to 200 characters)The next_cursor of the previous page, unchanged. Only valid with the same other parameters.

Responses:

  • 200 The place directory: envelope with data PlacePage
  • 304 The data has not changed since the ETag in If-None-Match
  • 400 RFC 9457 problem: Problem
  • 401 RFC 9457 problem: Problem
  • 404 RFC 9457 problem: Problem
  • 429 Too many requests; wait Retry-After seconds: Problem

GET /topics

The topic vocabulary

Every topic with a plain description, the functions it belongs to, and its GISFinder page. Topics are added, never renamed.

ParameterInTypeAbout
X-Request-IdheaderstringEchoed as request_id; 8 to 64 characters of letters, digits, dot, underscore or hyphen. Otherwise GISFinder makes one.
If-None-MatchheaderstringAn ETag from an earlier response; a match answers 304 without a body

Responses:

  • 200 Topics: envelope with data TopicList
  • 304 The data has not changed since the ETag in If-None-Match
  • 401 RFC 9457 problem: Problem
  • 429 Too many requests; wait Retry-After seconds: Problem

GET /guides/{topic}

Plain-language guide for a topic, with a state's rules

The GISFinder guide text for the topic as plain text sections, and with state the state's own rules, for example who assesses property there and at which level of government. Topics without a guide return the topic description and the state's rules. Links to outside sources are on the guide page (page_url).

ParameterInTypeAbout
X-Request-IdheaderstringEchoed as request_id; 8 to 64 characters of letters, digits, dot, underscore or hyphen. Otherwise GISFinder makes one.
If-None-MatchheaderstringAn ETag from an earlier response; a match answers 304 without a body
topic requiredpathTopic
statequeryStateCode

Responses:

  • 200 Guide: envelope with data Guide
  • 304 The data has not changed since the ETag in If-None-Match
  • 400 RFC 9457 problem: Problem
  • 401 RFC 9457 problem: Problem
  • 404 RFC 9457 problem: Problem
  • 429 Too many requests; wait Retry-After seconds: Problem

GET /screening

Screening facts for a point

Flood zone (FEMA National Flood Hazard Layer), wetlands (USFWS National Wetlands Inventory), soil (USDA SSURGO), elevation (USGS 3D Elevation Program), Minnesota shoreland (DNR Public Waters Inventory, Minnesota only) and the county's EPA radon zone. Every fact is screening for the exact point only, never an official determination, and names the office that decides. A fact that could not be checked has status unknown; try again later.

ParameterInTypeAbout
X-Request-IdheaderstringEchoed as request_id; 8 to 64 characters of letters, digits, dot, underscore or hyphen. Otherwise GISFinder makes one.
If-None-MatchheaderstringAn ETag from an earlier response; a match answers 304 without a body
lat requiredquerynumber (from -90, to 90)
lon requiredquerynumber (from -180, to 180)

Responses:

  • 200 Screening facts: envelope with data Screening
  • 304 The data has not changed since the ETag in If-None-Match
  • 400 RFC 9457 problem: Problem
  • 401 RFC 9457 problem: Problem
  • 404 RFC 9457 problem: Problem
  • 429 Too many requests; wait Retry-After seconds: Problem
  • 503 RFC 9457 problem: Problem

GET /search

Find places and resources by name

Matches place names (counties, cities, towns, townships) and directory resource names. It is a name lookup, not a question answerer, and never searches for people.

ParameterInTypeAbout
X-Request-IdheaderstringEchoed as request_id; 8 to 64 characters of letters, digits, dot, underscore or hyphen. Otherwise GISFinder makes one.
If-None-MatchheaderstringAn ETag from an earlier response; a match answers 304 without a body
q requiredquerystring (up to 200 characters)
statequeryStateCode
limitqueryinteger (from 1, to 50, default 10)

Responses:

  • 200 Matches, best first: envelope with data SearchResult
  • 304 The data has not changed since the ETag in If-None-Match
  • 400 RFC 9457 problem: Problem
  • 401 RFC 9457 problem: Problem
  • 429 Too many requests; wait Retry-After seconds: Problem

GET /openapi.json

This document as JSON

Responses:

  • 200 OpenAPI 3.1 document

Schemas

Problem

FieldTypeAbout
type always presentstringStable, one of https://www.gisfinder.com/problems/{bad-parameter,bad-point,bad-cursor,unknown-topic,unknown-state,unknown-jurisdiction,outside-coverage,address-not-found,place-not-found,ambiguous,invalid-key,rate-limited,lookup-limit,busy,upstream-unavailable,not-found,method-not-allowed,internal-error}
title always presentstring
status always presentinteger
detail always presentstring
request_id always presentstring
choicesarray of ChoiceWith ambiguous (409), the candidates to choose from

Choice

FieldTypeAbout
label always presentstring
latnumber
lonnumber
jurisdiction_idJurisdictionId
page_urlstring

Envelope

FieldTypeAbout
data always presentany
sources always presentarray of Source
as_of always presentstring
request_id always presentstring
notices always presentarray of stringPlain-language caveats

Source

FieldTypeAbout
name always presentstring
url always presentstring
publisher always presentstring or null
official always presentboolean
retrieved_at always presentstring or null
license_class always presentone of "open", "public_record", "restricted_no_redistribution", "licensed_third_party", "unknown"
verified_statusone of "verified", "not_yet_verified", "possibly_broken"
verified_atstring or null

StateCode

Two-letter postal code of a state, DC or territory

string, pattern ^[A-Za-z]{2}$

JurisdictionId

Census GEOID with type prefix (state:27, county:27001, cousub:2700143000, place:2743000); district: for bodies that are not Census units; country:us

string, pattern ^(state:\d{2}|county:\d{5}|cousub:\d{10}|place:\d{7}|district:[a-z0-9-]+|country:us)$

Topic

one of "parcel_map", "county_gis", "assessor", "property_tax_payment", "tax_collector", "recorder_deeds", "plats_surveys", "zoning", "building_permits", "septic_well", "wetlands", "floodplain", "soils", "elevation", "roads_right_of_way", "public_land", "property_records_general"

Function

one of "assessment", "tax_collection", "recording", "zoning", "permits", "gis"

Point

FieldTypeAbout
type always present"Point"
coordinates always presentarray of numberLongitude, latitude (WGS84)

Jurisdiction

FieldTypeAbout
jurisdiction_id always presentJurisdictionId
type always presentone of "country", "state", "county", "cousub", "place", "district"
name always presentstring
legal_typestring or nullCensus legal word: county, parish, borough, city, town, township, village, charter township, plantation
statestring or nullTwo-letter postal code
same_asarray of JurisdictionId
ocd_idstring or null
tiger_vintagestring or null
page_url always presentstring

Office

FieldTypeAbout
office_id always presentstringOpaque, stable, never reused
name always presentstring
kindstring or null
jurisdiction_id always presentJurisdictionId
phonestring or null
emailstring or null
urlstring or null
addressstring or null
personobject or null
verified_statusone of "verified", "not_yet_verified", "possibly_broken"
verified_atstring or null
page_urlstring

Resource

FieldTypeAbout
resource_id always presentstringOpaque, stable, never reused
name always presentstring
descriptionstring or null
url always presentstring
search_url_templatestring or nullStored deep-link template with {pin} or {q}
topics always presentarray of Topic
jurisdiction_idJurisdictionId
publisherstring or null
providerstring or nullVendor that runs the page for the publisher
official always presentboolean
verified_status always presentone of "verified", "not_yet_verified", "possibly_broken"
verified_atstring or null
verification_methodone of "automated", "browser", "manual", null
last_http_statusinteger or null
license_class always present"open"
source_kindstringHow the record was gathered; unknown where GISFinder has no saved source trail
page_url always presentstring

FunctionEntry

FieldTypeAbout
function always presentone of "assessment", "tax_collection", "recording", "zoning", "permits", "gis", "exemptions"
jurisdiction_id always presentJurisdictionId or nullNull when no body in the chain performs the function here (proposal CCP-10); basis then says who does, where known
office_name always presentstring or null
officeOffice or null
resources always presentarray of ResourceUnder the function topics; for tax_collection the property_tax_payment page comes first
roleone of "primary", "secondary", "delinquent"
levy_scopeone of "county", "municipal", "school", "special", "all", null
basisstring or nullPlain-language reason this body performs the function
evidence_urlstring or null
alsoarray of FunctionEntryFurther bodies that perform the same function for this point, such as a second tax bill (proposal CCP-3); the entry itself is the primary one

Functions

FieldTypeAbout
assessmentFunctionEntry or null
tax_collectionFunctionEntry or null
recordingFunctionEntry or null
zoningFunctionEntry or null
permitsFunctionEntry or null
gisFunctionEntry or null

ResolveResult

FieldTypeAbout
match always presentobject
point always presentPoint or nullNull when resolved by place name
jurisdictions always presentarray of JurisdictionState, county, county subdivision, place, from largest to smallest
functions always presentFunctions

ResourcePage

FieldTypeAbout
jurisdiction always presentJurisdiction
pointPoint or null
topic always presentTopic or null
resources always presentarray of Resource
next_cursor always presentstring or null

PlacePage

FieldTypeAbout
jurisdiction always presentJurisdiction
chain always presentarray of Jurisdiction
offices always presentarray of Office
resources always presentarray of ResourceThe place's own resources
functions always presentFunctions
next_cursor always presentstring or null

TopicInfo

FieldTypeAbout
topic always presentTopic
name always presentstring
description always presentstring
functions always presentarray of Function
page_url always presentstring
guide_url always presentstring or null

TopicList

FieldTypeAbout
topics always presentarray of TopicInfo
functions always presentobjectEach function and the topics that serve it (contract 4.3)
aliases always presentobjectDeprecated topic names and the topic that replaced each

Rule

FieldTypeAbout
office always presentstring or nullThe office name used in the state
level always presentone of "state", "county", "town", "city", nullLevel of government that does the job
where always presentstring or nullPlain words for the level, for example Each county
notestring or null

StateRules

FieldTypeAbout
state always presentstring
name always presentstring
assessment always presentRule
tax_collection always presentRule
recording always presentRule
zoning always presentRule or null
exemptions always presentRule or null
page_urlstring

Guide

FieldTypeAbout
topic always presentTopic
state always presentstring or null
title always presentstring
summary always presentstring
sections always presentarray of object
page_url always presentstring
state_rules always presentStateRules or null
state_summary always presentstring or nullPlain sentences on who does this job in the state
also always presentarray of objectOther guides on the same topic

Decider

FieldTypeAbout
description always presentstringWho makes the official decision
function always presentFunction or nullThe function whose office is given
office always presentFunctionEntry or nullThe responsible local body from the responsibility model, where one applies

Fact

FieldTypeAbout
status always presentstringPer fact: flood sfha, moderate, minimal, unmapped, unknown; wetlands yes, near, no, unknown; soils ok, none, unknown; elevation ok, unknown; shoreland likely, no, unknown; radon zone_1, zone_2, zone_3, not_listed
summary always presentstringPlain-language result
detail always presentstring or null
values always presentobjectMachine values, for example zone, subtype, base_flood_elevation_ft, firm_panel, feet, map_unit
dataset always presentstringThe data the fact was read from
publisher always presentstring
as_of always presentstring or nullSource date where known: FIRM panel effective date, wetland image year, soil survey version, elevation acquisition date, radon map edition
caveat always presentstring
decided_by always presentDecider
resources always presentarray of ResourceDirectory resources to confirm the fact

Screening

FieldTypeAbout
kind always present"screening"Every fact here is screening
point always presentPoint
jurisdictions always presentarray of Jurisdiction
facts always presentobject

SearchResult

FieldTypeAbout
places always presentarray of Jurisdiction
resources always presentarray of Resource