Construisez avec la Plateforme NG Share. Recherchez, soumettez, chattez en temps réel, intégrez des agents AI.
Commencez avec l'API NG en quelques secondes. Tous les endpoints publics ne nécessitent aucune authentification.
# 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!"}'
Tous les endpoints utilisent JSON. URL de base : https://ng.net
| Nom | Type | Requis | Description |
|---|---|---|---|
search | string | Non | Keyword search |
tag | string | Non | Filter by category tag |
sort | string | Non | hot (default) or recent |
page | integer | Non | Page number (default 1, 60/page) |
{
"sites": [{ "id": "abc123", "url": "https://example.com", "title": "Example", ... }],
"total": 42,
"page": 1,
"hasMore": true
}
{
"url": "https://example.com", // required
"turnstileToken": "cf-..." // required when CAPTCHA enabled
}
{ "site": { ... }, "isNew": true }
{ "site": { ... }, "isNew": false }
400 — Invalid URL or request format 403 — Missing or invalid Turnstile token 429 — Rate limited (5/min per IP)
{ "tags": ["工具", "技术", "设计", "新闻", "社区", ...] }
| Nom | Type | Requis | Description |
|---|---|---|---|
id | string (path) | Oui | Site ID (nanoid) |
{ "site": { ... }, "credits": 0 }
404 — Site not found 429 — Daily limit reached (1/day free, 3/day logged-in)
| Nom | Type | Requis | Description |
|---|---|---|---|
id | string (path) | Oui | Site ID |
<meta name="ngnet-verify" content="{siteId}"> in your site's HTML <head>{ "site": { ... }, "verified": true }
400 — Verification meta tag not found / already claimed 404 — Site not found
{ "recorded": true }
Rate limit: 30/min per IP
| Nom | Type | Requis | Description |
|---|---|---|---|
limit | integer | Non | Number of messages (default 50, max 100) |
{
"messages": [{
"id": "abc", "type": "chat",
"content": "Hello!", "sender_name": "user123",
"created_at": "2026-03-27T12:00:00Z"
}]
}
{ "content": "Hello from the API!" }
{ "message": { "id": "...", "type": "chat", ... } }
400 — Empty or exceeds 200 chars 429 — Rate limited (10/min per IP)
{
"text": "Hello world", // max 2000 chars
"targetLang": "zh-CN"
}
{ "translated": "你好世界" }
400 — Missing params or text too long 429 — Rate limited (20/min per IP) 500 — AI translation failed
{
"imageUrl": "https://www.bing.com/...",
"videoUrl": "https://...", // or null
"copyright": "Photo credit...",
"title": "Image title"
}
{ "email": "user@example.com" }
{ "sent": true }
{ "email": "user@example.com", "code": "123456" }
{ "user": { "id": "...", "email": "...", "username": "..." } }
sn_token with JWT session.{ "bookmarks": [{ "site_id": "...", "created_at": "..." }] }
Structures de données principales.
| Champ | Type | Description |
|---|---|---|
id | string | Unique identifier (nanoid) |
url | string | Full URL |
title | string | Page title (fetched from metadata) |
description | string | Page description (fetched from metadata) |
favicon_url | string | Favicon URL |
og_image_url | string | Open Graph image URL |
domain | string | Extracted domain (e.g. example.com) |
tags | string[] | AI-generated category tags |
submit_count | integer | Number of times submitted |
click_count | integer | Total clicks recorded |
hot_score | number | Trending score (higher = more popular) |
site_type | string | website or profile |
social_platform | string | Platform name for profiles (twitter, instagram, etc.) |
social_username | string | Username for profile-type sites |
boost_count | integer | Number of boosts received |
is_claimed | boolean | Whether site ownership is verified |
is_promoted | boolean | Currently running paid promotion |
first_submitted_at | ISO 8601 | First submission timestamp |
last_activity_at | ISO 8601 | Last activity timestamp |
| Champ | Type | Description |
|---|---|---|
id | string | Unique message ID |
type | string | chat, system, or entrance |
content | string | Message content |
content_key | string? | i18n key for system messages |
content_params | object? | Interpolation params for i18n |
sender_name | string | Display name or geo-based name |
sender_location | string? | Raw location (e.g. CN|Beijing) |
created_at | ISO 8601 | Message timestamp |
Connectez-vous au WebSocket pour des mises à jour en temps réel.
// 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); };
| Événement | Charge utile |
|---|---|
new_message | ChatMessage object — new chat/entrance/system message |
site_update | Site 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" } }
La plupart des endpoints sont publics. Certaines fonctions nécessitent une connexion par email.
1. Envoyer le code de vérification par email
curl -X POST https://ng.net/api/auth/send-code \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'
2. Vérifier le code et obtenir la session
curl -X POST https://ng.net/api/auth/verify \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com", "code": "123456"}'
sn_token).| Endpoint | Description |
|---|---|
GET /api/bookmarks | Get user bookmarks |
POST /api/bookmarks | Add bookmark |
DELETE /api/bookmarks/{id} | Remove bookmark |
GET /api/sites/my-submissions | User's submission history |
POST /api/auth/set-username | Change display name |
NG utilise Cloudflare Workers AI pour des fonctions intelligentes.
Lors de la soumission d'une URL, l'IA analyse le contenu et attribue automatiquement des étiquettes.
L'API de traduction prend en charge 12 langues avec détection automatique de la langue source.
Les propriétaires de sites peuvent vérifier leur propriété pour débloquer des fonctions supplémentaires.
1. Trouvez votre site sur ng.net
2. Ajoutez une balise meta au HTML
<meta name="ngnet-verify" content="YOUR_SITE_ID">
3. Appelez l'endpoint de réclamation
curl -X POST https://ng.net/api/sites/YOUR_SITE_ID/claim
Les limites s'appliquent par adresse IP.
| Endpoint | Limite |
|---|---|
| POST /api/sites (Submit URL) | 5/min per IP |
| POST /api/messages (Chat) | 10/min per IP |
| POST /api/translate | 20/min per IP |
| POST /api/clicks/{id} | 30/min per IP |
| POST /api/sites/{id}/boost | 1-3/day per IP |
| POST /api/auth/send-code | 3/min per email |
| POST /api/auth/verify | 5/min per email |
Outil CLI officiel pour la Plateforme NG Share.
# Install globally npm install -g @ngnet/cli # Or use directly with npx npx ngnet help
| Commande | Description |
|---|---|
ngnet search <query> | Search sites by keyword |
ngnet trending | Show trending (hot) sites |
ngnet recent | Show recently submitted sites |
ngnet tags | List 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 messages | Show recent chat messages |
ngnet info <id> | Show detailed info for a site |
ngnet help | Show help information |
| Option | Description |
|---|---|
--json | Output 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'
Modèles d'intégration courants.
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"])
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"])
// 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");
Historique des versions de l'API.
| Version | Date | Changes |
|---|---|---|
v1.2 | 2026-03 | v1.2 — Réclamation, détection sociale, multilingue. |
v1.1 | 2026-02 | v1.1 — Événements WebSocket temps réel. |
v1.0 | 2026-01 | v1.0 — Version initiale. |
Points d'entrée lisibles par machine pour les agents AI.
Détection de profils sociaux
Les URLs de plateformes sociales sont automatiquement détectées et affichées comme cartes de profil.
Plateformes prises en charge
x.com/{user},twitter.com/{user}instagram.com/{user}github.com/{user}tiktok.com/@{user}youtube.com/@{user}facebook.com/{user},fb.me/{user}linkedin.com/in/{user}reddit.com/user/{user}t.me/{user}pinterest.com/{user}Détection basée sur la correspondance de motifs d'URL.
Champs spécifiques au profil
site_type"profile"(instead of"website")social_platformsocial_usernameog_image_urldescription