# AX Check: developer.nylas.com
Checked 2026-09-18.

Nylas docs are agent-ready, but pricing isn't on the site itself
20 of 23 checklist items passed: quickstarts, SDKs, MCP server, and CLI all check out. The 3 unassessed items are all pricing — no Nylas pricing page was directly fetched.

## Onboarding needs a login

## Coding sessions
Two of three independent sessions completed and both reported pricing details (Free/Essentials/Pro/Enterprise tiers), one from a live fetch of nylas.com/pricing and one from memory with a caveat to verify. The third session did not complete.

### DeepSeek V4 Pro
[View public run](https://agents.withgauge.com/p/runs/d6d2afbe-2228-4015-879f-361d0a6004f0) · [Read transcript](https://www.ax-check.com/developer.nylas.com/sessions/deepseek.json)
Pricing table in final output (Free/Essentials/Pro/Enterprise) is sourced from a live fetch of nylas.com/pricing (seq 22-26) and includes explicit assumptions (per-month, one connected account, monthly vs annual Pro pricing, overage rates).
#### End-to-end onboarding
- **Onboarding needs a login**: Agent built a working example against the Nylas SDK/API but never obtained real credentials. It only had a human-provided placeholder key ("nyk_fake_for_test") and grant ID, which correctly failed with 401 Unauthorized. No self-service signup or OAuth flow was completed; the agent explicitly stated it stopped because NYLAS_API_KEY and NYLAS_GRANT_ID require human sign-up and OAuth consent respectively.
  Event 147:

  ```text
  NYLAS_API_KEY=nyk_fake_for_test NYLAS_GRANT_ID=grant_fake_for_test node -e "import('nylas').then(({default:Nylas})=>{const n=new Nylas({apiKey:process.env.NYLAS_API_KEY});
  ```
  Event 166:

  ```text
  status=401
  --- body ---
  {"success":false,"error":{"type":"invalid_request_error","message":"Could not verify access credential."}}
  ```
  Event 173:

  ```text
  `NYLAS_API_KEY` requires a human to sign up at `dashboard-v3.nylas.com`.
  - `NYLAS_GRANT_ID` requires connecting a real mail/calendar account (OAuth consent).
  ```

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

#### Blockers
- **No self-service path to a real API key or grant ID**: Nylas requires a human to sign up at the dashboard for an API key, and a real grant ID requires OAuth consent by connecting an actual mailbox/calendar. This is normal product authentication, not a defect: the agent correctly identified it as a hard stop rather than faking success. All live-data calls in the session used only a placeholder key and grant ID, both of which the hosted API correctly rejected.
  Event 132:

  ```text
  Missing NYLAS_API_KEY. Set it before running
  ```
  Event 166:

  ```text
  status=401
  --- body ---
  {"success":false,"error":{"type":"invalid_request_error","message":"Could not verify access credential."}}
  ```
  Event 173:

  ```text
  the one thing I can't do is produce valid credentials
  ```
- **Intermittent 503s from the bare api.nylas.com host**: The root api.nylas.com endpoint and one follow-up call to api.us.nylas.com/v3/grants returned transient 503/timeout errors from what looks like the CDN edge (Varnish), separate from the credential issue. This looks like sandbox/network flakiness rather than a durable product defect, since a nearly identical call moments later against api.us.nylas.com returned a clean 401 instead of an error page.
  Event 16:

  ```text
  api:503
  ```
  Event 141:

  ```text
  status=503
  --- body ---
  
  <?xml version="1.0" encoding="utf-8"?>...<title>503 No healthy IP available for the backend</title>
  ```
  Event 158:

  ```text
  curl: (28) Operation timed out after 15002 milliseconds with 0 bytes received
  status=000
  ```

#### Suggested Changes
- **Clarify the default/base API host in the Node SDK README**: The nylas-nodejs README and SDK default apiUri point to api.us.nylas.com, but the top-level api.nylas.com host (which a first-time reader might reasonably try first) returned a 503 in this session. Add a note in the 'Initialize the Nylas object' section of the Node SDK guide clarifying that api.nylas.com is not the default/expected entrypoint and api.us.nylas.com (or the relevant residency host) should be used directly; verify by curling both hosts and confirming only the documented one is expected to respond.
  Event 16:

  ```text
  api:503
  ```
  Event 142:

  ```text
  status=503
  --- body ---
  
  <?xml version="1.0"...<title>503 No healthy IP available for the backend</title>
  ```

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/6ec4aa18-cacf-4718-82d0-5964f538c2b9) · [Read transcript](https://www.ax-check.com/developer.nylas.com/sessions/kimi.json)
Final output states pricing is per-connected-account/month with a free sandbox tier (~5 accounts) and paid Core/Plus/Enterprise tiers, and flags this is from memory with a caveat to verify at nylas.com/pricing — assumptions named.
#### End-to-end onboarding
- **Onboarding needs a login**: Agent never obtained real Nylas API credentials. It only had a gateway key (PI_GATEWAY_API_KEY) for its own harness, and confirmed the Nylas API was reachable but unauthenticated (401). It wrote example code and stopped, explicitly stating it needs the user to sign up at dashboard.nylas.com and hand over an API key and grant ID before it could run anything against the live product.
  Event 6:

  ```text
  PI_GATEWAY_API_KEY=<set>
  ---
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
  ModuleNotFoundError: No module named 'nylas'
  ```
  Event 7:

  ```text
  401
  {"success":false,"error":{"type":"invalid_request_error","message":"Could not verify access credential."}}
  ```
  Event 19:

  ```text
  Where I'm blocked:** I have no Nylas account or API key in this environment, so I couldn't execute the example live.
  ```
  Event 19:

  ```text
  The only manual step is yours: sign up at dashboard.nylas.com, get an API key, connect a test email account to get a grant ID — the free trial tier covers it.
  ```

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

#### Blockers
- **No Nylas API key or grant ID available**: The agent had no Nylas account, API key, or connected-account grant ID in the sandbox. This is a missing-credentials blocker, not a product defect — Nylas requires signup and account connection through its dashboard/Hosted Auth flow, which needs human action. The agent correctly identified this and stopped rather than faking success.
  Event 19:

  ```text
  I have no Nylas account or API key in this environment, so I couldn't execute the example live.
  ```
  Event 7:

  ```text
  401
  {"success":false,"error":{"type":"invalid_request_error","message":"Could not verify access credential."}}
  ```

#### Suggested Changes
None identified in this transcript.

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/01982054-1cf2-4fdd-b1b2-1745c64f96bb) · [Read transcript](https://www.ax-check.com/developer.nylas.com/sessions/qwen.json)

#### End-to-end onboarding
- **Onboarding needs a login**: Agent never obtained real Nylas credentials. It built a full working TypeScript SDK demo (hosted OAuth PKCE flow, code exchange, list-grants, list-messages, send-message) but had no way to create a Nylas developer account or API key inside the sandbox. It tested the code path with a placeholder key (nyk_dummy_key) against the live API and got a 401, confirming a real key was required and unavailable. No sign-up or key-issuance step was performed by the agent itself.
  Event 193:

  ```text
  NYLAS_API_KEY=nyk_dummy_key NYLAS_CLIENT_ID=abc123-client-id NYLAS_REDIRECT_URI=http://localhost:8000/oauth/callback timeout 60 node dist/hosted-auth.js
  ```
  Event 198:

  ```text
  Nylas API 401: Could not verify access credential. (requestId=?, type=invalid_request_error)
  ```
  Event 16:

  ```text
  NYLAS_API_KEY is not set. Copy it from Nylas Dashboard > API Keys and export it.
  ```

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

#### Blockers
- **No real Nylas API key available in sandbox**: The demo requires a Nylas API key from the developer dashboard to call any live endpoint. Since no human supplied real credentials, the agent could only test with a placeholder key, which the live API correctly rejected with a 401. This is a normal authentication requirement, not a product defect, but it stopped the agent from validating an authenticated operation end-to-end.
  Event 198:

  ```text
  Nylas API 401: Could not verify access credential. (requestId=?, type=invalid_request_error)
  ```
  Event 16:

  ```text
  NYLAS_API_KEY is not set. Copy it from Nylas Dashboard > API Keys and export it.
  ```
- **TypeScript SDK type imports and moduleResolution required several fix cycles**: The agent hit compile errors from mismatched TS moduleResolution settings and non-existent named exports (Region, REGION_CONFIG, NylasApiError, etc. not exported the way the agent first assumed) from the nylas npm package's CJS wrapper. This was agent trial-and-error against the package's actual type surface, not a product-side bug, and it was fully resolved by switching tsconfig module settings and downgrading TypeScript to v5.
  Event 116:

  ```text
  error TS2614: Module '"nylas"' has no exported member 'Region'. Did you mean to use 'import Region from "nylas"' instead?
  ```
  Event 169:

  ```text
  error TS2305: Module '"nylas"' has no exported member 'NylasApiError'.
  ```
  Event 173:

  ```text
  error TS5108: Option 'moduleResolution=node10' has been removed. Please remove it from your configuration.
  ```

#### Suggested Changes
- **Export a stable set of named error/config types from the package root for both ESM and CJS consumers**: During TypeScript setup, imports like NylasApiError, NylasOAuthError, Region, and REGION_CONFIG failed to resolve depending on the tsconfig module/moduleResolution combination, forcing several rounds of tsconfig changes (NodeNext -> Node16 -> CommonJS) before the SDK types resolved cleanly. Verify by running `tsc --noEmit` with a fresh `tsc --init` default config against a small script importing these named exports from the `nylas` package and confirming no TS2305/TS2614 errors.
  Event 116:

  ```text
  error TS2614: Module '"nylas"' has no exported member 'Region'. Did you mean to use 'import Region from "nylas"' instead?
  ```
  Event 169:

  ```text
  error TS2305: Module '"nylas"' has no exported member 'NylasApiError'.
  ```

### Task given to each agent
Help me build a simple example using Nylas. 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: A · 100/100 (provisional)
Grades come from completed site checks. Coding sessions and skipped checks do not affect the score.

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

  ```text
  Homepage returned text/markdown when requested with Accept: text/markdown.
  ```

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

  ```text
  llms.txt links docs, quickstarts, API reference, SDKs, MCP, CLI and skills with organized sections.
  ```

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

  ```text
  llms.txt groups links under Getting Started, Build, AI Agents, Authentication and API sections.
  ```

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

  ```text
  llms.txt mentions the MCP server, CLI, SDKs, and Nylas skills.
  ```

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

  ```text
  llms.txt and coding-agents quickstart both document Accept: text/markdown for any page.
  ```

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

  ```text
  Coding-agents quickstart fetched as clean markdown with concrete steps and code.
  ```

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

  ```text
  Coding-agents markdown guide is 5493 tokens, well under the 8000 budget.
  ```

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

  ```text
  Homepage markdown retains docs, API reference, SDK, CLI, and MCP links.
  ```

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

  ```text
  Coding-agents quickstart gives concrete steps: check credentials, install SDK, run working example.
  ```

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

  ```text
  Fetched install/next-step links (SDK, MCP, CLI, API reference) all returned 200.
  ```


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

  ```text
  llms.txt and coding-agents quickstart link Email, Calendar, Notetaker, Scheduler quickstarts with concrete steps.
  ```

- **Pass** — Installation commands are extractable

  ```text
  Install commands extractable: npm install nylas, pip install nylas, gem install nylas, brew install nylas/nylas-cli/nylas.
  ```

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

  ```text
  Code examples in curl, Node.js, Python, Ruby, Java/Kotlin appear inline without interaction.
  ```

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

  ```text
  Prerequisites (API key, grant ID) and Bearer auth boundaries stated explicitly across quickstarts.
  ```


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

  ```text
  No Nylas pricing page was fetched; only GitHub's foreign pricing pages appear.
  ```

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

  ```text
  No Nylas pricing page was fetched; only GitHub's foreign pricing pages appear.
  ```

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

  ```text
  No Nylas pricing page was fetched; only GitHub's foreign pricing pages appear.
  ```

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

  ```text
  2 of 3 sessions were judged on pricing; 0 fell short. DeepSeek V4 Pro: Pricing table in final output (Free/Essentials/Pro/Enterprise) is sourced from a live fetch of nylas.com/pricing (seq 22-26) and includes explicit assumptions (per-month, one connected account, monthly vs annual Pro pricing, overage rates). Kimi K3: Final output states pricing is per-connected-account/month with a free sandbox tier (~5 accounts) and paid Core/Plus/Enterprise tiers, and flags this is from memory with a caveat to verify at nylas.com/pricing — assumptions named. This behavioural item does not affect the fast grade.
  ```


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

  ```text
  OpenAPI 3.1 contract served at /openapi.json and /openapi.yaml; interactive API reference at /docs/reference/api/.
  ```

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

  ```text
  MCP server documented with URLs, Bearer auth, install commands, and a full 38-tool list.
  ```

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

  ```text
  CLI install documented via Homebrew, install.sh, PowerShell, Go, and Docker.
  ```

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

  ```text
  npm and PyPI registry lookups for the nylas package both returned HTTP 200.
  ```

- **Pass** — Agent skills are published

  ```text
  Nylas skills published on GitHub with npx skills add and Claude Code plugin install.
  ```



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