# AX Check: emteria.com
Checked 2026-09-18.

Pricing is upfront, but setup steps aren't spelled out.
EUR prices and device limits show directly on the pricing page for all tiers except Enterprise. Install commands and code examples weren't found on the quickstart pages.

## Onboarding needs a login

## Coding sessions
Of three independent sessions, one (Kimi K3) completed and pulled per-tier EUR pricing with device limits straight from the pricing page. The other two sessions did not complete, stopping before reaching a pricing or setup result.

### DeepSeek V4 Pro
[View public run](https://agents.withgauge.com/p/runs/ec974484-d3b4-4ca8-ad7c-dcbb935db70e) · [Read transcript](https://www.ax-check.com/emteria.com/sessions/deepseek.json)

#### End-to-end onboarding
- **Onboarding needs a login**: The agent found emteria's real hosted API (api.emteria.com, OpenAPI v1-v3 specs) and confirmed the auth model: API keys must be generated by logging into the emteria web portal (hub.emteria.com/account/profile) — there is no self-service signup/token endpoint the agent could call without a human. It tried the OAuth-style token endpoint with dummy credentials and got 401/400/500 errors, confirming a human must first create an account and generate a key manually. No authenticated request against the real API succeeded within the session.
  Event 65:

  ```text
  In order to access the API endpoints you need to generate a personal API key. Currently, there are no public API endpoints, they all require authentication and authorization via an API key.
  ```
  Event 174:

  ```text
  {"error": "invalid_request", "error_description": "The specified 'Content-Type' header is invalid.", "error_uri": "https://documentation.openiddict.com/errors/ID2082"}
  ```
  Event 180:

  ```text
  {"error": "invalid_client", "error_description": "The specified 'client_id' is invalid.", "error_uri": "https://documentation.openiddict.com/errors/ID2052"}
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **API key generation requires a human login to the web portal**: Emteria's documented workflow (product behavior, not agent error) requires logging into the emteria portal, navigating to profile settings, and manually clicking 'update' to generate an API key before any endpoint can be called. This blocks fully autonomous, self-serve API access — a normal login requirement rather than a product defect.
  Event 65:

  ```text
  In order to generate an API key, login to the emteria portal and access your profile settings
  ```
- **Token/auth endpoint rejects unauthenticated attempts**: When the agent tried the discovered /api/v3/tokens and /api/v3/tokens/token endpoints without a real client_id/secret, the server correctly rejected the requests (400/401/500), confirming there is no way to mint credentials without prior manual account/API-key setup. This is expected product security behavior given the session had no real credentials.
  Event 174:

  ```text
  code=400
  ```
  Event 180:

  ```text
  code=401
  ```

#### Suggested Changes
- **Add direct links from the API reference page to the live Swagger UI and key-generation step**: The public page at emteria.com/docs/api only shows marketing copy and a static screenshot description; the actual usable Swagger UI lives at a different, undiscoverable host (api.emteria.com/main/embedded/api-docs/index.html) that required guesswork to find via the kb article. Add a direct, prominent link from /docs/api to that live Swagger host and to the kb 'How to set up emteria web API key' article. Verify by checking that a new visitor can go from /docs/api to the working Swagger docs in one click.
  Event 64:

  ```text
  API reference Complete reference documentation for the emteria API.
  ```
  Event 112:

  ```text
  https://api.emteria.com/main/embedded/api-docs/index.html
  ```
- **Enable 'Try it out' in the Swagger UI or document a curl example with real headers**: The knowledge base article explicitly states the hosted Swagger UI cannot be used interactively, forcing new developers to use a third-party tool (Postman) with screenshots instead of copyable code. Add a working curl/HTTP example directly in the kb article or enable tryItOutEnabled in the emteria/embedded/api-docs Swagger config so developers can test calls without leaving the docs. Confirm by attempting a GET /api/v3/devices call with a valid x-api-key directly from the docs page.
  Event 65:

  ```text
  Note: Authorizing and trying the API endpoints in the Swagger UI is not possible.
  ```

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/228bafc1-e81c-4ff4-b98f-a6bf87db60d6) · [Read transcript](https://www.ax-check.com/emteria.com/sessions/kimi.json)
Final output gives per-tier pricing (Free/Small €80-210/mo/Medium €360-810/mo/Enterprise) explicitly scraped from the pricing page (seq 12) with device-count and feature assumptions named for each tier.
#### End-to-end onboarding
- **Onboarding needs a login**: Agent found a real hosted REST API (Emteria Portal API v3) with a live OpenAPI spec and confirmed the OAuth2 client_credentials token endpoint behaves correctly (rejecting invalid credentials appropriately). However, it never obtained actual credentials: creating an account requires email confirmation, and generating an API client_id/client_secret requires a workspace that only exists after signup. The example script was written and run locally but exited immediately because no credentials were available, so no authenticated call to the live API was ever completed.
  Event 103:

  ```text
  I can't create an emteria account (signup requires email confirmation), and the token endpoint needs a real `client_id`/`client_secret` from a workspace.
  ```
  Event 102:

  ```text
  Set EMTERIA_CLIENT_ID and EMTERIA_CLIENT_SECRET first (create an API client in your emteria workspace).
  exit=1
  ```
  Event 91:

  ```text
  {
    "error": "invalid_client",
    "error_description": "The specified 'client_id' is invalid.",
    "error_uri": "https://documentation.openiddict.com/errors/ID2052"
  }
  HTTP 401
  ```

#### Hallucinated URLs
None identified in this transcript.

#### Blockers
- **No self-serve API credentials without email confirmation**: Creating an emteria account requires email confirmation, and generating an API client_id/client_secret requires an already-provisioned workspace. This is normal product authentication behavior, not a product defect or agent error — the agent correctly identified it could go no further without a human completing signup.
  Event 103:

  ```text
  I can't create an emteria account (signup requires email confirmation), and the token endpoint needs a real `client_id`/`client_secret` from a workspace. If you create a free account and API client, the script should work as-is.
  ```

#### Suggested Changes
- **Fill in the OpenAPI spec's response schemas and descriptions for auth endpoints**: The published OpenAPI v3 spec at https://emteria.com/embedded/api-docs/v3/api.json has empty/minimal definitions for POST /api/v3/tokens and /api/v3/tokens/token (just a bare 200 OK response, no request body schema, no grant type documentation). The agent had to trial-and-error the grant type and content-type by hitting the live endpoint. Adding the request schema (grant_type, client_id, client_secret fields) and content-type (form-encoded, not JSON) to the spec would let developers build a working client without probing production endpoints.
  Event 65:

  ```text
  {
   "post": {
    "tags": [
     "Tokens"
    ],
    "responses": {
     "200": {
      "description": "OK"
     }
    }
   }
  }
  ```
  Event 81:

  ```text
  {
    "error": "invalid_request",
    "error_description": "The specified 'Content-Type' header is invalid.",
    "error_uri": "https://documentation.openiddict.com/errors/ID2082"
  }
  HTTP 400
  ```

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/bee04171-8147-4327-83b9-d899bf301f30) · [Read transcript](https://www.ax-check.com/emteria.com/sessions/qwen.json)

#### End-to-end onboarding
- **End-to-end onboarding not demonstrated**: The session spent its entirety on unauthenticated research: mapping the marketing site, knowledge base, GitHub org, and the public OpenAPI spec for the Emteria Portal API. The agent confirmed the API is live and requires a Bearer token or x-api-key (both returning 401 without credentials), but never obtained or used any actual credential. No sign-up, registration, or API key generation was attempted, and no authenticated call (e.g., GET /devices with a real key) succeeded.
  Event 109:

  ```text
  HTTP/2 401 
  date: Fri, 18 Sep 2026 23:17:10 GMT
  content-length: 0
  cache-control: no-store
  ```
  Event 42:

  ```text
  In order to generate an API key, login to the emteria portal and access your profile settings
  ```

#### Hallucinated URLs
- **Guessed OpenAPI/API endpoint paths that returned 404**: The agent tried several plausible but invented URLs for the OpenAPI spec and root API before finding the real one at hub.emteria.com/api/openapi.json. These guesses (e.g. emteria.com/docs/api/openapi.json, api.emteria.com/openapi.json, api.emteria.com/main/v3/api-docs) were not sourced from any documentation the agent had read at that point -- they were speculative guesses based on common API conventions, and all failed with 404.
  Event 68:

  ```text
  https://emteria.com/docs/api/openapi.json -> 404
  ```
  Event 68:

  ```text
  https://api.emteria.com/openapi.json -> 404
  ```
  Event 98:

  ```text
  https://api.emteria.com/main/v3/api-docs -> 404
  ```

#### Blockers
- **API requires a personal login-generated key; no self-service credential path in sandbox**: The documented Web API requires generating a personal API key by logging into the Emteria portal (hub.emteria.com) profile settings first. This is normal product behavior (a standard authenticated SaaS gate) rather than a defect, but it blocks the agent from completing any authenticated call in an unattended session with no human to log in.
  Event 42:

  ```text
  In order to generate an API key, login to the emteria portal and access your profile settings
  ```
  Event 42:

  ```text
  Warning: Do NOT share your API key. It grants access to all your groups and devices.
  ```
- **API reference is a JS-rendered SPA, not directly fetchable via plain curl**: The `/docs/api` and `/embedded/api-docs` pages are React/Swagger single-page apps that return near-empty HTML shells over curl, forcing the agent to spend multiple tool calls reverse-engineering the bundle to locate the real JSON spec host. This is a test-environment limitation (no JS execution) compounded by the site's SPA architecture, not a hard product defect, but it added significant friction to a 'light SDK/API' evaluation.
  Event 75:

  ```text
  code:200 size:9309
  <!doctype html>
  <html lang="en">
  ```
  Event 50:

  ```text
  CODE:404
  0 apiref.html
  ```

#### Suggested Changes
- **Publish a direct link to the OpenAPI JSON spec from the Web API knowledge-base article**: The kb.emteria-web-api article says endpoints are documented but only links to the human-facing Swagger UI page, whose real JSON source (hub.emteria.com/api/openapi.json, mirrored at api.emteria.com/main/embedded/api-docs/v3/api.json) had to be discovered by reverse-engineering the bundle's index.js. Add the direct spec URL next to the 'API documentation' link in https://emteria.com/kb/emteria-web-api so integrators and tooling (like OpenAPI codegen) can fetch it without inspecting JS bundles. Verify by curling the linked URL and confirming it returns valid JSON with paths.
  Event 42:

  ```text
  All available API endpoints and the corresponding data models can be found in our API documentation .
  ```
  Event 102:

  ```text
  code:200 size:153458
  openapi 3.0.4
  title Emteria Portal API ver v3
  ```
- **Make emteria.com/api-reference resolve instead of 404**: The top-nav 'API reference' link on the marketing site and footer points to a path that returns 404 when fetched directly, even though a working API docs page exists at a different path (/docs/api). Fix the /api-reference route on emteria.com to redirect or serve the same content as /docs/api, and confirm by curling https://emteria.com/api-reference and checking for a 200 with the Swagger/API reference content.
  Event 50:

  ```text
  CODE:404
  0 apiref.html
  ```
  Event 57:

  ```text
  webapi:200
  docsapi:200
  114511 webapi.html
   44214 docsapi.html
  ```

### Task given to each agent
Help me build a simple example using emteria. Tell me how pricing works, and briefly tell me whether this product will be easy for you to manage. Let me know if you get blocked. If this product has no developer workflow you can act on, say so plainly and stop. Stay light: use the hosted product through its SDK or API. Do not start local service stacks or wait for long-running commands; if the quickstart requires either, say so plainly and stop.

No product credentials were supplied and no purchases were authorized.

## Score: B · 83/100 (provisional)
Grades come from completed site checks. Coding sessions and skipped checks do not affect the score.

### Clarity
- **Failed** — Homepage answers Markdown requests

  ```text
  Homepage returned text/html for a Markdown Accept header; no Markdown representation offered.
  ```

- **Pass** — llms.txt provides an actionable documentation index

  ```text
  llms.txt links to docs, products, hardware, and resources with organized sections.
  ```

- **Pass** — llms.txt provides navigation guidance

  ```text
  llms.txt groups links under Products, Raspberry Pi, Industries, Resources, and Company headings.
  ```

- **Skipped** — llms.txt mentions offered API, MCP, and skills

  ```text
  llms.txt lists no API, MCP, or skills surfaces; API reference exists but is not mentioned.
  ```

- **Pass** — A compact guide representation exists

  ```text
  llms.txt is a compact Markdown index of products, docs, industries and resources.
  ```

- **Pass** — A focused guide is directly retrievable

  ```text
  llms.txt and the Getting Started KB page are directly retrievable guides.
  ```

- **Pass** — Equivalent instructions fit a token budget

  ```text
  llms.txt is 748 tokens, well under the 8000-token budget.
  ```

- **Skipped** — Product-docs links survive format changes

  ```text
  Homepage Markdown unsupported, so link preservation across formats cannot be judged.
  ```

- **Pass** — The compact guide is independently actionable

  ```text
  Getting Started lists concrete install, activation and setup steps with linked how-to guides.
  ```

- **Pass** — Install and next-step links resolve

  ```text
  Getting Started and homepage install/next-step links fetched successfully (kb, docs/api, pricing).
  ```


### Onboarding
- **Pass** — Docs lead to a relevant quickstart

  ```text
  Getting Started page links to concrete installation and activation quickstart guides.
  ```

- **Skipped** — Installation commands are extractable

  ```text
  Getting Started is a chooser; no installation commands shown in fetched pages.
  ```

- **Skipped** — Code examples are available without interaction

  ```text
  No code examples present in the fetched Getting Started or llms.txt content.
  ```

- **Skipped** — Prerequisites and auth boundaries are explicit

  ```text
  Getting Started lists account and activation guides but no explicit auth boundaries here.
  ```


### Pricing
- **Pass** — Pricing is readable without interaction

  ```text
  Pricing page renders plan tiers and EUR prices directly in fetched HTML, no interaction needed.
  ```

- **Pass** — Prices are stated, not gated

  ```text
  Small, Medium, Large workspaces show explicit EUR monthly and annual prices; only Enterprise is contact-sales.
  ```

- **Pass** — Pricing units and limits are explicit

  ```text
  Plans state device limits (3, 50, 300, 1000, unlimited) and per-month/per-year EUR units.
  ```

- **Pass** — Agents identify pricing and its assumptions

  ```text
  1 of 3 sessions were judged on pricing; 0 fell short. Kimi K3: Final output gives per-tier pricing (Free/Small €80-210/mo/Medium €360-810/mo/Enterprise) explicitly scraped from the pricing page (seq 12) with device-count and feature assumptions named for each tier. This behavioural item does not affect the fast grade.
  ```


### Activation
- **Pass** — An API reference or OpenAPI spec is reachable

  ```text
  Fetched /docs/api returns a markdown API reference titled 'Emteria API Reference' with a web API key CTA.
  ```

- **Skipped** — An MCP server is documented and well-formed

  ```text
  No MCP server is mentioned in llms.txt, the API reference, or the knowledge base getting-started page.
  ```

- **Skipped** — A CLI install path is documented

  ```text
  Getting-started lists an emteria.OS installer for Linux/Windows, but no CLI install path is documented.
  ```

- **Skipped** — SDK packages resolve on their registries

  ```text
  No SDK or developer package registry lookup was supplied; only the OS installer is referenced.
  ```

- **Skipped** — Agent skills are published

  ```text
  No agent skills are mentioned in llms.txt, the API reference, or the knowledge base.
  ```



[Full report data](https://www.ax-check.com/emteria.com/report.json)
