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. Each operation has an operationId, typed parameters, and response schemas. No key; fair use, about one request per second.
- 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: at most one request per second, and cite the page URL you used.
- 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/soil-temperature?zip=30301"| Endpoint | operationId | Returns |
|---|---|---|
GET /api/markdown | getPageMarkdown | Render any site page as Markdown |
GET /api/soil-temperature | getSoilTemperature | Soil temperature series for a US location |
GET /api/soil-temperature/historical-avg | getSoilTemperatureHistoricalAverage | Multi-year daily soil temperature averages |
GET /api/soil-temperature/national | getNationalSoilTemperatureMap | Current soil temperature grid for the contiguous US |
GET /api/weather | getWeatherByZip | Current conditions and 7-day forecast for a ZIP code |
GET /api/rainfall | getRecentRainfallByZip | Rainfall over the last 7 days for a ZIP code |
GET /api/location/zip | lookupZipCode | Resolve a US ZIP code to a place |
GET /api/location/reverse | reverseGeocodeToZip | Nearest US ZIP code for coordinates |
GET /api/location/search | searchUsPlace | Find a US ZIP code from free text |
GET /api/regional-info | getRegionalLawnInfo | Lawn region and common grasses for a ZIP code |
GET /api/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.
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
}When 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)
- 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.