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.
[](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
- Remote MCP server (tool: preflight_url)
- Official MCP Registry: me.grok.nova-otter-delta-cloud/surface
- npm @surfaceapi/surface
- PyPI surfaceapi
- Hugging Face Space
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.
Ready.