简体中文繁體中文(港)繁體中文(台)EnglishEspañolالعربيةहिन्दीPortuguês日本語한국어FrançaisDeutsch
NG

NG 開発者

NGシェアプラットフォームで構築。サイト検索、URL送信、リアルタイムチャット、AIエージェント統合。

OpenAPI Spec llms.txt AI Plugin MCP Tools
クイックスタート APIリファレンス データモデル WebSocket 認証 AI機能 ソーシャル検出 サイト認証 レート制限 CLIツール コード例 ディスカバリー

クイックスタート

数秒でNG APIを使い始めましょう。公開エンドポイントは認証不要です。

# Search sites
curl https://ng.net/api/sites?search=AI+tools

# Get trending
curl https://ng.net/api/sites?sort=hot

# Submit a URL
curl -X POST https://ng.net/api/sites \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

# Get chat messages
curl https://ng.net/api/messages?limit=10

# Send a message
curl -X POST https://ng.net/api/messages \
  -H "Content-Type: application/json" \
  -d '{"content": "Hello from the API!"}'

APIリファレンス

すべてのエンドポイントはJSONを使用します。ベースURL:https://ng.net

GET/api/sites
Search and browse shared sites
パラメータ & レスポンス
名前必須説明
searchstringいいえKeyword search
tagstringいいえFilter by category tag
sortstringいいえhot (default) or recent
pageintegerいいえPage number (default 1, 60/page)

レスポンス 200

{
  "sites": [{ "id": "abc123", "url": "https://example.com", "title": "Example", ... }],
  "total": 42,
  "page": 1,
  "hasMore": true
}
POST/api/sites
Submit a new URL to the platform
リクエストボディ & レスポンス

リクエストボディ

{
  "url": "https://example.com",        // required
  "turnstileToken": "cf-..."    // required when CAPTCHA enabled
}

レスポンス 201 (new)

{ "site": { ... }, "isNew": true }

レスポンス 200 (existing, submit count incremented)

{ "site": { ... }, "isNew": false }

エラー

400 — Invalid URL or request format
403 — Missing or invalid Turnstile token
429 — Rate limited (5/min per IP)
Social profile URLs (Twitter, Instagram, GitHub, etc.) are auto-detected. AI generates tags asynchronously after submission. Metadata (title, description, favicon, OG image) is fetched server-side.
GET/api/sites/tags
Get all available category tags
レスポンス
{ "tags": ["工具", "技术", "设计", "新闻", "社区", ...] }
POST/api/sites/{id}/boost
Boost a site's visibility in hot rankings
パラメータ & レスポンス
名前必須説明
idstring (path)はいSite ID (nanoid)

レスポンス 200

{ "site": { ... }, "credits": 0 }

エラー

404 — Site not found
429 — Daily limit reached (1/day free, 3/day logged-in)
POST/api/sites/{id}/claim
Verify site ownership
パラメータ & レスポンス
名前必須説明
idstring (path)はいSite ID
Requires: <meta name="ngnet-verify" content="{siteId}"> in your site's HTML <head>

レスポンス 200

{ "site": { ... }, "verified": true }

エラー

400 — Verification meta tag not found / already claimed
404 — Site not found
POST/api/clicks/{id}
Record a click for analytics
レスポンス
{ "recorded": true }

Rate limit: 30/min per IP

GET/api/messages
Get recent chat messages
パラメータ & レスポンス
名前必須説明
limitintegerいいえNumber of messages (default 50, max 100)

レスポンス 200

{
  "messages": [{
    "id": "abc", "type": "chat",
    "content": "Hello!", "sender_name": "user123",
    "created_at": "2026-03-27T12:00:00Z"
  }]
}
POST/api/messages
Send a chat message (max 200 chars, rate: 10/min)
リクエストボディ & レスポンス

リクエストボディ

{ "content": "Hello from the API!" }

レスポンス 201

{ "message": { "id": "...", "type": "chat", ... } }

