Craft notes. Measured speed. Honest coverage. How we build parseAPI.
Loopback, private, and other special-use IPs return 200 with empty geo. The address is valid. There is just nowhere to put it on a map.
/name splits, cases, and returns gender when the first name is clearly one. Mixed names leave gender and salutation null.
github.com/parseapi/lists is CC0 flat JSON and CSV, regenerated from the live API. Countries, states, timezones, currencies, area codes, and daily EUR rates.
GET /timezone?lat=&lon= returns the IANA zone at that point. Open ocean answers nautical Etc/GMT time, and the plus sign in the id means minus.
/city?q= orders results by relevance, so the biggest match leads even when the alphabet disagrees.
didyoumean on /email returns the full suggested address when the host is a known misspelling, and null when it is not.
GET /address takes a US address as one string and returns whether it exists in official government records, plus the standardized parts.
valid answers whether a number could exist. live answers whether it does. GET /hlr asks the network, which keeps the only current list.
Drop a phone list on /bulk and pick what to ask. Validation, carrier, caller ID, and live status are four toggles on one column, each with its own price.
Who carries a number is its own question, so it has its own URL. /carrier returns the carrier, real line type including voip, the burner flag, and issue city. /phone stays flat.
The borders field on /country ships the actual ISO2 codes of countries that share a border.
/bulk takes a CSV, Excel, or Numbers file, finds every column we can parse, and hands the file back with parse_ columns next to your own. Priced per column. Junk is free.
/continent/{code}/countries lists every country on that continent in one call.
Postal names come back readable first. The original-script form sits next to it when it differs.
One name covers a US county, a French department, and a UK district, because district was already the word for that layer in the most countries.
The lat/lon endpoint started life as an internal grid table called geogrid. Five name candidates got floated for the public version, then one line ended the argument outright.
Elevation returns a real negative number over open ocean, the same field as anywhere else.
/postal/{code}/nearby takes a miles query param instead of a /radius/25 path segment, because 25 is a setting, not an id.
AI crawlers resolve with a name, category, and vendor, not just a bot flag.
The dashboard renamed Logs to Activity and reordered the nav to put the product before the bill.
A coordinate on a lake or river resolves to its surrounding country and state, the same as dry land.
bot, mobile, valid, disposable, datacenter. Every flag in the API is one plain word answering a plain question.
MP is Madhya Pradesh in India and the Northern Mariana Islands in the US, same code, same endpoint, two different records.
District, point, and postal all hand back the same FIPS-style code for the same county.
/state/{code}/districts nests every county or department under the state, the same pattern one level down from country.
/country/{code}/states nests the full subdivision list under the country, no separate lookup required.
/email checks format, domain, and whether the address is a generic role inbox, as three separate fields.
/phone returns phone, national, and international formatting in the same response, no client-side formatting needed.
The background fetch fleet got renamed from worker to bot, and that name rides along in the User-Agent on every outbound request it makes.
A redirect turned into a file download in Safari. The cause was a header, not the browser.
Every key sits under one team, and every key under that team draws from the same quota.
The same API key authenticates postal, IP, email, phone, and every other route. No per-endpoint keys to manage.
{ parseAPI } is plain ASCII, typeable anywhere, and valid JavaScript.
Free and paid data ship from the same endpoint. Upgrading is one query parameter, not a new client.