# AX Check: natural.com
Checked 2026-11-03.

Agents can install, price, and run Natural with no logins blocking them
21 of 23 checklist items passed: setup guide, CLI, SDKs, MCP server and API reference all resolved, and pricing is posted openly with tiers and per-rail rates.

## Onboarding needs a login

## Coding sessions
All three independent sessions completed. DeepSeek V4.1 Flash and Qwen 3.8 Max both read the pricing page and quoted per-tier, per-rail rates, flagging ambiguous or 'soon' entries. Kimi K3 instead concluded the package was free, citing an MIT license found on the npm registry rather than the pricing page.

### DeepSeek V4.1 Flash
[View public run](https://agents.withgauge.com/p/runs/e240dd22-b4f5-43e4-9025-ac66dcb9604f) · [Read transcript](https://www.ax-check.com/natural.com/sessions/deepseek.json)
Quoted per-product rates taken from the pricing page, split by Consumer/Business/Enterprise tier and by rail (ACH, wire, realtime, instant). Flagged 'Soon' products and contact-sales tiers (seq 52, seq 124)
#### End-to-end onboarding
- **Onboarding needs a login**: Agent built a working example script against the hosted Natural sandbox SDK but never obtained a real API key during the session. It installed @naturalpay/sdk, wrote a working script, and tested the wiring with a placeholder key that correctly produced a 401 Unauthorized from the real hosted sandbox API (api.sandbox.natural.com), proving the code path is correct but no authenticated call ever succeeded. The agent explicitly stated it cannot self-provision a key because the dashboard requires human signup and KYB (identity/business verification).
  Event 122:

  ```text
  UnauthorizedError: UnauthorizedError
  Status code: 401
  Body: {
    "errors": [
      {
        "code": "unauthenticated",
        "detail": "Authentication is required."
  ```
  Event 124:

  ```text
  I can't run it end-to-end because I have no `NATURAL_API_KEY`, and I can't get one myself: keys come from the dashboard **after signup + KYB (identity/business verification), which is human-reviewed and human-gated**.
  ```
  Event 118:

  ```text
  Missing NATURAL_API_KEY.
  Get a sandbox key from the Natural dashboard: account menu (bottom-left) -> Sandbox -> Developers.
  exit=1
  ```

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

#### Blockers
- **No self-service way to obtain a sandbox API key**: Product requires human-reviewed KYB (business/identity verification) via the dashboard before any API key, agent key, or OAuth grant can be issued. This is normal product behavior (a fintech compliance gate), not an agent error or test-environment artifact. It fully blocked the agent from running an authenticated call against the sandbox.
  Event 124:

  ```text
  keys come from the dashboard **after signup + KYB (identity/business verification), which is human-reviewed and human-gated**
  ```
  Event 41:

  ```text
  **KYB is a hard gate.** Payments cannot move until business verification completes. It is human-reviewed, so plan for hours to days, not minutes.
  ```

#### Suggested Changes
- **Offer an instant, no-KYB sandbox key for first-time SDK evaluation**: Currently even sandbox keys require completing signup and KYB through the dashboard before any key exists (confirmed by the 401 when the SDK hit api.sandbox.natural.com with no valid key). Consider letting new developers generate a throwaway sandbox-only key immediately after email signup, deferring KYB to only when real money movement or production access is requested. Verify by running `NATURAL_API_KEY=sk_ntl_sandbox_... node natural-example.mjs` right after signup, with no KYB step in between.
  Event 117:

  ```text
  HTTP 401
  {"errors":[{"code":"unauthenticated","detail":"Authentication is required.","status":"401","meta":{"supportId":"req_c3e33dbcaed0"}}]}
  ```
  Event 124:

  ```text
  keys come from the dashboard **after signup + KYB (identity/business verification), which is human-reviewed and human-gated**
  ```

### Kimi K3
[View public run](https://agents.withgauge.com/p/runs/20ea860c-327e-4cb6-856b-e6316683f404) · [Read transcript](https://www.ax-check.com/natural.com/sessions/kimi.json)
Said the cost is $0 because the package is MIT-licensed open source, a license it checked against the npm registry. It stated the assumptions: no tiers or metering, and the only cost is the user's own compute. (seq 14, seq 29)
#### End-to-end onboarding
- **End-to-end onboarding not demonstrated**: The product 'Natural' turned out to be an open-source npm library (NaturalNode/natural), not a hosted product with accounts or credentials. The agent installed it locally via npm and ran a local script. There was no sign-up, no API key, no hosted database or authenticated operation involved, so onboarding in the credential/auth sense does not apply.
  Event 16:

  ```text
  "Natural" is confirmed: it's the open-source `natural` NLP library for Node.js (NaturalNode/natural). Important note up front: **it's not a hosted product** — there's no API, no account, no keys.
  ```
  Event 18:

  ```text
  cd /sandbox/repo && npm init -y >/dev/null 2>&1 && timeout 120 npm install natural 2>&1 | tail -3
  ```

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

#### Blockers
None identified in this transcript.

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

### Qwen 3.8 Max
[View public run](https://agents.withgauge.com/p/runs/3958f80a-266e-4834-b0bc-199dbbdf52a8) · [Read transcript](https://www.ax-check.com/natural.com/sessions/qwen.json)
Quoted percentage fees from the scraped pricing page with tier assumptions (Consumer, Business, Enterprise). It also flagged that some cells were ambiguous and several products are marked 'soon'. (seq 60, seq 138, README.md)
#### End-to-end onboarding
- **Onboarding needs a login**: The agent correctly identified that Natural requires a human to sign up, complete KYB/identity verification, and manually retrieve a sandbox API key from the dashboard before any authenticated SDK call can succeed. It built two working scripts and probed the live sandbox API with a dummy key, confirming the key was the only missing piece (401 unauthenticated), but never obtained a real credential itself, so no authenticated operation was ever completed.
  Event 112:

  ```text
  NATURAL_API_KEY is not set. Get a sandbox key from the dashboard:
    natural.com/login -> account menu (bottom-left) -> Sandbox toggle.
  ```
  Event 116:

  ```text
  Natural API rejected the request: HTTP 401
  {'errors': [{'code': 'unauthenticated', 'detail': 'Authentication is required.', 'status': '401', 'meta': {'supportId': 'req_04b38f6cd98c'}}]}
  ```
  Event 138:

  ```text
  Credentials require a human. There's no non-interactive path to a key: you sign up at `natural.com/signup`, complete KYB/identity verification, then flip the **Sandbox** toggle in the dashboard account menu and copy an `ak_ntl_sandbox_...` (or `sk_ntl_sandbox_...`) key.
  ```

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

#### Blockers
- **Sandbox API key requires human signup and KYB**: Natural's product design requires a human to sign up at natural.com/signup, pass identity verification (KYB), and manually copy a sandbox key from the dashboard before any SDK/API call authenticates. This is normal product behavior (a security/compliance gate), not a product defect or agent error, and it fully blocked any authenticated operation in this session.
  Event 112:

  ```text
  NATURAL_API_KEY is not set. Get a sandbox key from the dashboard:
    natural.com/login -> account menu (bottom-left) -> Sandbox toggle.
  ```
  Event 116:

  ```text
  Natural API rejected the request: HTTP 401
  {'errors': [{'code': 'unauthenticated', 'detail': 'Authentication is required.', 'status': '401', 'meta': {'supportId': 'req_04b38f6cd98c'}}]}
  ```
- **SDK class/field names in docs don't match installed package internals**: The agent repeatedly guessed at internal pydantic type names (wallet_attributes, ListWalletsResponseDataItemAttributes, wallet_data_item) based on documentation examples and got ImportError each time, before finding correct names by introspecting the installed naturalpay package directly. This is agent trial-and-error against an SDK whose internal type names are not published in docs, costing a few extra turns but was fully recovered.
  Event 92:

  ```text
  ImportError: cannot import name 'wallet_data_item' from 'naturalpay.wallets.types'
  ```
  Event 96:

  ```text
  ImportError: cannot import name 'ListWalletsResponseDataItemAttributes' from 'naturalpay.wallets.types' (/opt/freestyle/python/lib/python3.12/site-packages/naturalpay/wallets/types/__init__.py). Did you mean: 'ListAgentsWalletsResponseDataItemAttributes'?
  ```

#### Suggested Changes
- **Add table markup to the pricing page for reliable parsing**: Headless text extraction of natural.com/pricing renders as a flat token stream with no clear row/column grouping (product name, tier, rate all run together). Add semantic HTML table structure or a plain-text fallback so the Consumer/Business/Enterprise rate per product is unambiguous. Verify by re-running a text-extraction fetch and confirming each product's three tier values appear in clearly separable order.
  Event 60:

  ```text
  Transfer|Move funds between internal and external accounts|Consumer|Free|Standard|1.5%|Instant|Business|Free|Standard|1.5%|Instant|Enterprise|Free|Standard|Contact us|Instant
  ```
- **List exact SDK response type export names in the SDK docs**: Docs code samples show attribute access patterns but do not list the actual exported pydantic class names in the naturalpay package, forcing the agent to guess names like wallet_attributes or ListWalletsResponseDataItemAttributes and hit ImportError before finding the real names via source introspection. Add a short reference table of exported type names per resource to docs.natural.com/guides/platform/sdks.
  Event 88:

  ```text
  ImportError: cannot import name 'wallet_data_item' from 'naturalpay.wallets.types' (/opt/freestyle/python/lib/python3.12/site-packages/naturalpay/wallets/types/__init__.py)
  ```

### Task given to each agent
Help me build a simple example using Natural. 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 · 84/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 text/markdown request; no Markdown representation offered.
  ```

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

  ```text
  llms.txt links Start here, surfaces, common tasks, API reference, and llms-full.txt.
  ```

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

  ```text
  llms.txt gives ordered agent guidance: read playbook, connect OAuth, then operate.
  ```

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

  ```text
  llms.txt lists MCP, SDKs, CLI, and REST API surfaces with doc links.
  ```

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

  ```text
  skill.md is a standalone Markdown guide covering setup, tools, rules and journeys.
  ```

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

  ```text
  skill.md fetched directly at natural.com/skill.md with full setup and tool reference.
  ```

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

  ```text
  skill.md is 5303 tokens, a compact standalone guide within the 8000-token budget.
  ```

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

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

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

  ```text
  skill.md gives full setup, MCP tool table, core rules, and step-by-step journeys.
  ```

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

  ```text
  Homepage docs, guides, API reference, status, and llms.txt links all fetched successfully.
  ```


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

  ```text
  llms.txt links 'Start here' canonical integration decision rule and quickstart guides.
  ```

- **Pass** — Installation commands are extractable

  ```text
  CLI install command curl -fsSL https://natural.com/install.sh | bash is extractable.
  ```

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

  ```text
  SDK and CLI code examples shown inline without interaction.
  ```

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

  ```text
  Auth boundaries explicit: OAuth login, API key from dashboard Developers tab.
  ```


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

  ```text
  Pricing page renders all tiers and rates as static text, no interaction needed.
  ```

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

  ```text
  Prices stated openly: 0.1% Pay, 2.9% + 30¢ Accept, $1K/month Voice.
  ```

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

  ```text
  Units explicit: bps/percentages, per-transaction, monthly, Consumer/Business/Enterprise tiers.
  ```

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

  ```text
  3 of 3 sessions were judged on pricing; 0 fell short. DeepSeek V4.1 Flash: Quoted per-product rates taken from the pricing page, split by Consumer/Business/Enterprise tier and by rail (ACH, wire, realtime, instant). Flagged 'Soon' products and contact-sales tiers (seq 52, seq 124) Kimi K3: Said the cost is $0 because the package is MIT-licensed open source, a license it checked against the npm registry. It stated the assumptions: no tiers or metering, and the only cost is the user's own compute. (seq 14, seq 29) Qwen 3.8 Max: Quoted percentage fees from the scraped pricing page with tier assumptions (Consumer, Business, Enterprise). It also flagged that some cells were ambiguous and several products are marked 'soon'. (seq 60, seq 138, README.md) This behavioural item does not affect the fast grade.
  ```


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

  ```text
  llms.txt links an OpenAPI spec at docs.natural.com/api-reference/openapi.json for codegen.
  ```

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

  ```text
  Hosted MCP at mcp.natural.com documented with OAuth, tools, scopes, and fallbacks.
  ```

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

  ```text
  CLI install via curl install.sh, natural login, and version pinning documented.
  ```

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

  ```text
  npm @naturalpay/sdk and PyPI naturalpay both returned HTTP 200 registry lookups.
  ```

- **Pass** — Agent skills are published

  ```text
  A published skill.md defines the Natural agent skill with tools and journeys.
  ```



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