Prowl
88/100
prowl
Benchmarked Oct 06, 2026

Surrealdb

A scalable, distributed, collaborative, document-graph database, for the realtime web

developerdatadatabase api_benchmark csharpgojavajavascriptphppythonrust public
Benchmark Your API

Score Breakdown

Documentation10/10
Error Clarity10/10
Auth Simplicity10/10
Latency9/10
Consistency9/10
First-Try Success9/10
Parseability9/10
Token Efficiency7/10

Benchmark Analysis Log

Full LLM thinking from the 4-phase benchmark pipeline.

Analyze
{
  "service_type": "rest_api",
  "base_url": "https://surrealdb.com",
  "auth_method": "none",
  "auth_config": {},
  "endpoints": [
    {
      "path": "/api/cloud/pricing.json",
      "method": "GET",
      "purpose": "Get the SurrealDB Cloud pricing catalogue (all published plans)",
      "params": {},
      "response_format": "json",
      "is_primary": true
    },
    {
      "path": "/api/learn/{course}.json",
      "method": "GET",
      "purpose": "Course outlines (currently returns empty array; not wired to content)",
      "params": {
        "course": {"type": "string", "required": true}
      },
      "response_format": "json",
      "is_primary": false
    },
    {
      "path": "/{page}.md",
      "method": "GET",
      "purpose": "Markdown rendering of any site page (also via Accept: text/markdown)",
      "params": {},
      "response_format": "text",
      "is_primary": false
    },
    {
      "path": "/index.md",
      "method": "GET",
      "purpose": "Markdown rendering of the homepage",
      "params": {},
      "response_format": "text",
      "is_primary": false
    },
    {
      "path": "/.well-known/mcp/server-card.json",
      "method": "GET",
      "purpose": "MCP server discovery card for the SurrealDB MCP server",
      "params": {},
      "response_format": "json",
      "is_primary": false
    },
    {
      "path": "/.well-known/agent-skills/index.json",
      "method": "GET",
      "purpose": "Index of installable agent skills (SurrealQL, CLI, SDKs, vector search, performance)",
      "params": {},
      "response_format": "json",
      "is_primary": false
    },
    {
      "path": "/openapi.json",
      "method": "GET",
      "purpose": "OpenAPI description of the website origin's JSON surface",
      "params": {},
      "response_format": "json",
      "is_primary": false
    }
  ],
  "pricing_model": {
    "type": "free_tier",
    "details": {
      "notes": "Website origin is free and unauthenticated; pricing catalogue available at /api/cloud/pricing.json. Free tier available at surrealdb.com/cloud; self-hosted option source-available."
    },
    "free_tier": {"requests": null, "period": null},
    "paid_tiers": []
  },
  "rate_limits": {"rpm": null, "tpm": null, "daily": null, "concurrent": null},
  "capabilities": [
    "web_page_markdown_rendering",
    "content_negotiation",
    "cloud_pricing_data",
    "course_outlines",
    "agent_discovery_documents",
    "mcp_server_discovery",
    "agent_skills_index"
  ],
  "agent_readiness": {
    "supports_x402": false,
    "supports_streaming": false,
    "has_sandbox": false,
    "sdks": ["rust", "javascript", "python", "go", "java", "csharp", "php"],
    "agent_auth_methods": ["public"]
  }
}
Plan
```json
{
  "tests": [
    {
      "name": "get_cloud_pricing_catalogue",
      "endpoint": "/api/cloud/pricing.json",
      "method": "GET",
      "headers": {"Accept": "application/json"},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns the full pricing catalogue with cloud, selfHosted, and support plan arrays; each plan has id, name, price, features, cta.",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "cloud", "type": "array", "min_length": 1}
    },
    {
      "name": "get_homepage_markdown",
      "endpoint": "/index.md",
      "method": "GET",
      "headers": {"Accept": "text/markdown"},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns the homepage as a CommonMark document beginning with a level-one heading, Content-Type text/markdown, with x-markdown-tokens and x-original-tokens headers.",
      "metrics": ["latency", "status_code", "content_type", "token_headers"],
      "validation": {"field": "body", "type": "string", "min_length": 50}
    },
    {
      "name": "get_top_level_page_markdown",
      "endpoint": "/pricing.md",
      "method": "GET",
      "headers": {"Accept": "text/markdown"},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns the pricing page as markdown with x-markdown-tokens and x-original-tokens headers and an X-API-Version header.",
      "metrics": ["latency", "status_code", "content_type"],
      "validation": {"field": "body", "type": "string", "min_length": 50}
    },
    {
      "name": "content_negotiation_on_page_url",
      "endpoint": "/pricing",
      "method": "GET",
      "headers": {"Accept": "text/markdown"},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Content negotiation: requesting the ordinary page URL with Accept: text/markdown returns the same markdown document as /pricing.md, served as text/markdown.",
      "metrics": ["latency", "status_code", "content_type", "negotiation_match"],
      "validation": {"field": "content_type", "type": "string", "equals": "text/markdown"}
    },
    {
      "name": "get_nested_section_page_markdown",
      "endpoint": "/why/vs-vector-databases.md",
      "method": "GET",
      "headers": {"Accept": "text/markdown"},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns a two-segment page's markdown twin with token-estimate headers.",
      "metrics": ["latency", "status_code"],
      "validation": {"field": "body", "type": "string", "min_length": 50}
    },
    {
      "name": "get_mcp_server_card",
      "endpoint": "/.well-known/mcp/server-card.json",
      "method": "GET",
      "headers": {"Accept": "application/json"},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns the MCP server discovery card describing transport, endpoint (https://mcp.surrealdb.com) and docs.",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "body", "type": "object"}
    },
    {
      "name": "get_agent_skills_index",
      "endpoint": "/.well-known/agent-skills/index.json",
      "method": "GET",
      "headers": {"Accept": "application/json"},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns the agent skills index listing SurrealQL, CLI, SDK, vector-search and performance skills, each with a URL and SHA-256 digest.",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "body", "type": "object"}
    },
    {
      "name": "get_openapi_description",
      "endpoint": "/openapi.json",
      "method": "GET",
      "headers": {"Accept": "application/json"},
      "payload": {},
      "expected_status": 200,
      "intent": "happy_path",
      "expected_behavior": "Returns the OpenAPI 3.1 description of the website origin with info.version and paths.",
      "metrics": ["latency", "status_code", "accuracy"],
      "validation": {"field": "openapi", "type": "string"}
    },
    {
      "name": "unknown_api_path_returns_problem_json",
      "endpoint": "/api/does-not-exist.json",
      "method": "GET",
      "headers": {"Accept": "application/json"},
      "payload": {},
      "expected_status": 404,
      "intent": "validation",
      "expected_behavior": "Unknown /api path returns an RFC 9457 application/problem+json body with type, title, status, code and resolution fields. A structured 404 is the correct behaviour.",
      "metrics": ["status_code", "error_shape"],
      "validation": {"field": "code", "type": "string", "min_length": 1}
    },
    {
      "name": "missing_markdown_page_returns_markdown_404",
      "endpoint": "/this-page-does-not-exist-xyz.md",
      "method"
Execute

8/12 tests passed

TestEndpointStatusLatency
get_cloud_pricing_catalogueGET /api/cloud/pricing.json200105ms
get_homepage_markdownGET /index.md200197ms
get_top_level_page_markdownGET /pricing.md200286ms
content_negotiation_on_page_urlGET /pricing200658ms
get_nested_section_page_markdownGET /why/vs-vector-databases.md200209ms
get_mcp_server_cardGET /.well-known/mcp/server-card.json200130ms
get_agent_skills_indexGET /.well-known/agent-skills/index.json200121ms
get_openapi_descriptionGET /openapi.json20043ms
unknown_api_path_returns_problem_jsonGET /api/does-not-exist.json40463ms
missing_markdown_page_returns_markdown_404GET /this-page-does-not-exist-xyz.md40469ms
Interpret
{"model": "deepseek", "data": {"overall": 78, "dimensions": {"token_efficiency": 7.0, "first_try_success": 9.0, "response_parseability": 9.0, "error_clarity": 10.0, "doc_quality": 10.0, "auth_simplicity": 10.0, "latency": 9.0, "consistency": 9.0}, "pricing_normalized": {"cost_per_1k_requests": null, "cost_per_1m_input_tokens": null, "cost_per_1m_output_tokens": null, "free_tier_requests": null, "estimated_monthly_cost_light": null, "estimated_monthly_cost_heavy": null}, "issues": [{"severity": "high", "detail": "Documented /api/learn/{course}.json endpoint returns 404 resource_not_found instead of the expected 200 with (empty or populated) course outline. The endpoint is advertised in capabilities and OpenAPI but is not wired.", "endpoint": "/api/learn/{course}.json"}, {"severity": "low", "detail": "Markdown 404 responses are human prose rather than structured problem+json; in the JSON API namespace problem+json is used, but page-level markdown 404s return prose. Minor inconsistency in error format between surfaces.", "endpoint": "/{page}.md"}, {"severity": "low", "detail": "Content-negotiation test on /pricing took 658ms, noticeably slower than the .md twins (~200ms); the negotiation path appears to run server-side rendering before downgrading to markdown.", "endpoint": "/pricing"}], "recommendations": ["Wire up or remove the /api/learn/{course}.json endpoint so the OpenAPI description matches real behavior; agents relying on the advertised outline will fail.", "Consider emitting structured problem+json for markdown page 404s (or at least a machine-parseable header/field) to keep error handling uniform across surfaces.", "Optimize content-negotiation rendering so Accept: text/markdown requests don't pay full HTML-render cost; prefer the precomputed markdown twin.", "This origin is a website/content surface, not the SurrealDB product API. Docs already point to api.surrealdb.com for the platform API \u2014 keep that disambiguation prominent so agents route correctly.", "No free_tier request count is exposed; consider documenting a concrete rate limit so agents can size their usage."]}}

Agent Readiness

x402 Payments
Not supported
Streaming
No
Sandbox
None
Agent Auth
public
SDKs
csharp, go, java, javascript, php, python, rust
MCP Support
No

Embed your Prowl badge

Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.

Prowl agent-readiness badge
<a href="https://prowl.world/service/surrealdb">
  <img src="https://prowl.world/badge/surrealdb.svg" height="56" alt="Agent-readiness on Prowl">
</a>

Options: ?style=light|dark · ?size=sm|md · ?variant=certified (claimed + DNS-verified only) · badge generator with preview

Want the full interactive view?

See operational metrics, LLM evaluations, agent readiness, and more.

Open in Dashboard