エラー

400 — Empty or exceeds 200 chars
429 — Rate limited (10/min per IP)
POST/api/translate
AI-powered translation (12 languages)
リクエストボディ & レスポンス

リクエストボディ

{
  "text": "Hello world",       // max 2000 chars
  "targetLang": "zh-CN"
}

レスポンス 200

{ "translated": "你好世界" }

エラー

400 — Missing params or text too long
429 — Rate limited (20/min per IP)
500 — AI translation failed
Uses Cloudflare Workers AI (M2M100-1.2B). Source language is auto-detected.
GET/api/bing-bg
Daily background image from Bing
レスポンス
{
  "imageUrl": "https://www.bing.com/...",
  "videoUrl": "https://...",  // or null
  "copyright": "Photo credit...",
  "title": "Image title"
}
Cached for 6 hours. Proxies Bing's daily image API.
POST/api/auth/send-code
Send login verification code to email
リクエストボディ & レスポンス

リクエストボディ

{ "email": "user@example.com" }

レスポンス 200

{ "sent": true }
POST/api/auth/verify
Verify code and create session
リクエストボディ & レスポンス

リクエストボディ

{ "email": "user@example.com", "code": "123456" }

レスポンス 200

{ "user": { "id": "...", "email": "...", "username": "..." } }
Sets HttpOnly cookie sn_token with JWT session.
GET/api/bookmarks
Get user's bookmarked sites (requires auth)
レスポンス
{ "bookmarks": [{ "site_id": "...", "created_at": "..." }] }

データモデル

APIが返すコアデータ構造。

Site

フィールド説明
idstringUnique identifier (nanoid)
urlstringFull URL
titlestringPage title (fetched from metadata)
descriptionstringPage description (fetched from metadata)
favicon_urlstringFavicon URL
og_image_urlstringOpen Graph image URL
domainstringExtracted domain (e.g. example.com)
tagsstring[]AI-generated category tags
submit_countintegerNumber of times submitted
click_countintegerTotal clicks recorded
hot_scorenumberTrending score (higher = more popular)
site_typestringwebsite or profile
social_platformstringPlatform name for profiles (twitter, instagram, etc.)
social_usernamestringUsername for profile-type sites
boost_countintegerNumber of boosts received
is_claimedbooleanWhether site ownership is verified
is_promotedbooleanCurrently running paid promotion
first_submitted_atISO 8601First submission timestamp
last_activity_atISO 8601Last activity timestamp

ChatMessage

フィールド説明
idstringUnique message ID
typestringchat, system, or entrance
contentstringMessage content
content_keystring?i18n key for system messages
content_paramsobject?Interpolation params for i18n
sender_namestringDisplay name or geo-based name
sender_locationstring?Raw location (e.g. CN|Beijing)
created_atISO 8601Message timestamp

WebSocket API

WebSocketエンドポイントに接続してリアルタイム更新を受信。認証不要。

接続方法

// Browser
const ws = new WebSocket("wss://ng.net/api/ws");

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log(data.event, data.payload);
};

イベントタイプ

イベントペイロード
new_messageChatMessage object — new chat/entrance/system message
site_updateSite object — metadata updated after async fetch
like{ messageId, fromUser, toUser } — message liked

// new_message event payload
{
  "event": "new_message",
  "payload": {
    "id": "abc123",
    "type": "entrance",
    "content": "entered",
    "content_key": "chat.entered",
    "sender_name": "United States Dallas",
    "sender_location": "US|Dallas",
    "created_at": "2026-03-27T12:00:00Z"
  }
}

// site_update event payload
{
  "event": "site_update",
  "payload": {
    "id": "xyz789",
    "title": "Example Site",
    "description": "A great website",
    "tags": ["工具", "技术"]
  }
}

// like event payload
{
  "event": "like",
  "payload": {
    "messageId": "msg123",
    "fromUser": "United States Dallas",
    "toUser": "Japan Tokyo"
  }
}

