Skip to content
Gauge

ax-check.com

Vonage

vonage.com

ax-check.com

Checked 29 September 2026

C

63/100

Agents need your login

Vonage pricing is clear, but its llms.txt skips developer docs.

13 of 23 checks passed: quickstarts and pricing are directly readable, but llms.txt indexes only marketing content, not APIs or docs.

5 fixes to start with

Concrete changes, backed by what we found.

Onboarding

Give agents a clear login handoff and a way to resume setup.

Agents cannot progress through onboarding without human help. Provide an agent-accessible path through authentication and setup.

Docs

Return Markdown when clients request text/markdown.

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

Docs

Add links to your product documentation and quickstart in /llms.txt.

llms.txt exists but indexes only resources, publications, customers, webinars and articles, not developer docs or APIs.

Docs

Tell agents where to start and organize the links in /llms.txt.

llms.txt lists marketing content only, with no starting guidance or navigation toward developer documentation.

Docs

List every offered API, MCP, and skills surface in /llms.txt.

llms.txt never mentions the offered APIs, SDKs, CLI or MCP surfaces.

Recorded coding sessions

Same task, 3 models, no vonage.com account. Recorded 29 September 2026 on Pi.

3 recorded · 50s

50s · recorded

Session findings

Select a finding to see it in context.

piv0.84.2
modelQwen 3.8 Maxcwd/sandbox/repo
Help me build a simple example using Vonage. 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.
Thinking…

The user is asking for a simple Vonage example, and wants an explanation of the pricing structure and an assessment of how easy it is to manage. Let me check the environment and see what's available. Vonage is a communications API provider (SMS, Voice, WhatsApp, etc.). There's a Node SDK (vonage / @vonage/server-sdk) and Python (vonage).

But an important point: does this have a developer workflow I can actually operate on? Using the Vonage API requires an API key and secret from a Vonage account, which I don't have. I can't create an account either (payment/authentication required). So I can write the sample code, but I can't actually run it against the live API without credentials.

Let me check whether credentials exist in the sandbox environment and which tools are available.

According to the instructions: "If there's no developer workflow you can operate on for this product, state that clearly and stop." I should check whether VONAGE_API_KEY etc. exist in the environment. Let me check quickly.

Plan:

  1. Check environment variables for Vonage credentials.
  2. If credentials exist, install the SDK and create a small example (SMS send), and possibly test it.
  3. Explain the pricing structure (SMS is per-message pricing based on destination, Voice is per-minute, etc.).
  4. Assessment of ease of management.

If there are no credentials, I can still create the sample code file, but should I stop? The instructions say to state clearly and stop if there's no developer workflow I can operate on. Writing sample code is itself a kind of workflow, but actually executing it requires credentials. I think the right response is this: check for credentials, and if they're absent, state that I'm blocked by the lack of credentials, and then provide the sample code file and information about the pricing structure. Let me check the environment first.

