Smart News
Use when calling the Crypto News Analyzer HTTP API for async analysis jobs, semantic search, datasource management, intelligence operations, or health checks...
Rank
62
Safety
84
Downloads
1.2k
Updated
Oct 11, 2026
Version
0.4.6
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 11, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 11, 2026
- Adoption signal
- 1.2K downloadsadoption · observed Oct 11, 2026
- Latest release
- 0.4.6release · observed Jun 6, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s1711j71qhdb72tgw6r3r22ra184d1mn:smart-news- Install using `clawhub skill install s1711j71qhdb72tgw6r3r22ra184d1mn:smart-news` in an isolated environment before connecting it to live workloads.
- No published capability contract is available yet, so validate auth and request/response behavior manually.
- Review the upstream CLAWHUB listing at https://clawhub.ai/laceletho/smart-news before using production credentials.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-laceletho-smart-news/snapshot"
Documentation
CLAWHUB
145,825 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: smart-news
description: Use when calling the Crypto News Analyzer HTTP API for async analysis jobs, semantic search, datasource management, intelligence operations, or health checks from OpenClaw.
metadata: { openclaw: { skillKey: smart-news, primaryEnv: API_KEY } }
---
# Crypto News HTTP API Skill
Use this skill to call the Crypto News Analyzer HTTP API from OpenClaw.
## When to Use
Use this skill when you need to call `https://news.tradao.xyz` or a compatible private deployment.
Typical triggers:
- Run asynchronous crypto news analysis over a time window
- Run asynchronous unified semantic search (News + Intelligence) for a freeform topic query
- Poll an API job until it finishes and then fetch the final result
- Create, list, or delete datasources through the HTTP API
- Query and manage intelligence topics through the topic-first API (create, revise, confirm, merge findings, detail, list, archive)
- View and manage topic-datasource associations (get, set, add, remove) to scope topic research
- List intelligence topic research run logs per-topic or globally
- Check service health before or after an API workflow
## Quick Reference
Authentication is Bearer token style: send `Authorization: Bearer <API_KEY>` with every request.
`POST /analyze` creates a job and returns immediately. It does **not** return the final report. Poll status, then fetch the result.
Workflow: `POST /analyze` -> `GET /analyze/{job_id}` -> `GET /analyze/{job_id}/result`
Jobs move through these states: `queued`, `running`, `completed`, `failed`.
`POST /semantic-search` creates a job, returns `202 Accepted`, and includes `status_url`, `result_url`, plus a `Retry-After` header. When `hours` exceeds the server max (720h default), a `warning` field describes the truncation. Semantic search jobs that do not complete within 5 minutes are automatically failed with a timeout error.
Semantic workflow: `POST /semantic-search` -> `GET /semantic-search/{job_id}` -> `GET /semantic-search/{job_id}/result`
Unified semantic search retrieves from both `content_items` and `raw_intelligence_items` via PostgreSQL with pgvector HNSW indexes (`embedding vector(1536)`). SQLite runtime is unsupported.
For detailed guides, see:
- [Analyze Workflow Reference](references/analyze-workflow.md)
- [Semantic Search Reference](references/semantic-search.md)
- [Datasource Management Reference](references/datasource-management.md)
- [Intelligence Query Reference](references/intelligence-query.md)
- [Operations and Maintenance Reference](references/operations-and-maintenance.md)
## OpenClaw Runtime
This skill declares `metadata.openclaw.primaryEnv: API_KEY`. In OpenClaw, inject the bearer token through `~/.openclaw/openclaw.json`:
```json5
{
skills: {
entries: {
"smart-news": {
enabled: true,
apiKey: "YOUR_API_KEY"
}
}
}
}
```
If `apiKey` is unavailable, do not send unauthenticated requests. Ask the operator to configure the token first.
If _meta.json
{
"ownerId": "kn70n844xnvgcz0zzja942av2184cjj5",
"slug": "smart-news",
"version": "0.4.6",
"publishedAt": 1780717234958
}references/analyze-workflow.md
# Analyze Workflow Reference
The analyze workflow is the primary way to trigger cryptocurrency news analysis via HTTP API. This reference documents the three-step async pattern: create job, poll status, fetch result.
## Authentication
All analyze endpoints require Bearer token authentication:
```
Authorization: Bearer <API_KEY>
```
The `API_KEY` is configured via the `API_KEY` environment variable on the server. Requests without a valid token receive HTTP 401.
## Overview
The analyze workflow follows an asynchronous pattern:
1. **Create**: POST to `/analyze` with `hours` and `user_id` to enqueue a job
2. **Poll**: GET `/analyze/{job_id}` to check status until completion
3. **Fetch**: GET `/analyze/{job_id}/result` to retrieve the final Markdown report
The initial POST returns immediately with job metadata. It does not return the analysis report. You must poll and fetch separately.
## Creating an Analysis Job
### Endpoint
```
POST /analyze
```
### Required Parameters
| Field | Type | Constraints | Description |
|-------|------|-------------|-------------|
| `hours` | integer | `> 0` | Analysis time window in hours. Values below server minimum return HTTP 400. Values above maximum are capped to the configured limit (default 24h) and the response includes a `warning` field. |
| `user_id` | string | `^[A-Za-z0-9_-]{1,128}$` | Requesting user identifier. Server trims whitespace before validation. |
### Example Request
```bash
curl -X POST "https://news.tradao.xyz/analyze" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{"hours": 1, "user_id": "my_agent_01"}'
```
### Success Response (HTTP 202 Accepted)
```json
{
"success": true,
"job_id": "analyze_job_2f205899562a4104868384e65f81c8c1",
"status": "queued",
"time_window_hours": 1,
"status_url": "/analyze/analyze_job_2f205899562a4104868384e65f81c8c1",
"result_url": "/analyze/analyze_job_2f205899562a4104868384e65f81c8c1/result",
"warning": null
}
```
Response headers include:
- `Location`: Path to status endpoint
- `Retry-After`: Recommended polling interval in seconds (typically 5)
### Validation Errors
| Condition | HTTP Status | Notes |
|-----------|-------------|-------|
| Missing `user_id` | 422 | FastAPI validation error with field location |
| Invalid `user_id` (spaces, punctuation, non-ASCII, >128 chars) | 422 | Must match `^[A-Za-z0-9_-]{1,128}$` |
| `hours <= 0` | 422 | Positive integer required |
| `hours` below server minimum | 400 | Configurable minimum (default 1) |
Example validation error:
```json
{
"detail": [
{
"type": "missing",
"loc": ["body", "user_id"],
"msg": "Field required",
"input": {"hours": 1}
}
]
}
```
## Polling Job Status
### Endpoint
```
GET /analyze/{job_id}
```
### Example Request
```bash
curl -H "Authorization: Bearer ${API_KEY}" \
"https://news.tradao.xyz/analyze/analyze_job_2f205899562a4104868384e65f81c8c1"
```
### Response Fields
| Field | Type references/datasource-management.md
# Datasource Management Reference
This document describes the HTTP API surface for managing datasources. All datasource routes require Bearer authentication.
## CRUD Routes
### POST /datasources
Creates a new datasource. Returns `201 Created` on success, `409 Conflict` if a datasource with the same type and name already exists, and `422 Unprocessable Entity` for invalid payloads.
**Request body structure:**
```json
{
"purpose": "news|intelligence",
"source_type": "rss|x|rest_api",
"tags": ["tag1", "tag2"],
"config_payload": {
"name": "My Source",
...
}
}
```
The `purpose` field determines which pipeline the datasource feeds: `news` (RSS/X/REST for content analysis) or `intelligence` (Telegram groups, V2EX for topic research). The `name` field in the top-level request must match `config_payload.name` when both are provided.
### GET /datasources
Lists all datasources sorted by purpose, source type, then name. Supports optional filtering by `purpose` and `source_type` query parameters. Returns `200 OK` with a list of datasource summaries.
**Query Parameters:**
| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `purpose` | string | No | Filter by `news` or `intelligence` |
| `source_type` | string | No | Filter by datasource type (`rss`, `x`, etc.) |
**Response structure:**
```json
{
"success": true,
"datasources": [
{
"id": "uuid",
"name": "My Source",
"purpose": "news",
"source_type": "rss",
"tags": ["tag1"],
"config_summary": {
...
}
}
]
}
```
List responses always return safe summaries. For `rest_api` datasources, sensitive fields are redacted and replaced with counts.
### DELETE /datasources/{id}
Deletes a datasource by its UUID. Returns `204 No Content` on success, `404 Not Found` if the datasource does not exist, and `409 Conflict` if the datasource has active ingestion jobs.
The delete operation will fail with `409 Conflict` if there are pending or running ingestion jobs associated with this datasource (matched by `source_type:source_name`).
## Supported Datasource Types
The API supports five datasource types: `rss`, `x`, `rest_api`, `telegram_group`, and `v2ex`.
`telegram_group` and `v2ex` feed the **hidden-channel intelligence pipeline** (raw collection → LLM extraction → canonical knowledge). They are not part of the news analysis pipeline and require the `openclaw+opencode` ingestion service with proper credentials.
### rss
RSS feed datasources crawl RSS/XML feeds.
**Required config_payload fields:**
- `name` (string, non-empty)
- `url` (string, valid HTTP/HTTPS URL)
**Optional config_payload fields:**
- `description` (string, defaults to empty string)
**Config summary in responses:**
- `url`: The RSS feed URL
- `description`: The description value
### x
X (formerly Twitter) datasources crawl X lists or timelines.
**Required config_payload fields:**
- `name` (string, non-empty)
- `url` (strreferences/intelligence-query.md
# Intelligence Query Reference
Topic-first intelligence HTTP API. All endpoints require Bearer authentication and manage the topic research lifecycle (create → revise → confirm → research → merge → archive).
These endpoints are synchronous — results return immediately. Do not use an async job/poll workflow for intelligence routes.
## Authentication
Send `Authorization: Bearer <API_KEY>` with every request. Missing or invalid credentials return `401 Unauthorized`.
## Topic Lifecycle
Topics progress through states: `draft` → `active` → `archived`. Only `active` topics are researched by the ingestion scheduler. Merge previews expire after 24 hours. Finding merge is available through both the HTTP API and the Telegram `/topic_merge` command.
## Deprecated Routes
The old entry-based routes (`/intelligence/entries*`, `/intelligence/discovery`, `/intelligence/labels`, `/intelligence/search`, `/intelligence/raw/*`, `/intelligence/topics/converge`) have been removed. Use only the topic-first endpoints documented below.
---
## POST /intelligence/topics
Create a new intelligence topic with an LLM-generated draft prompt.
### Request Body
| Field | Type | Required | Constraints |
|-------|------|----------|-------------|
| `theme` | string | Yes | 1–500 characters |
| `source_context` | object | No | Optional context for prompt generation |
| `datasource_ids` | string[] | No | Optional list of datasource IDs to associate. Omitted = no associations. |
### Status Codes
| Code | Meaning |
|------|---------|
| `201` | Topic draft created |
| `400` | Invalid theme or topic parameters |
| `401` | Missing or invalid Bearer token |
| `503` | LLM service unavailable |
### Response (201)
Returns a `TopicPromptVersionResponse`:
```json
{
"id": "prompt-uuid",
"intelligence_topic_id": "topic-uuid",
"prompt_version": "v1.0",
"prompt_text": "LLM-generated research prompt...",
"schema_version": "v1.0",
"status": "draft",
"created_by": "api",
"activated_by": null,
"activation_notes": null,
"created_at": "2026-05-18T10:00:00+00:00",
"activated_at": null,
"archived_at": null,
"updated_at": "2026-05-18T10:00:00+00:00",
"audit_history": []
}
```
### Example
```bash
curl -X POST "https://news.tradao.xyz/intelligence/topics" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{"theme": "crypto payment channels in Telegram groups"}'
```
---
## POST /intelligence/topics/{topic_id}/revise
Revise the most recent draft prompt using LLM and user feedback. Returns a new prompt version.
### Request Body
| Field | Type | Required | Constraints |
|-------|------|----------|-------------|
| `feedback` | string | Yes | 1–5000 characters |
### Response
Returns a `TopicPromptVersionResponse` with the revised prompt.
### Example
```bash
curl -X POST "https://news.tradao.xyz/intelligence/topics/topic-uuid/revise" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{"AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/laceletho/skills/smart-news",
"sourceUrl": "https://clawhub.ai/laceletho/skills/smart-news",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T02:49:36.323Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-laceletho-smart-news/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-laceletho-smart-news/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-11T02:49:36.323Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.2K downloads",
"href": "https://clawhub.ai/laceletho/smart-news",
"sourceUrl": "https://clawhub.ai/laceletho/smart-news",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-11T02:49:36.323Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.4.6",
"href": "https://clawhub.ai/laceletho/smart-news",
"sourceUrl": "https://clawhub.ai/laceletho/smart-news",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-06-06T03:40:34.958Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-laceletho-smart-news/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-laceletho-smart-news/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.4.6",
"description": "Sync lifecycle to archive-only; remove /pause route and /topic_pause Telegram surface; fix startup flags; correct test paths; align docs with code.",
"href": "https://clawhub.ai/laceletho/smart-news",
"sourceUrl": "https://clawhub.ai/laceletho/smart-news",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-06-06T03:40:34.958Z",
"isPublic": true
}
]
}Record generated Oct 11, 2026.
