
Security News
Deno Goes the Way of the Dinosaur
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.
@pondlog/source-ebird
Advanced tools
eBird API v2 client library: typed, Zod-validated, rate-limited. Returns Result<T> instead of throwing. 100% endpoint coverage (21 endpoints).
eBird API v2 client.
Typed, Zod-validated, rate-limited, returns Result<T> instead of throwing.
100% endpoint coverage — all 21 documented endpoints.
Part of pondlog.
eBird requires a free API key. Request one at ebird.org/api/keygen and export it:
export EBIRD_API_KEY=your-key-here
If the key is missing, every fetch returns a Result error with a clear
message. Call assertEbirdApiKey() at app startup to fail loudly before
issuing any requests.
The library handles the ~100 req/min rate limit internally and backs off on 429 with exponential retry.
npm install @pondlog/source-ebird @pondlog/core
| Function | Endpoint |
|---|---|
getRecentObservations(regionCode, params?) | GET /data/obs/{regionCode}/recent |
getRecentNotable(regionCode, params?) | GET /data/obs/{regionCode}/recent/notable |
getRecentOfSpecies(regionCode, speciesCode, params?) | GET /data/obs/{regionCode}/recent/{speciesCode} |
getNearbyRecent(lat, lng, params?) | GET /data/obs/geo/recent |
getNearbyNotable(lat, lng, params?) | GET /data/obs/geo/recent/notable |
getNearbyOfSpecies(lat, lng, speciesCode, params?) | GET /data/obs/geo/recent/{speciesCode} |
getHistoricOnDate(regionCode, year, month, day, params?) | GET /data/obs/{regionCode}/historic/{y}/{m}/{d} |
| Function | Endpoint |
|---|---|
getRecentChecklists(regionCode, params?) | GET /product/lists/{regionCode} |
getTop100(regionCode, year, month, day, params?) | GET /product/top100/{regionCode}/{y}/{m}/{d} |
getChecklist(subId) | GET /product/checklist/view/{subId} |
| Function | Endpoint |
|---|---|
getHotspotsInRegion(regionCode, params?) | GET /ref/hotspot/{regionCode} |
getNearbyHotspots(lat, lng, params?) | GET /ref/hotspot/geo |
getHotspotInfo(locId) | GET /ref/hotspot/info/{locId} |
| Function | Endpoint |
|---|---|
getTaxonomy(params?) | GET /ref/taxonomy/ebird (always fmt=json) |
getTaxonomicForms(speciesCode) | GET /ref/taxonomy/forms/{speciesCode} |
getTaxaLocales() | GET /ref/taxonomy/locales |
getTaxonomyVersions() | GET /ref/taxonomy/versions |
getTaxonomicGroups(grouping, params?) | GET /ref/sppgroup/{grouping} |
| Function | Endpoint |
|---|---|
getRegionInfo(regionCode, params?) | GET /ref/region/info/{regionCode} |
getSubRegions(regionType, parentRegionCode) | GET /ref/region/list/{regionType}/{parentRegionCode} |
getAdjacentRegions(regionCode) | GET /ref/adjacent/{regionCode} (subnational2 only) |
For endpoints that return shapes mappable to @pondlog/core shared types,
*Normalized variants return Observation[] / Place[] / Taxon[]:
getNearbyRecentNormalized, getNearbyNotableNormalizedgetHotspotsInRegionNormalized, getNearbyHotspotsNormalized, getHotspotInfoNormalizedgetTaxonomyNormalizedAll normalized observations get iconicTaxon: "Aves" (eBird is birds-only).
import { getNearbyRecent, getHotspotsInRegion } from "@pondlog/source-ebird";
const obs = await getNearbyRecent(48.118, -123.4307, { dist: 25, back: 7 });
if (obs.ok) {
for (const o of obs.data) {
console.log(o.comName, o.howMany ?? "?", "@", o.locName);
}
}
const hotspots = await getHotspotsInRegion("US-WA-009"); // Clallam County
if (hotspots.ok) {
console.log(`${hotspots.data.length} hotspots`);
}
eBird uses hierarchical region codes:
USUS-WAUS-WA-009 (Clallam County)The eBird API rate limit is undocumented; this client throttles at 100 req/min and retries on 429 with exponential backoff (1s, 2s, 4s, max 3 attempts).
MIT — Andrew Christison
FAQs
eBird API v2 client library: typed, Zod-validated, rate-limited. Returns Result<T> instead of throwing. 100% endpoint coverage (21 endpoints).
We found that @pondlog/source-ebird demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Cloudflare is acquiring Deno’s team, which will provide another year of bug fixes and security updates before ending support for the runtime.

Security News
Anthropic’s free OSS Scanner uses Mythos and other Claude models to find open source vulnerabilities and send maintainers reports with proposed fixes.

Security News
On Front Lines’ Early Adopters: CISO podcast, Andrew Becherer shares lessons from Datadog, weighs the long-term costs of AI-built tools, and explains how founders can actually gain a CISO’s trust.