認証

ほとんどのエンドポイントは公開です。一部の機能はメールログインが必要です。

ログインフロー

1. メールに確認コードを送信

curl -X POST https://ng.net/api/auth/send-code \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com"}'

2. コードを検証してセッションを取得

curl -X POST https://ng.net/api/auth/verify \
  -H "Content-Type: application/json" \
  -d '{"email": "you@example.com", "code": "123456"}'
セッションはHttpOnly cookie(sn_token)に保存されます。

認証が必要なエンドポイント

EndpointDescription
GET /api/bookmarksGet user bookmarks
POST /api/bookmarksAdd bookmark
DELETE /api/bookmarks/{id}Remove bookmark
GET /api/sites/my-submissionsUser's submission history
POST /api/auth/set-usernameChange display name

AI機能

NGはCloudflare Workers AIでインテリジェント機能を提供します。

自動タグ付け

URL送信時にAIがコンテンツを分析し自動でカテゴリタグを付与。Meta Llama 3.1 8B Instructモデル使用。

利用可能なタグ

工具 (Tools)技术 (Tech)设计 (Design)新闻 (News) 社区 (Community)学习 (Learning)娱乐 (Entertainment)资源 (Resources) 商业 (Business)生活 (Lifestyle)社交 (Social)
Tags are assigned asynchronously after URL submission. The AI analyzes the fetched page content and selects 1-3 tags from the above list. Tags are stored as Chinese strings in the database but displayed in the user's language via i18n mapping.

翻訳

翻訳APIは12言語対応。M2M100-1.2Bモデル使用。ソース言語は自動検出。

対応言語

zh-CNzh-HKzh-TWenesar hiptjakofrde

ソーシャルプロフィール検出

ソーシャルプラットフォームのURLは自動検出され、プロフィールカードとして表示されます。

対応プラットフォーム

PlatformURL PatternExample
Twitter / Xx.com/{user}, twitter.com/{user}x.com/elonmusk
Instagraminstagram.com/{user}instagram.com/cristiano
GitHubgithub.com/{user}github.com/torvalds
TikToktiktok.com/@{user}tiktok.com/@khaby.lame
YouTubeyoutube.com/@{user}youtube.com/@MrBeast
Facebookfacebook.com/{user}, fb.me/{user}facebook.com/zuck
LinkedInlinkedin.com/in/{user}linkedin.com/in/satyanadella
Redditreddit.com/user/{user}reddit.com/user/spez
Telegramt.me/{user}t.me/durov
Pinterestpinterest.com/{user}pinterest.com/pinterest

URLパターンマッチングで検出。OGメタデータ(アバター、自己紹介、表示名)を取得。

プロフィール専用フィールド

フィールド説明
site_type"profile" (instead of "website")
social_platformPlatform identifier (twitter, instagram, github, etc.)
social_usernameExtracted username handle
og_image_urlProfile avatar (from Open Graph)
descriptionBio / profile description (from Open Graph)

サイト所有権認証

サイト所有者は所有権を確認し、分析や優先表示などの機能を利用できます。

確認手順

1. ng.netでサイトを見つけ、サイトIDを記録

2. サイトのHTML <head>にmetaタグを追加

<meta name="ngnet-verify" content="YOUR_SITE_ID">

3. 認証APIエンドポイントを呼び出す

curl -X POST https://ng.net/api/sites/YOUR_SITE_ID/claim

認証のメリット

レート制限

レート制限はIPアドレスごとに適用されます。

エンドポイント制限
POST /api/sites (Submit URL)5/min per IP
POST /api/messages (Chat)10/min per IP
POST /api/translate20/min per IP
POST /api/clicks/{id}30/min per IP
POST /api/sites/{id}/boost1-3/day per IP
POST /api/auth/send-code3/min per email
POST /api/auth/verify5/min per email
制限超過時はHTTP 429が返されます。

