Surf — MPP Grade A
On-chain Activity
Compliance Checks
2 issues
- 402 response missing Cache-Control: no-store
- POST endpoint challenge missing digest parameter (SHOULD per spec)
Paid Operations (17)
POST /api/v1/twitter/search 0.005 USDC.e
Search Twitter with advanced operators. Returns ~20 tweets per page with engagement summary. Use cursor for pagination.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| cursor | string | No | Pagination cursor |
| end_date | string | No | Only tweets before this time. YYYY-MM-DD (inclusive through end of day UTC) or ISO 8601 datetime with Z/offset (e.g. 2026-04-13T14:30:00Z) |
| expand_urls | boolean | No | When true, auto-crawl entity URLs and attach crawled_content to tweets. Off by default: responses can grow by up to 4KB per expanded URL. Use surf_web_crawl(url) for targeted crawls instead. |
| query | string | Yes | Search query with advanced operators |
| sort | string | No |
Sort order: "latest" (newest first) or "top" (most engaged). Default: "latest".
enum: latest, top |
| start_date | string | No | Only tweets on or after this time. YYYY-MM-DD (UTC midnight) or ISO 8601 datetime with Z/offset (e.g. 2026-04-13T14:30:00Z) |
POST /api/v1/twitter/tweet 0.005 USDC.e
Fetch a tweet with full thread context (all conversation participants), parent tweet, and optionally replies/quotes. Each section returns ~20 items per upstream page with pagination cursors.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| expand_urls | boolean | No | When true, auto-crawl entity URLs and attach crawled_content to tweets. Off by default: responses can grow by up to 4KB per expanded URL. Use surf_web_crawl(url) for targeted crawls instead. |
| include | array | No | Optional data to include |
| ref | string | Yes | Tweet ID or URL |
POST /api/v1/twitter/user 0.005 USDC.e
Fetch a user profile with ~20 recent tweets per page. Use cursor for pagination. Optionally include replies in timeline and mentions.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| cursor | string | No | Pagination cursor from next_cursor |
| expand_urls | boolean | No | When true, auto-crawl entity URLs and attach crawled_content to tweets. Off by default: responses can grow by up to 4KB per expanded URL. Use surf_web_crawl(url) for targeted crawls instead. |
| include_mentions | boolean | No | Include mentions timeline |
| include_replies | boolean | No | Include replies |
| ref | string | Yes | Username or @username |
POST /api/v1/reddit/search 0.005 USDC.e
Search posts across Reddit with sort and time filters.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| cursor | string | No | Pagination cursor |
| end_date | string | No | Only posts before this date (YYYY-MM-DD) |
| limit | integer | No |
Max results
default: 25
|
| query | string | Yes | Search query |
| sort | string | No |
Sort order
enum: relevance, hot, top, new, comments default: relevance
|
| start_date | string | No | Only posts on or after this date (YYYY-MM-DD) |
| time | string | No |
Time range
enum: hour, day, week, month, year, all default: all
|
POST /api/v1/reddit/post 0.005 USDC.e
Fetch a Reddit post with comments, depth/sort control.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| comment_depth | integer | No |
Max nesting depth
default: 5
|
| comment_limit | integer | No |
Max comments
default: 50
|
| comment_sort | string | No |
Comment sort
enum: confidence, top, new, controversial, old, qa default: confidence
|
| ref | string | Yes | Post ID or Reddit URL |
POST /api/v1/reddit/subreddit 0.005 USDC.e
Fetch subreddit info and top posts.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| limit | integer | No |
Max posts
default: 25
|
| name | string | Yes | Subreddit name |
| sort | string | No |
Post sort
enum: hot, new, top, rising default: hot
|
| time | string | No |
Time range
enum: hour, day, week, month, year, all default: day
|
POST /api/v1/reddit/user 0.005 USDC.e
Fetch a Reddit user profile with recent posts and comments.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| include_comments | boolean | No | Include recent comments |
| include_posts | boolean | No |
Include recent posts
default: true
|
| max_results | integer | No |
Max posts/comments
default: 25
|
| ref | string | Yes | Reddit username |
POST /api/v1/web/search 0.01 USDC.e
Semantic web search powered by Exa. Returns titles, URLs, and a query-relevant excerpt per result.
- Amount
- 0.01 (raw 10000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.01 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| exclude_domains | array | No | Exclude results from these domains. Useful for filtering noisy aggregators or SEO farms when you've seen them dominate results (e.g. ['pinterest.com', 'quora.com']). |
| include_domains | array | No | Restrict results to these domains (e.g. ['arxiv.org']) |
| published_within_days | integer | No | Restrict to results published within the last N days. Skip this for broad queries - it excludes pages without publish-date metadata. Common values: 1, 7, 30, 365. |
| query | string | Yes | Search query |
POST /api/v1/web/crawl 0.002 USDC.e
Extract content from a web page as markdown, HTML, text, or JSON.
- Amount
- 0.002 (raw 2000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.002 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| format | string | No |
Output format. Use 'json' when you want the structured SSR blob (TikTok, Pinterest, etc.) instead of article text.
enum: markdown, html, text, json default: markdown
|
| selector | string | No | CSS selector |
| url | string | Yes | URL to crawl |
Response Schema (200)
| Field | Type | Description |
|---|---|---|
| alternatives | array[string] | When outcome=unsupported_target, alternative URL patterns or tools that may work. |
| content | array[string] | - |
| outcome | string | Classified result type. Use this to branch your retry / strategy logic. |
| paywalled | boolean | True when the URL is paywalled. Equivalent to outcome === 'paywall'. |
| status | integer | - |
| unsupported_reason | string | When outcome=unsupported_target, why the URL pattern is permanently unsupported. |
| url | string | - |
POST /api/v1/github/search 0.002 USDC.e
Search GitHub repositories and conversations (issues + PRs). Supports GitHub search syntax.
- Amount
- 0.002 (raw 2000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.002 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| kind | string | No |
What to search: repos or conversations (issues+PRs)
enum: repos, conversations default: repos
|
| order | string | No |
Sort direction (default: desc)
enum: desc, asc default: desc
|
| page | integer | No |
Page number
default: 1
|
| per_page | integer | No |
Results per page
default: 20
|
| query | string | Yes | Search query (supports GitHub search syntax) |
| sort | string | No |
Sort field. Repos: stars, forks, updated, help-wanted-issues. Conversations: comments, reactions, interactions, created, updated. Default: best-match (relevance)
enum: best-match, stars, forks, updated, help-wanted-issues, comments, reactions, interactions, created default: best-match
|
POST /api/v1/github/get 0.002 USDC.e
Fetch repository data: metadata, readme, files, tree, commits, branches, releases, PRs, or issues.
- Amount
- 0.002 (raw 2000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.002 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| kind | string | Yes |
What to fetch
enum: repo, readme, file, tree, commits, branches, releases, pr, issue |
| number | integer | No | PR or issue number (required for kind=pr|issue) |
| owner | string | Yes | Repository owner |
| page | integer | No |
Page number for paginated results
default: 1
|
| path | string | No | File path (required for kind=file) |
| per_page | integer | No |
Results per page
default: 30
|
| ref | string | No | Branch, tag, or commit SHA |
| repo | string | Yes | Repository name |
POST /api/v1/github/snapshot 0.005 USDC.e
Generate or retrieve a downloadable repository snapshot bundle. Returns cached by default (free). Set refresh=true to trigger new build (paid). Pass job_id to poll status.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| job_id | string | No | Job ID to poll build status |
| owner | string | Yes | Repository owner |
| ref | string | No | Branch or tag (default: repo default branch) |
| refresh | boolean | No | Set true to trigger a new snapshot build (paid) |
| repo | string | Yes | Repository name |
POST /api/v1/amazon/search 0.005 USDC.e
Search Amazon by keyword (query) or browse bestsellers by category (category_slug). Regional TLDs: com, co.uk, de, fr, es, it. Returns ranked products with VAT-exclusive net price computed alongside gross.
- Amount
- 0.005 (raw 5000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.005 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| category | string | No | Amazon node ID to narrow results (returned in `refinements` from a prior call) |
| category_slug | string | No | Amazon bestsellers category slug, e.g. 'electronics' (.com), 'elektronik' (.de), 'electronique' (.fr). Invalid slugs return 'not_found' - retry with a correct slug. |
| currency | string | No | Override display currency. Validated against per-tld allow-list. |
| geo | string | No | Postal code Amazon uses to compute shipping & delivery dates (e.g. '28001' for Madrid) |
| include_paid | boolean | No | Include sponsored ad results (default: dropped) |
| include_suggested | boolean | No | Include 'people also searched for' suggestions (default: dropped) |
| merchant | string | No | Filter to a specific seller ID |
| min_reviews | integer | No | Drop hits with fewer than N reviews. Pair with sort_by='most_reviewed' for a trust-weighted result. Applied client-side to organic/paid/suggested. |
| page | integer | No |
Page number (1-20)
default: 1
|
| query | string | No | Free-text keyword query (mutually exclusive with category_slug) |
| response_format | string | No |
'concise' drops images/variants/deep seller metadata; 'detailed' keeps everything
enum: concise, detailed default: concise
|
| sort_by | string | No |
Server-side sort, except 'most_reviewed' which re-ranks the current page client-side by review count desc (rating tiebreaker). Pair 'most_reviewed' with min_reviews to skip thinly-reviewed items.
enum: most_recent, price_low_to_high, price_high_to_low, featured, average_review, bestsellers, most_reviewed |
| tld | string | No |
Amazon marketplace: com | co.uk | de | fr | es | it
enum: com, co.uk, de, fr, es, it default: com
|
POST /api/v1/amazon/product 0.01 USDC.e
Fetch live product detail by 10-char ASIN on a regional marketplace (com, co.uk, de, fr, es, it). Runs 2 upstream calls in parallel (amazon_product + amazon_pricing), returning buybox + full offer listing (including used-condition breakdown) + embedded top reviews.
- Amount
- 0.01 (raw 10000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.01 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| asin | string | Yes | 10-char Amazon product ID (e.g. B0F59XT8QM) |
| currency | string | No | Override display currency. Validated against per-tld allow-list. |
| geo | string | No | Postal code for region-accurate pricing and delivery dates |
| response_format | string | No |
'concise' drops images/variants/deep seller metadata; 'detailed' keeps everything
enum: concise, detailed default: concise
|
| tld | string | No |
Amazon marketplace: com | co.uk | de | fr | es | it
enum: com, co.uk, de, fr, es, it default: com
|
POST /api/v1/youtube/subtitles 0.01 USDC.e
Fetch YouTube subtitles/transcript for an 11-char video_id in the requested language and origin (uploader_provided | auto_generated). Returns a presigned download URL to a WebVTT file (transcripts can be 50K+ chars, so file delivery instead of inline text). URL expires in ~1 hour; call again to refresh. Cached 7 days server-side — repeat calls on the same (video_id, language_code, origin) tuple are free after the first.
- Amount
- 0.01 (raw 10000)
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
price: 0.01 pricingMode: fixed protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| format | string | No |
'inline' (default): include vtt in response when transcript fits the inline cap; otherwise omit it and set vtt_omitted_reason. 'url': never include vtt; caller fetches download_url. download_url is always present.
enum: inline, url default: inline
|
| language_code | string | No |
ISO 639-1 language code (e.g. 'en', 'de', 'fr')
default: en
|
| origin | string | No |
'uploader_provided' for human captions (default), 'auto_generated' for YouTube auto-captions.
enum: uploader_provided, auto_generated default: uploader_provided
|
| video_id | string | Yes | 11-char YouTube video ID (e.g. dQw4w9WgXcQ) |
POST /api/v1/inference/v1/chat/completions dynamic USDC.e
OpenAI-compatible chat completion endpoint. Supports streaming via SSE. Dynamic pricing based on model and token usage.
- Amount
- dynamic
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
pricingMode: quote protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| max_completion_tokens | No | Max completion tokens (preferred over max_tokens) | |
| max_tokens | No | Max tokens to generate | |
| messages | array | Yes | Chat messages |
| model | string | Yes | Model identifier |
| stream | boolean | No | Enable SSE streaming |
| temperature | No | Sampling temperature (0-2) | |
| tools | array | No | Tool definitions |
| top_p | No | Nucleus sampling |
Response Schema (200)
| Field | Type | Description |
|---|---|---|
| choices | array[object] | - |
| created | integer | - |
| id | string | - |
| model | string | - |
| object | string | - |
| usage | object | - |
POST /api/v1/inference/v1/messages dynamic USDC.e
Anthropic Messages API compatible endpoint. Translates to OpenAI format internally, routes through OpenRouter. Supports streaming via SSE.
- Amount
- dynamic
- Currency
- USDC.e
- Method
- tempo
- Intent
- charge
- 402 Declared
- Yes
pricingMode: quote protocols: [x402 mpp]
Input Schema
| Field | Type | Required | Description |
|---|---|---|---|
| max_tokens | integer | Yes | Maximum tokens to generate |
| messages | array | Yes | Conversation messages |
| model | string | Yes | Model identifier |
| stop_sequences | array | No | Custom stop sequences |
| stream | boolean | No | Enable SSE streaming |
| system | No | System prompt | |
| temperature | No | Sampling temperature (0-1) | |
| tool_choice | No | Tool selection mode | |
| tools | array | No | Tool definitions |
| top_k | No | Top-K sampling | |
| top_p | No | Nucleus sampling |
Payment Methods
- Methods
- tempo
- Intents
- charge
- Currencies (discovery)
- USDC.e
- Currency (challenge)
- USDC.e on Tempo Mainnet Presto (Tempo Mainnet Presto)
- Multiple Challenges
- Yes
Recipients
- 0x2BB201f1bb056eb738718BD7A3ad1BEF24b883bb
Per-endpoint breakdown
- POST /api/v1/reddit/post
- 0x2BB201f1bb056eb738718BD7A3ad1BEF24b883bb
- POST /api/v1/reddit/search
- 0x2BB201f1bb056eb738718BD7A3ad1BEF24b883bb
- POST /api/v1/reddit/subreddit
- 0x2BB201f1bb056eb738718BD7A3ad1BEF24b883bb
- POST /api/v1/twitter/search
- 0x2BB201f1bb056eb738718BD7A3ad1BEF24b883bb
- POST /api/v1/twitter/tweet
- 0x2BB201f1bb056eb738718BD7A3ad1BEF24b883bb
- POST /api/v1/twitter/user
- 0x2BB201f1bb056eb738718BD7A3ad1BEF24b883bb
Security
- TLS Version
- TLSv1.3
- Challenge ID Unique
- Yes
- Challenge ID Length
- 43
- Digest Binding
- -
Uptime
- Discovery
- Reachable (63ms)
- Challenge
- Reachable (45ms)
- Last Checked
Schema Completeness
- Paid Operations
- 17
- With Input Schema
- 17
- With Description
- 17
Documentation
- Homepage
- https://surf.cascade.fyi
- API Reference
- https://surf.cascade.fyi/openapi.json
- llms.txt
- https://surf.cascade.fyi/llms.txt reachable
Discovery
- OpenAPI URL
- https://surf.cascade.fyi/openapi.json
- OpenAPI Version
- 3.1.0
- Service Version
- 1.0.0
- Document Size
- 40342 bytes
- Document Hash
- 9d4f93e7bf1a645ad8c99b537de4fcd4451ac5ae7cbd2e64bf85828ebb0cc8fa
Version History (52 snapshots)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- new endpoint: POST /api/v1/youtube/subtitles
- new endpoint: POST /api/v1/amazon/product
- new endpoint: POST /api/v1/amazon/search
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
- document hash changed (no semantic differences detected)
Scan snapshots
| Date | Grade | Score | Response | Status |
|---|---|---|---|---|
| 2026-04-06 | A | 90% | 389ms | Up |
| 2026-04-07 | A | 90% | 136ms | Up |
| 2026-04-08 | A | 90% | 70ms | Up |
| 2026-04-09 | A | 90% | 63ms | Up |
| 2026-04-10 | A | 90% | 114ms | Up |
| 2026-04-11 | F | 13% | 85ms | Up |
| 2026-04-12 | A | 90% | 54ms | Up |
| 2026-04-13 | A | 90% | 103ms | Up |
| 2026-04-14 | A | 90% | 60ms | Up |
| 2026-04-15 | A | 90% | 34ms | Up |
| 2026-04-16 | A | 90% | 72ms | Up |
| 2026-04-17 | A | 90% | 57ms | Up |
| 2026-04-18 | A | 90% | 58ms | Up |
| 2026-04-19 | A | 90% | 114ms | Up |
| 2026-04-20 | A | 90% | 79ms | Up |
| 2026-04-21 | A | 90% | 80ms | Up |
| 2026-04-22 | A | 90% | 82ms | Up |
| 2026-04-23 | A | 90% | 251ms | Up |
| 2026-04-24 | A | 90% | 65ms | Up |
| 2026-04-25 | A | 90% | 59ms | Up |
| 2026-04-26 | A | 90% | 81ms | Up |
| 2026-04-27 | A | 90% | 53ms | Up |
| 2026-04-28 | A | 90% | 71ms | Up |
| 2026-04-29 | A | 90% | 64ms | Up |
| 2026-04-30 | A | 90% | 70ms | Up |
| 2026-05-01 | A | 90% | 79ms | Up |
| 2026-05-02 | A | 90% | 58ms | Up |
| 2026-05-03 | A | 90% | 46ms | Up |
| 2026-05-04 | A | 90% | 62ms | Up |
| 2026-05-05 | A | 90% | 62ms | Up |
| 2026-05-06 | A | 90% | 83ms | Up |
| 2026-05-07 | A | 90% | 70ms | Up |
| 2026-05-08 | A | 90% | 229ms | Up |
| 2026-05-09 | A | 90% | 45ms | Up |
| 2026-05-10 | A | 90% | 94ms | Up |
| 2026-05-11 | A | 90% | 64ms | Up |
| 2026-05-12 | A | 90% | 105ms | Up |
| 2026-05-13 | A | 90% | 42ms | Up |
| 2026-05-14 | A | 90% | 71ms | Up |
| 2026-05-15 | A | 90% | 91ms | Up |
| 2026-05-16 | A | 90% | 83ms | Up |
| 2026-05-17 | A | 90% | 81ms | Up |
| 2026-05-18 | A | 90% | 301ms | Up |
| 2026-05-19 | A | 90% | 77ms | Up |
| 2026-05-20 | A | 90% | 62ms | Up |
| 2026-05-21 | A | 90% | 84ms | Up |
| 2026-05-22 | A | 90% | 89ms | Up |
| 2026-05-23 | A | 90% | 78ms | Up |
| 2026-05-24 | A | 90% | 368ms | Up |
| 2026-05-25 | A | 90% | 50ms | Up |
| 2026-05-26 | A | 90% | 47ms | Up |
| 2026-05-27 | A | 90% | 57ms | Up |