Construye con la Plataforma NG Share. Busca sitios, envía URLs, chatea en tiempo real e integra agentes AI.
Comienza con la API de NG en segundos. Todos los endpoints públicos no requieren autenticación.
# 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!"}'
Todos los endpoints usan JSON. URL base: https://ng.net
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
search | string | No | Keyword search |
tag | string | No | Filter by category tag |
sort | string | No | hot (default) or recent |
page | integer | No | 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": ["工具", "技术", "设计", "新闻", "社区", ...] }
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string (path) | Sí | Site ID (nanoid) |
{ "site": { ... }, "credits": 0 }
404 — Site not found 429 — Daily limit reached (1/day free, 3/day logged-in)
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
id | string (path) | Sí | 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
| Nombre | Tipo | Requerido | Descripción |
|---|---|---|---|
limit | integer | No | 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": "..." }] }
Estructuras de datos principales.
| Campo | Tipo | Descripción |
|---|---|---|
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 |
| Campo | Tipo | Descripción |
|---|---|---|
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 |
Conéctate al endpoint WebSocket para actualizaciones en tiempo real.
// 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); };
| Evento | Carga útil |
|---|---|
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 mayoría son públicos. Algunas funciones requieren inicio de sesión por email.
1. Enviar código de verificación al email
curl -X POST https://ng.net/api/auth/send-code \
-H "Content-Type: application/json" \
-d '{"email": "you@example.com"}'
2. Verificar código y obtener sesión
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 usa Cloudflare Workers AI para funciones inteligentes.
Al enviar una URL, la IA analiza el contenido y asigna etiquetas automáticamente.
La API de traducción soporta 12 idiomas con detección automática del idioma origen.
Los propietarios pueden verificar la propiedad para desbloquear funciones adicionales.
1. Encuentra tu sitio en ng.net
2. Añade una etiqueta meta al HTML
<meta name="ngnet-verify" content="YOUR_SITE_ID">
3. Llama al endpoint de reclamación
curl -X POST https://ng.net/api/sites/YOUR_SITE_ID/claim
Los límites se aplican por dirección IP.
| Endpoint | Límite |
|---|---|
| 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 |
Herramienta CLI oficial para la Plataforma NG Share.
# Install globally npm install -g @ngnet/cli # Or use directly with npx npx ngnet help
| Comando | Descripción |
|---|---|
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'
Patrones de integración comunes.
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");
Historial de versiones de la API.
| Version | Date | Changes |
|---|---|---|
v1.2 | 2026-03 | v1.2 — Reclamación de sitios, detección social, soporte multilingüe. |
v1.1 | 2026-02 | v1.1 — Eventos WebSocket en tiempo real. |
v1.0 | 2026-01 | v1.0 — Lanzamiento inicial. |
Puntos de entrada legibles por máquina para agentes AI.
Detección de perfiles sociales
Las URLs de plataformas sociales se detectan automáticamente y se muestran como tarjetas de perfil.
Plataformas soportadas
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}Detección basada en patrones de URL.
Campos específicos de perfil
site_type"profile"(instead of"website")social_platformsocial_usernameog_image_urldescription