# 30MHz > 30MHz is a Rotterdam-based horticulture technology company. It builds wireless in-crop sensors and > the ZENSIE data platform for greenhouse and controlled-environment growers, and exposes a public > REST API — the ZENSIE API — for reading sensor data, pushing external data in, and managing the > platform. This file was GENERATED by API Evangelist from 30MHz's own published surface on > 2026-09-05. 30MHz does not publish an llms.txt; /llms.txt returns 404 on 30mhz.com, api.30mhz.com > and support.30mhz.com. ## API - [ZENSIE API base](https://api.30mhz.com/api): REST, Swagger 2.0, 425 paths and 558 operations. - [Swagger contract](https://api.30mhz.com/api/swagger.json): the machine-readable definition, served by the API host itself. The Swagger UI is at https://api.30mhz.com/api/swagger. - Authentication: a bearer JWT API key in the `Authorization` header. Create it in the ZENSIE web app under Account Settings > Developer > Request new API key. No OAuth, no scopes. ## Docs - [Developer docs](https://support.30mhz.com/developer-docs): the index of everything 30MHz publishes for developers — four articles. - [Create an API key](https://support.30mhz.com/create-an-api-key) - [API endpoints documentation](https://support.30mhz.com/api-endpoints-documentation-new) - [Getting started with data integrations](https://support.30mhz.com/getting-started-with-data-integrations) - [30MHz data-integration service](https://support.30mhz.com/30mhz-integration-service) - [Push data to the 30MHz platform](https://support.30mhz.com/push-data-to-the-30mhz-platform) - [Query data from the 30MHz platform](https://support.30mhz.com/query-data-from-the-30mhz-platform) ## Core concepts - **check** — a data source. Every sensor channel, imported feed or manual input sheet is a check, addressed by `checkId`. `checkId` is the primary key of the whole data surface; it appears in the ZENSIE URL when a data source is selected. - **organization** — the tenant. Most reads are scoped by `organizationId`. - **site / location** — a physical growing site. `location` is the legacy vocabulary and is deprecated in the contract; `site` is the live one. - **zone** — a subdivision of a site, used for maps. - **sensor type** — the measurement schema a check reports against. - **import check** — an externally-fed check, populated through the ingest surface. - **cultivation** — a crop cycle, with targets. ## Key operations - `getDataForSensors` — POST /data/sensors — the main read: measurements for a set of checkIds. - `getOrganizationChecks` — GET /check/organization/{organizationId} — find every checkId you own. - `getCheckLastRecordedState` — GET /stats/check/{checkId} — latest value for one check. - `getCheckStatsByTimeInterval` — GET /stats/check/{checkId}/from/{startDate}/until/{endDate} - `getChecksStatsByTimeInterval` — POST /stats/from/{startDate}/until/{endDate} — many checks at once. - `getNetworkStatusOverview` — GET /stats/network/organization/{organizationId} - `ingestImportChecks` — POST /ingest/organization/{organizationId} — push data in, max 100 events per call (HTTP 413 beyond that). - `createDataExport` — POST /data-export — schedule a bulk export. ## What 30MHz does NOT publish Recorded so an agent does not go looking. Every one of these was probed on 2026-09-05. - No OpenAPI 3.x. The contract is Swagger 2.0. - No MCP server, no agent card, no A2A surface. - No AsyncAPI and no advertised webhooks. The only outbound mechanism is a scheduled export-partner push to a URL you register. - No `/.well-known/` documents of any kind on any host, and no security.txt. - No published rate limits, no `RateLimit-*` headers, no documented 429. - No idempotency key on any of the 240 mutating operations. - No RFC 9457 problem+json. Errors are `{"message": "..."}`. - No public SDK on npm, PyPI, RubyGems or crates.io. A first-party Python client exists but is only available on request through support. - No CLI, no public Postman collection, no sandbox or test mode. - No status page, no SLA, no deprecation policy — even though 19 operations are marked deprecated. - No public API changelog. The support centre's "What's new" is an undated product changelog. ## Company - [30mhz.com](https://30mhz.com/) — Weena 268, 3012 NJ Rotterdam, The Netherlands. support@30mhz.com. - [Pricing](https://www.30mhz.com/pricing/) — Connect from EUR 120/month, Business from EUR 285/month, Custom on request. Per location. Every tier goes through a "Request info" form. - [Integrations](https://www.30mhz.com/integrations) — Priva, Hoogendoorn, Ridder climate computers, Meteomatics weather. - [Support centre](https://support.30mhz.com/) · [News](https://www.30mhz.com/news) · [GitHub](https://github.com/30mhz) (14 repos, none of them an API client)