HTTP

API

Free: first 1,000,000 requests every month. No card needed.

After that, per 1,000 requests (USD): Preflight $0.25 · Hop $0.40 · Pixel $0.15 · Inspect $0.20. POST /v1/event is ingest and is not billed.

$50 CAD/month plan (billed in Canadian dollars): your own production API key and meter; usage beyond the free 1M requests/month is charged at the USD rates above.

Public machine endpoints. CORS is open. Demo key surf_demo_000000000000 — optional on inspect, preflight, and ingest. Missing key bills the demo meter. Bad key returns 401. Killed hops return 410 and do not bill.

Get a key, then call

POST /v1/keys returns a key instantly. No email, no card. Send it as Authorization: Bearer <key> or X-Surface-Key: <key>. Anonymous calls still work and share the demo meter. Your own usage is GET /v1/usage with the same header, or the usage_url from the mint response.

curl -s -X POST https://nova-otter-delta-cloud.grok.me/v1/keys
curl -s -H "Authorization: Bearer $KEY" \
  "https://nova-otter-delta-cloud.grok.me/v1/preflight?url=https://youtu.be/jNQXAC9IVRw"
import json, urllib.request
mint = urllib.request.Request(
    "https://nova-otter-delta-cloud.grok.me/v1/keys", method="POST")
key = json.load(urllib.request.urlopen(mint))["key"]
req = urllib.request.Request(
    "https://nova-otter-delta-cloud.grok.me/v1/preflight?url=https://youtu.be/jNQXAC9IVRw",
    headers={"Authorization": "Bearer " + key})
print(urllib.request.urlopen(req).read().decode())

README badge

Show that your project's links are checked by Surface. Each view of the badge is a normal Surface request and counts toward your free tier.

links checked | Surface
[![links checked | Surface](https://nova-otter-delta-cloud.grok.me/badge/YOUR-REPO.svg)](https://nova-otter-delta-cloud.grok.me)

Add ?key=YOUR_KEY to the image URL to count views on your own key.

GET /h/:code

$0.40 / 1k

302 to the hop destination if the host is on the allow-list. Killed hops return 410. Demo code: xai.

GET /px/:code

$0.15 / 1k

Returns a 1×1 GIF. Embed as an image. Demo code: pxdemo.

POST /mcp

$0.25 / 1k on tool call

Model Context Protocol. Tool name preflight_url. Cursor / Claude: type http, url https://nova-otter-delta-cloud.grok.me/mcp. initialize, tools/list, then tools/call. Same unwrap + next as GET /v1/preflight.

GET /v1/preflight

$0.25 / 1k

Pass url= as a query (or JSON on POST). Unwraps short links (t.co, bit.ly, lnkd.in, youtu.be). Returns final_url, unwrapped, verdict, and next: fetch or skip. We never return the page body. Private hosts and odd ports are refused.

GET /v1/inspect

$0.20 / 1k

Classifies the caller from User-Agent: bot, browser, or script. Device and engine included.

POST /v1/event

— ingest, not billed

JSON body optional. Authorization: Bearer surf_demo_… tags that meter. { "name": "signup" }. Returns 202 with a request id. Not billed.

Where agents find Surface

MCP client config:

{"mcpServers":{"surface":{"url":"https://nova-otter-delta-cloud.grok.me/mcp"}}}

Limits & free tier

1,000,000 free requests per calendar month (UTC) per key. Requests without a key count against the shared demo meter, which is rate-limited to 60 requests/min per IP. A key is limited to 600 requests/min. Above the free tier, usage is billed at list prices. Every JSON response includes free_remaining when a key is sent.

Call it from here

Same requests a script would make. Watch the console log update.

GET /h/xai
Ready.

Mint a key on Start or settle usage on Billing.

More tools from Canada Site Ops