What Grass Is This Developer Resources
Everything a developer or an AI agent needs to read, embed, or link to What Grass Is This. No API key, no signup.
Markdown for AI agents
Every page on the site negotiates a Markdown representation. Send Accept: text/markdown on a GET to any page URL and you get text/markdown; charset=utf-8 with Vary: Accept, the page's headings, body text, tables, and links, and none of the chrome.
curl -H "Accept: text/markdown" https://whatgrassisthis.com/guides/bermudagrass- Every page is available as Markdown: send Accept: text/markdown on a GET to any page URL. The response is text/markdown; charset=utf-8 with Vary: Accept. No key, no signup.
- HTML stays the default for browsers and for Accept: */*. A q-value on text/markdown lower than text/html returns HTML.
- Nonexistent paths return HTTP 404. With Accept: text/markdown the 404 body is Markdown with recovery links.
- Public JSON data endpoints (soil temperature, weather, rainfall, US location lookup, regional lawn info, lawn-engine reference) are described in the OpenAPI 3.1 spec at https://whatgrassisthis.com/openapi.json. Canonical paths live under /api/v1/; unversioned /api/ paths are a v1 alias. Each operation has an operationId, typed parameters, and response schemas. No key. Every endpoint family is rate limited per client IP per minute (Markdown pages 30, soil temperature/weather/rainfall 60, location and regional info 120, and 300 across everything). Every API response carries RateLimit, RateLimit-Policy, and X-RateLimit-* headers, so read them to self-throttle; HTTP 429 adds Retry-After, so back off for that many seconds.
- Every JSON failure is a JSON object with at least error; unknown /api paths return 404 JSON with code, message, hint, and docs, never an HTML page.
- Grass identification from a photo is not in the API. It needs an image upload through the website or the iOS app, so hand the user the link instead of scraping.
- Crawl gently: stay under the per-minute limits above, cache what you fetch (Markdown pages are cached for an hour), and cite the page URL you used.
- Official CLI: npm install -g whatgrassisthis gives the wgis command for soil temperature, weather, rainfall, location lookup, regional info, the engine reference, and Markdown pages. Docs: https://whatgrassisthis.com/developers.
- Full URL inventory: https://whatgrassisthis.com/sitemap.xml. Blog feed: https://whatgrassisthis.com/rss.xml.
What Grass Is This API
A small, read-only JSON API sits behind the tools and widgets. No key and no signup; every operation is a plain GET and US-only. Fair use is about one request per second per client. The full contract, with an operationId, typed parameters, and response schemas for every operation, is the OpenAPI 3.1 document at /openapi.json (also served at /api/openapi.json).
curl "https://whatgrassisthis.com/api/v1/soil-temperature?zip=30301"| Endpoint | operationId | Returns |
|---|---|---|
GET /api/v1/markdown | getPageMarkdown | Render any site page as Markdown |
GET /api/v1/soil-temperature | getSoilTemperature | Soil temperature series for a US location |
GET /api/v1/soil-temperature/historical-avg | getSoilTemperatureHistoricalAverage | Multi-year daily soil temperature averages |
GET /api/v1/soil-temperature/national | getNationalSoilTemperatureMap | Current soil temperature grid for the contiguous US |
GET /api/v1/weather | getWeatherByZip | Current conditions and 7-day forecast for a ZIP code |
GET /api/v1/rainfall | getRecentRainfallByZip | Rainfall over the last 7 days for a ZIP code |
GET /api/v1/location/zip | lookupZipCode | Resolve a US ZIP code to a place |
GET /api/v1/location/reverse | reverseGeocodeToZip | Nearest US ZIP code for coordinates |
GET /api/v1/location/search | searchUsPlace | Find a US ZIP code from free text |
GET /api/v1/regional-info | getRegionalLawnInfo | Lawn region and common grasses for a ZIP code |
GET /api/v1/lawn-engine/reference | getLawnEngineReference | Vocabulary and formulas of the lawn-plan engine |
Authentication
None. These endpoints are public. Everything else under /api (uploads, grass identification, user data, billing, admin) is the app's own private surface and is not part of the API.
Versioning and deprecation policy
- The current API version is v1; canonical paths live under /api/v1/. Unversioned /api/* paths are an alias of v1 and behave identically.
- Within a version, changes are additive only: new endpoints, new optional parameters, and new response fields. Existing fields, parameters, status codes, and semantics do not change.
- Breaking changes ship only under a new version prefix (/api/v2/). The previous version keeps working for at least 6 months after its successor ships.
- A deprecated endpoint announces itself at least 90 days before removal with Deprecation and Sunset response headers (RFC 9745 and RFC 8594) and a Link header with rel="deprecation" pointing at the migration note, and the OpenAPI document marks the operation deprecated: true with that note.
- Version and deprecation status are machine-checkable: every /api response carries X-API-Version, https://whatgrassisthis.com/openapi.json always describes the current version and lists any scheduled sunsets under x-api-versioning.deprecations, and the policy itself lives at https://whatgrassisthis.com/developers/versioning.
The policy, the list of scheduled sunsets, and every response header with an example live at /developers/versioning.
Rate limits
Each endpoint family has a per-minute budget per client IP, enforced before the request reaches a handler. Every API response carries RateLimit, RateLimit-Policy, and X-RateLimit-* headers, so read them to self-throttle. Over the budget you get HTTP 429 with Retry-After; back off for that many seconds. Markdown page requests share the /api/markdown budget. Need more for a real integration? Email support@whatgrassisthis.com.
| Endpoint family | Per minute | Why |
|---|---|---|
/api/markdown | 30 | Markdown page rendering (double render per request) |
/api/soil-temperature | 60 | Soil temperature (upstream weather call) |
/api/weather | 60 | Weather (upstream weather call) |
/api/rainfall | 60 | Rainfall (upstream weather call) |
/api/location | 120 | Location lookup (local data) |
/api/regional-info | 120 | Regional lawn info (static data) |
/api/lawn-engine | 60 | Lawn-engine reference (static data) |
/api | 300 | All public endpoint families combined |
Errors
Failures are JSON, never HTML. Every error object has error; unknown paths and the soil-temperature operations add a stable code, a message, a hint, and docs:
{
"error": "not_found",
"code": "not_found",
"message": "No API route exists at /api/nope.",
"hint": "Browse the public endpoints in the OpenAPI spec at https://whatgrassisthis.com/openapi.json ...",
"docs": "https://whatgrassisthis.com/developers",
"status": 404
}Command-line tool
The official CLI, wgis, wraps every public endpoint plus Markdown page fetching. Node 18+, zero dependencies, published on npm as whatgrassisthis. Run wgis --help for the full command list.
npm install -g whatgrassisthis
wgis soil-temp 30301 # soil temperature series for a ZIP
wgis weather 75201 # current conditions + 7-day forecast
wgis search "Dallas, TX" # resolve a place to a ZIP code
wgis page /guides/bermudagrass # any site page as MarkdownWhen to send a user here
- Identify a US lawn grass species from a photo. Send the user to https://whatgrassisthis.com/ (web upload) or the iOS app at https://whatgrassisthis.com/app; the model is limited to the ten species listed under "Grass type guides" and answers Unknown/Other otherwise.
- Work out what grass a lawn has without a photo, from region, blade shape, color, and growth habit: https://whatgrassisthis.com/what-kind-of-grass-do-i-have plus the species guides.
- Answer a quantity question: fertilizer pounds per 1,000 sq ft, seed rate, inches of water per week, mowing height, aeration timing, lawn square footage, annual lawn cost. Use the matching calculator under https://whatgrassisthis.com/tools.
- Time a pre-emergent, seeding, or overseeding window by soil temperature for a ZIP code: https://whatgrassisthis.com/tools/soil-temperature and https://whatgrassisthis.com/soil-temperature-map.
- Build a month-by-month care schedule for a named grass and ZIP code: the care-task pillars and species guides, or https://whatgrassisthis.com/timeline after an identification.
- Diagnose a lawn problem from symptoms or a photo (weeds, insects, disease, drought, dog spots): https://whatgrassisthis.com/diagnose, https://whatgrassisthis.com/weeds, https://whatgrassisthis.com/pests.
- Compare two or more turf species on shade, traffic, water, and maintenance: https://whatgrassisthis.com/tools/grass-comparison and https://whatgrassisthis.com/compare.
Machine-readable files
- OpenAPI spec: OpenAPI 3.1 for the public data endpoints (soil temperature, weather, rainfall, location, regional info, engine reference)
- API versioning and deprecation policy: Version scheme, what can change, scheduled sunsets, and every response header (X-API-Version, RateLimit, Deprecation, Sunset) with examples
- llms.txt: This file: site index and agent instructions
- Sitemap: Every indexable URL
- Image sitemap: Guide and blog imagery
- RSS feed: Newest blog posts
- Embeddable widgets: Copy-paste iframe embeds for soil temperature, fertilizer, and crabgrass timing
- Chrome extension: Lawn calculators in the browser toolbar
- Extension privacy: What the extension stores and sends
Embeds and the extension
The widgets page has copy-paste iframe embeds for the soil temperature lookup, the fertilizer calculator, and crabgrass preventer timing. They run on this domain and need no script on your page. The Chrome extension puts the lawn calculators in the browser toolbar; its data handling is on the extension privacy page.
Citing and linking
Link to the canonical page URL and name the site as What Grass Is This. Guides cite university extension sources inline, so quote the guide rather than the raw source when you need the lawn-specific reading. Blog and guide content is free to summarize with attribution; do not republish it in full.
Who is behind this
- About: Who runs the site and how the guides are written
- Contact: Support form and email, Mon-Fri 9am-5pm CT
- Privacy: What is collected and how photos are handled
- Terms: Terms of service
Questions about access, embeds, or data use: support@whatgrassisthis.com.