$ env | grep -i -E "vonage|nexmo" ; echo "---" ; ls -la /sandbox/repo ; echo "---" ; which node npm python3 pip3 2>/dev/null{"content":[{"text":"---\ntotal 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Sep 29 08:16 ..\ndrwxr-xr-x 8 root root 4096 Sep 24 …ctrl+o
{"content":[{"text":"---\ntotal 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Sep 29 08:16 ..\ndrwxr-xr-x 8 root root 4096 Sep 24 20:05 .git\n-rw-r--r-- 1 root root  408 Sep 18 08:00 .gitignore\n---\n/usr/local/bin/node\n/usr/local/bin/npm\n/usr/local/bin/python3\n/usr/local/bin/pip3\n","type":"text"}]}
Thinking…

No Vonage credentials in the environment. Repo is essentially empty. Vonage is a hosted communications API — no local stack needed, good. However, calling the API requires API key/secret obtained from a Vonage account (signup, phone number verification, credit card required for paid usage). Can't create an account.

So: I can write sample code and install the SDK (no credentials needed to install the SDK), but I can't execute live calls. Is this "no developer workflow you can act on"? There is a developer workflow (SDK installation, code writing, and if credentials existed, execution too). I'm blocked on the live-call part by the lack of credentials. Per instructions: "let me know if you get blocked."

I think the best approach is this: be upfront — no credentials, can't execute live calls. But I can build a sample and verify the SDK works locally (e.g., dry-run/verification script that fails gracefully). Keep it light: npm install @vonage/server-sdk and write a small SMS-sending example, do a code-level check (import works). Then pricing and ease-of-management.

Actually, the user said "if there's no developer workflow you can act on for this product, say so clearly and stop." Since a developer workflow exists (SDK, API), I'll act within the possible scope and report the credentials blocker. Keep it light — install SDK, write one sample file, verify import, stop.

Let's run npm install @vonage/server-sdk.

There are no Vonage credentials in this environment, and the repository is empty. Since Vonage is a hosted communication API (no local stack required — this fits your constraint), I'll build a lightweight SDK sample, verify it compiles/runs, and honestly report where I get stuck.

$ cd /sandbox/repo && npm init -y >/dev/null && npm install @vonage/server-sdk 2>&1 | tail -3{"content":[{"text":" run `npm fund` for details\n\nfound 0 vulnerabilities\n","type":"text"}]}
Thinking…

SDK installation is complete. Going to create a simple sample: send an SMS via SMS with @vonage/server-sdk, credentials pulled from environment variables, and do a check for whether the credentials exist without making the actual call (fail gracefully). Then run it to demonstrate the behavior.

write /sandbox/repo/send-sms.mjs{"content":[{"text":"Successfully wrote 1469 bytes to /sandbox/repo/send-sms.mjs","type":"text"}]}
Thinking…

Let's verify that the script at least loads and reaches the credentials check (a syntax/import check without making an actual API call).

Let me verify the script loads correctly and the SDK imports fine (it will stop at the credentials check since none are set):

$ cd /sandbox/repo && node send-sms.mjs; echo "exit: $?" ; node -e "import('@vonage/server-sdk').then(m => console.log('SDK import OK, version:', require('@vonage/server-sdk/package.json').version))"{"content":[{"text":"Missing VONAGE_API_KEY / VONAGE_API_SECRET. Set them and retry.\nexit: 1\nnode:internal/modules/esm/resolve:314\n return new ERR_PACKAGE_P…ctrl+o
{"content":[{"text":"Missing VONAGE_API_KEY / VONAGE_API_SECRET. Set them and retry.\nexit: 1\nnode:internal/modules/esm/resolve:314\n  return new ERR_PACKAGE_PATH_NOT_EXPORTED(\n         ^\n\nError [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './package.json' is not defined by \"exports\" in /sandbox/repo/node_modules/@vonage/server-sdk/package.json\n    at exportsNotFound (node:internal/modules/esm/resolve:314:10)\n    at packageExportsResolve (node:internal/modules/esm/resolve:661:9)\n    at resolveExports (node:internal/modules/cjs/loader:664:36)\n    at Function._findPath (node:internal/modules/cjs/loader:731:31)\n    at Function._resolveFilename (node:internal/modules/cjs/loader:1415:27)\n    at defaultResolveImpl (node:internal/modules/cjs/loader:1040:19)\n    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1045:22)\n    at Function._load (node:internal/modules/cjs/loader:1216:25)\n    at wrapModuleLoad (node:internal/modules/cjs/loader:254:19)\n    at Module.require (node:internal/modules/cjs/loader:1527:12) {\n  code: 'ERR_PACKAGE_PATH_NOT_EXPORTED'\n}\n\nNode.js v22.23.2\n\n\nCommand exited with code 1","type":"text"}],"details":{}}
Thinking…

The script itself worked fine (it reached the credentials check and displayed an appropriate message — good). The version check failed simply because package.json wasn't exported via subpath. Check the version with npm ls.

The script is working correctly — it loaded the SDK and stopped with a clear message at the credentials check (the second error was merely due to my version-probe attempt, and package.json is not a subpath that's exposed in that package). Let me check the version via a different method:

$ cd /sandbox/repo && npm ls @vonage/server-sdk{"content":[{"text":"repo@1.0.0 /sandbox/repo\n└── @vonage/server-sdk@3.30.1\n\n","type":"text"}]}
Thinking…

Done. Next, the summary: what I built, the parts that were blocked (no credentials — can't do live sending), how the pricing structure works, and ease of management for me.

Done. Here's the summary:

What I built

  • /sandbox/repo/send-sms.mjs — a minimal SMS example using the official @vonage/server-sdk (v3.30.1, installed via npm). It reads credentials from env vars, sends an SMS, and parses the per-message response (status, message ID, price).
  • Verified: the SDK imports and the script runs cleanly up to the credentials check.

Where I'm blocked

No Vonage credentials exist in this environment, so I can't execute a live send. Getting them requires creating an account at dashboard.nexmo.com (signup + phone verification), which I can't do for you. Once you set VONAGE_API_KEY / VONAGE_API_SECRET, it runs with:

node send-sms.mjs +15551234567 "Hello"

Note: free trial accounts can only message verified test numbers; a sender ID like VonageDemo only works for SMS in some countries.

No local service stacks were needed — Vonage is fully hosted, which fits your "stay light" constraint.

How pricing works

  • Pay-per-use, no monthly fee for the core APIs. You add credit to your account and usage is deducted per message/minute.
  • SMS: priced per message part, varying by destination country (roughly $0.005–$0.10+ per SMS; long messages split into 153-char segments, each billed separately). The API response includes the exact message-price.
  • Voice: per-minute rates by destination; inbound calls are generally free or cheap, outbound varies.
  • Verify (2FA): ~$0.05–$0.10 per verification, by channel/country.
  • Numbers: monthly rental for virtual numbers (~$1–$3/month depending on country/type), plus SMS capabilities.
  • Free trial: ~€2 credit with restrictions (verified numbers only, prefixed sender).

Ease of management (for me)

Yes, easy. Plain HTTP/JSON APIs, clean official SDKs (Node/Python/Java/.NET/PHP/Ruby), simple API key+secret auth for SMS/Verify, and synchronous request/response for most operations — easy to script, test, and debug. The friction points are: (1) account/credential provisioning is human-gated, (2) Voice and WhatsApp require extra setup (NCCO JSON, app objects, JWT/private-key auth, and webhooks need a public URL for inbound events), and (3) per-country compliance rules (sender IDs, 10DLC in the US) can surprise you. For SMS/Verify specifically, it's very agent-friendly once credentials exist.

AX Fundamentals

23 checks. Open an area for details.

This check is a quick preview. Test more tasks and models with Gauge Agents.

Test your product with Gauge Agents

AX Check by Gauge