CLIツール

NG分享プラットフォーム公式CLIツール。ターミナルからサイトの検索・送信・管理が可能。

インストール

# Install globally
npm install -g @ngnet/cli

# Or use directly with npx
npx ngnet help

コマンド

コマンド説明
ngnet search <query>Search sites by keyword
ngnet trendingShow trending (hot) sites
ngnet recentShow recently submitted sites
ngnet tagsList all category tags
ngnet tag <name>Browse sites by specific tag
ngnet submit <url>Submit a URL to the platform
ngnet boost <id>Boost a site's visibility
ngnet translate <text> --to <lang>Translate text between languages
ngnet send <message>Send a chat message
ngnet messagesShow recent chat messages
ngnet info <id>Show detailed info for a site
ngnet helpShow help information

グローバルオプション

OptionDescription
--jsonOutput raw JSON (for piping to other tools)
--to <lang>Target language for translation (e.g. en, ja, zh-CN)

# Search for AI tools
ngnet search "AI tools"

# Get trending sites as JSON
ngnet trending --json

# Filter by tag
ngnet tag 技术

# Submit a site
ngnet submit https://example.com

# Boost a site
ngnet boost abc123

# Translate text
ngnet translate "Hello world" --to ja

# Send chat message
ngnet send "Hello from CLI!"

# Pipe JSON output to jq
ngnet search "design" --json | jq '.sites[].title'

コード例

各言語での一般的な統合パターン。

サイト検索

curl -s "https://ng.net/api/sites?search=AI+tools&sort=hot" | jq .
const res = await fetch('https://ng.net/api/sites?search=AI+tools');
const { sites, total } = await res.json();
console.log(`Found ${total} sites`);
sites.forEach(s => console.log(s.title, s.url));
import requests

r = requests.get("https://ng.net/api/sites", params={"search": "AI tools"})
data = r.json()
for site in data["sites"]:
    print(site["title"], site["url"])

URL送信

curl -X POST https://ng.net/api/sites \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'
const res = await fetch('https://ng.net/api/sites', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ url: 'https://example.com' })
});
const { site, isNew } = await res.json();
console.log(isNew ? 'New!' : 'Already exists', site.title);
import requests

r = requests.post("https://ng.net/api/sites", json={"url": "https://example.com"})
data = r.json()
print("New!" if data["isNew"] else "Exists", data["site"]["title"])

WebSocketリアルタイム

// Browser WebSocket client
const ws = new WebSocket("wss://ng.net/api/ws");

ws.onopen = () => console.log("Connected!");

ws.onmessage = (event) => {
  const { event: type, payload } = JSON.parse(event.data);
  switch (type) {
    case "new_message":
      console.log(`[${payload.sender_name}] ${payload.content}`);
      break;
    case "site_update":
      console.log(`Site updated: ${payload.title}`);
      break;
    case "like":
      console.log(`${payload.fromUser} liked a message`);
      break;
  }
};

ws.onclose = () => console.log("Disconnected");

変更履歴

APIバージョン履歴と主な変更点。

VersionDateChanges
v1.22026-03v1.2 — サイト認証、ソーシャル検出、多言語対応追加。
v1.12026-02v1.1 — WebSocketリアルタイムイベント追加。
v1.02026-01v1.0 — 初期リリース。

ディスカバリーエンドポイント

AIエージェントと自動化ツール向けの機械可読エンドポイント。

OpenAPI 3.1

Machine-readable API specification with schemas and examples

/openapi.json

LLM Context (short)

Quick summary for LLM context windows

/llms.txt

LLM Full Reference

Complete API docs for LLM consumption

/llms-full.txt

AI Plugin (ChatGPT)

OpenAI plugin manifest for GPT-based agents

/.well-known/ai-plugin.json

MCP Tools (Claude)

Model Context Protocol tool definitions

/.well-known/mcp.json

Sitemap

XML sitemap with i18n alternates

/sitemap.xml