# Introduction AIXBT monitors public social sources and market activity to surface developments across crypto projects and topics. --- ## Developers --- # Overview API v3 is the primary AIXBT API: one consistent view of Projects, Topics, Intel, Reports, and Clusters, available over REST and [MCP](/developers/mcp) with identical data. The base URL is `https://api.aixbt.tech/v3`; the OpenAPI document is served at [`/v3/openapi.yaml`](https://api.aixbt.tech/v3/openapi.yaml), with interactive docs at `https://api.aixbt.tech/v3/docs`. ## Authentication [#authentication] Current Topic list and detail are the keyless free tier: ```bash curl --fail-with-body "https://api.aixbt.tech/v3/topics" ``` Everything else requires a key from [Developer access](https://aixbt.tech/profile#developer-access), sent in the `x-api-key` header: ```bash curl --fail-with-body "https://api.aixbt.tech/v3/projects?limit=5" \ -H "x-api-key: YOUR_API_KEY" ``` Call [`GET /v3/me`](/developers/v3/reference/get-v3-me) to see your account, plan, rate limits, and history window. ## Responses [#responses] Every success body is `{data, meta}`. Failures return one typed error object. List endpoints use `cursor` and `limit`; follow `meta.nextCursor` until it is `null`. ```json { "data": [], "meta": { "nextCursor": null } } ``` ## Find data [#find-data] `GET /v3/intel?search=...` runs deep search across project identity and Intel text. Use [`GET /v3/vocabulary`](/developers/v3/reference/get-v3-vocabulary) for valid filter values, and the [Reference](/developers/v3/reference) for exact parameters, schemas, and examples. ## Migrating from v2 [#migrating-from-v2] The [migration guide](/developers/v3/migration) maps every v2 route and field to its v3 equivalent. # Migrating from v2 API v3 is a redesign: consistent resources, one response envelope, clear error codes, and cursor pagination. v2 remains available while you migrate; new integrations should target v3. Trend is the sole current ranking in both versions. ## Routes [#routes] | v2 | v3 | | --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | `GET /v2/projects` | [`GET /v3/projects`](/developers/v3/reference/get-v3-projects): cursor pagination, slug locators, typed `assets` | | `GET /v2/projects/:id` | [`GET /v3/projects/{idOrSlug}`](/developers/v3/reference/get-v3-projects-idorslug): accepts id or slug | | `GET /v2/projects/:id/momentum`, `/rank` | [`GET /v3/projects/{idOrSlug}/series/{measure}`](/developers/v3/reference/get-v3-projects-idorslug-series-measure): one series shape, `trend` or `rank` | | `GET /v2/projects/:id/candles`, `/metrics` | Removed: price and market-cap data are no longer part of the API | | `GET /v2/projects/:id/neighbors` | `relatedProjects` on Project detail | | `GET /v2/projects/chains` | Moved into [`GET /v3/vocabulary`](/developers/v3/reference/get-v3-vocabulary) | | `GET /v2/topics` | [`GET /v3/topics`](/developers/v3/reference/get-v3-topics): free tier, keyless | | `GET /v2/topics/:id/report` | [`GET /v3/reports/{id}`](/developers/v3/reference/get-v3-reports-id): top-level Reports with revision history | | `GET /v2/grounding` | Replaced by [`GET /v3/topics`](/developers/v3/reference/get-v3-topics) | | `GET /v2/intel` (and the `/v2/signals` alias) | [`GET /v3/intel`](/developers/v3/reference/get-v3-intel): graded, filterable, searchable | | `GET /v2/intel/:id` | [`GET /v3/intel/{id}`](/developers/v3/reference/get-v3-intel-id): detail with cluster composition | | `GET /v2/intel-categories` | Moved into [`GET /v3/vocabulary`](/developers/v3/reference/get-v3-vocabulary) | | `GET /v2/clusters` | [`GET /v3/clusters`](/developers/v3/reference/get-v3-clusters) | | `GET /v2/api-keys/info` | [`GET /v3/me`](/developers/v3/reference/get-v3-me): account, plan, limits, history window | | `POST /v2/agents/indigo` | Removed: use Ask at [aixbt.tech](https://aixbt.tech) | | `/v2/recipes/*` | Removed: recipes have been discontinued | | all `/v1/*` | Migrate to v3 | ## Envelope [#envelope] | v2 | v3 | | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | Body `status` integer + `data` | `{data, meta}`; the HTTP status is the status | | `pagination {page, limit, totalCount, hasMore}` | Opaque `cursor` + `limit`; follow `meta.nextCursor` | | Error strings and per-route codes | One error shape `{code, message, details?}` with a fixed set of codes | | One generic 404 | Specific miss codes: `not_found` (never existed), `not_current` (no longer current) | | `at` historical reads | Removed: use the Project or Topic `series/{measure}` route with a `from`/`to` window for measurement history | ## Properties [#properties] | v2 | v3 | | ----------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | `trendScore` | `trend` for continued attention and the sole current ranking measurement | | `trendScoreDelta` | `trendDelta {value, window: "PT24H"}` | | `signals[]` on Project | `intel[]`: a short preview of recent intel | | `cut` (undocumented) | `grade`: documented values `chipped` → `flawless`, filterable | | `stanceSeries` (undocumented) | `stance` on Topic detail | | `coingeckoData` block | Removed: `symbol`, `image`, and `categories` are now top-level fields; provider identifiers are not exposed | | `tokens[]` | Typed `assets[]`: `{type, chain, address, primary}` | | `xHandle` | `identifiers.x` (join keys under `identifiers`, e.g. `identifiers.coingecko`) | | `rationale` | Removed: use Intel items and their citations | | `frontierReport {url, preview}` on topics | `report {id, title, publishedAt}` ref: fetch via `/v3/reports/{id}` | ## Deprecation headers [#deprecation-headers] Deprecated v2 routes respond with an RFC 9745 `Deprecation` header and an RFC 8288 `Link` header pointing at the v3 successor, so clients can detect the migration path programmatically. # Reference See [Overview](/developers/v3) for authentication and request basics. Base URL: `https://api.aixbt.tech`. ## Projects [#projects] * [`GET /v3/projects`](/developers/v3/reference/get-v3-projects) — List Projects * [`GET /v3/projects/{idOrSlug}`](/developers/v3/reference/get-v3-projects-idOrSlug) — Get a Project * [`GET /v3/projects/{idOrSlug}/series/{measure}`](/developers/v3/reference/get-v3-projects-idOrSlug-series-measure) — Get a Project measurement series ## Topics [#topics] * [`GET /v3/topics`](/developers/v3/reference/get-v3-topics) — List the current Topic leaderboard * [`GET /v3/topics/{topicId}`](/developers/v3/reference/get-v3-topics-topicId) — Get a Topic * [`GET /v3/topics/{topicId}/projects`](/developers/v3/reference/get-v3-topics-topicId-projects) — List Projects associated with a Topic * [`GET /v3/topics/{topicId}/series/{measure}`](/developers/v3/reference/get-v3-topics-topicId-series-measure) — Get a Topic measurement series ## Intel [#intel] * [`GET /v3/intel`](/developers/v3/reference/get-v3-intel) — List Intel * [`GET /v3/intel/{id}`](/developers/v3/reference/get-v3-intel-id) — Get an Intel item ## Reports [#reports] * [`GET /v3/reports`](/developers/v3/reference/get-v3-reports) — List published Reports * [`GET /v3/reports/{id}`](/developers/v3/reference/get-v3-reports-id) — Get a published Report ## Clusters [#clusters] * [`GET /v3/clusters`](/developers/v3/reference/get-v3-clusters) — List Clusters ## Alerts [#alerts] * [`GET /v3/alerts`](/developers/v3/reference/get-v3-alerts) — List my alert subscriptions * [`POST /v3/alerts`](/developers/v3/reference/post-v3-alerts) — Create an alert subscription * [`DELETE /v3/alerts/{id}`](/developers/v3/reference/delete-v3-alerts-id) — Delete an alert subscription * [`GET /v3/alerts/{id}`](/developers/v3/reference/get-v3-alerts-id) — Get an alert subscription * [`PATCH /v3/alerts/{id}`](/developers/v3/reference/patch-v3-alerts-id) — Update an alert subscription * [`GET /v3/alerts/destinations`](/developers/v3/reference/get-v3-alerts-destinations) — List my delivery destinations ## Vocabulary [#vocabulary] * [`GET /v3/vocabulary`](/developers/v3/reference/get-v3-vocabulary) — Get the filter vocabularies ## Me [#me] * [`GET /v3/me`](/developers/v3/reference/get-v3-me) — Get the signed-in account ## Meta [#meta] * [`GET /v3/openapi.yaml`](/developers/v3/reference/get-v3-openapi.yaml) — Get this contract # List Projects `GET /v3/projects` Canonical Project collection, sorted by `trend` (default), `createdAt`, or `reinforcedAt`, always descending. All filters come from the documented filter values; catalog-derived values (categories, chains, asset types) are discoverable via `GET /v3/vocabulary`. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "$ref": "#/components/parameters/Cursor" }, { "$ref": "#/components/parameters/Limit" }, { "name": "sort", "in": "query", "schema": { "type": "string", "enum": [ "trend", "createdAt", "reinforcedAt" ], "default": "trend" } }, { "name": "ids", "in": "query", "description": "Comma-separated canonical Project ids.", "schema": { "type": "string" } }, { "name": "slugs", "in": "query", "description": "Comma-separated Project slugs (aliases resolve).", "schema": { "type": "string" } }, { "name": "names", "in": "query", "description": "Comma-separated display names, case-insensitive.", "schema": { "type": "string" } }, { "name": "xHandles", "in": "query", "description": "Comma-separated X handles without the at sign.", "schema": { "type": "string" } }, { "name": "tickers", "in": "query", "description": "Comma-separated asset tickers.", "schema": { "type": "string" } }, { "name": "categories", "in": "query", "description": "Comma-separated canonical taxonomy slugs.", "schema": { "type": "string" } }, { "name": "chain", "in": "query", "description": "Restrict to Projects with an asset deployment on this chain.", "schema": { "type": "string" } }, { "name": "address", "in": "query", "description": "Asset contract address (EVM case-insensitive, other chains case-sensitive).", "schema": { "type": "string" } }, { "name": "assetTypes", "in": "query", "description": "Comma-separated asset types (see `/v3/vocabulary`).", "schema": { "type": "string" } }, { "name": "universe", "in": "query", "schema": { "type": "string", "enum": [ "crypto", "tradfi" ], "default": "crypto" } }, { "name": "minTrend", "in": "query", "description": "Minimum current trend measurement.", "schema": { "type": "number" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Project page.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Project" } }, "meta": { "$ref": "#/components/schemas/CollectionMeta" } } }, "examples": { "success": { "summary": "First page of Projects ranked by trend", "value": { "data": [ { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain", "universe": "crypto", "symbol": "EXC", "description": "Modular settlement layer for restaked rollups.", "identifiers": { "coingecko": "examplechain", "x": "examplechain" }, "image": "https://images.aixbt.tech/projects/examplechain.png", "trend": 87.4, "rank": 3, "categories": [ "modular-blockchains", "restaking" ], "assets": [ { "type": "token", "chain": "ethereum", "address": "0xabc0000000000000000000000000000000000001", "primary": true } ], "intel": [ { "id": "6890aa000000000000000001", "headline": "Mainnet v2 date confirmed", "grade": "polished", "detectedAt": "2026-08-04T21:14:00Z" } ], "createdAt": "2026-05-02T10:00:00Z", "updatedAt": "2026-08-05T04:58:11Z", "reinforcedAt": "2026-08-05T03:40:00Z" } ], "meta": { "nextCursor": "b3BhcXVlLWN1cnNvcg", "history": { "lookbackDays": 90, "earliestAvailableAt": "2026-05-07T00:00:00Z" }, "versions": { "trendModel": "trend-v3" } } } }, "empty": { "summary": "Filter matched nothing", "value": { "data": [], "meta": { "nextCursor": null } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" }, "503": { "$ref": "#/components/responses/Unavailable" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get a Project `GET /v3/projects/{idOrSlug}` Project detail by canonical id or slug. Slug aliases (from renames or merges) resolve to the canonical resource; the response always carries the canonical `slug`. Includes a bounded `relatedProjects` co-mention preview derived from the same posts that support Project Intel; observational only, not partnership or endorsement. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "$ref": "#/components/parameters/IdOrSlug" } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Project detail.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/ProjectDetail" }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "Detail with related Projects", "value": { "data": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain", "universe": "crypto", "symbol": "EXC", "description": "Modular settlement layer for restaked rollups.", "identifiers": { "coingecko": "examplechain", "x": "examplechain" }, "image": "https://images.aixbt.tech/projects/examplechain.png", "trend": 87.4, "trendDelta": { "value": 12.1, "window": "PT24H" }, "rank": 3, "categories": [ "modular-blockchains", "restaking" ], "assets": [ { "type": "token", "chain": "ethereum", "address": "0xabc0000000000000000000000000000000000001", "primary": true } ], "intel": [ { "id": "6890aa000000000000000001", "headline": "Mainnet v2 date confirmed", "grade": "polished", "detectedAt": "2026-08-04T21:14:00Z" } ], "relatedProjects": [ { "project": { "id": "665f0a2b1c9d440000a1b2c4", "slug": "otherchain", "name": "OtherChain" }, "kind": "co_mention", "sharedIntel": 14, "window": "P14D", "asOf": "2026-08-05T04:45:00Z" } ], "createdAt": "2026-05-02T10:00:00Z", "updatedAt": "2026-08-05T04:58:11Z", "reinforcedAt": "2026-08-05T03:40:00Z" }, "meta": { "history": { "lookbackDays": 90, "earliestAvailableAt": "2026-05-07T00:00:00Z" }, "versions": { "trendModel": "trend-v3", "relations": "co-mention-v1" } } } }, "partial": { "summary": "Assetless Project with nothing tradable yet", "value": { "data": { "id": "665f0a2b1c9d440000a1b2c5", "slug": "stealthlabs", "name": "StealthLabs", "universe": "crypto", "description": "Pre-token research collective.", "trend": 41.2, "categories": [ "ai-agents" ], "assets": [], "intel": [], "createdAt": "2026-07-29T08:00:00Z", "updatedAt": "2026-08-05T02:10:00Z" }, "meta": {} } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" }, "503": { "$ref": "#/components/responses/Unavailable" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get a Project measurement series `GET /v3/projects/{idOrSlug}/series/{measure}` One series contract for the public measures. `trend` is the hourly canonical score history; `rank` is the committed Trend rank-transition series exactly as recorded: change points, not resampled intervals (`value` is `null` while unranked). Point timestamps preserve the actual measurement boundary and `meta.basis` states which cadence applies. Points are objects, never positional arrays. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "$ref": "#/components/parameters/IdOrSlug" }, { "name": "measure", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "trend", "rank" ] } }, { "name": "from", "in": "query", "schema": { "type": "string", "format": "date-time" } }, { "name": "to", "in": "query", "schema": { "type": "string", "format": "date-time" } }, { "name": "include", "in": "query", "description": "`clusters` adds per-point cluster attribution only to `trend` series.", "schema": { "type": "string", "enum": [ "clusters" ] } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Series page.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "object", "required": [ "project", "points" ], "properties": { "project": { "$ref": "#/components/schemas/ProjectRef" }, "points": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesPoint" } } } }, "meta": { "$ref": "#/components/schemas/SeriesMeta" } } }, "examples": { "success": { "summary": "Hourly trend series", "value": { "data": { "project": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain" }, "points": [ { "at": "2026-08-05T03:00:00Z", "value": 84.1 }, { "at": "2026-08-05T04:00:00Z", "value": 87.4 } ] }, "meta": { "measure": "trend", "basis": "hourly", "window": { "from": "2026-08-04T05:00:00Z", "to": "2026-08-05T05:00:00Z" } } } }, "rank": { "summary": "Rank transition series over an explicit window", "value": { "data": { "project": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain" }, "points": [ { "at": "2026-07-20T11:45:00Z", "value": 7 }, { "at": "2026-07-20T12:00:00Z", "value": null } ] }, "meta": { "measure": "rank", "basis": "rank_transitions", "window": { "from": "2026-07-20T11:00:00Z", "to": "2026-07-20T12:00:00Z" } } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" }, "503": { "$ref": "#/components/responses/Unavailable" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # List the current Topic leaderboard `GET /v3/topics` The current Topic leaderboard (top 25), a bounded set, so there is no cursor. `meta.snapshot` carries the shared evidence cutoff. `trend` represents continued attention. With `projectId` (or `projectSlug`) the same authority is projected inversely: only Topics observationally associated with that Project, each item gaining an `association` block. ## Authentication None. This endpoint is public. ## Parameters ```json [ { "name": "ranking", "in": "query", "description": "Ranking measurement used to select and order the leaderboard.", "schema": { "type": "string", "enum": [ "trend" ], "default": "trend" } }, { "name": "projectId", "in": "query", "description": "Current canonical Project id. Filters the current leaderboard by observational Topic associations.", "schema": { "type": "string" } }, { "name": "projectSlug", "in": "query", "description": "Current canonical Project slug or slug alias. Filters the same current observational associations as projectId.", "schema": { "type": "string" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Leaderboard.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopicListItem" } }, "meta": { "$ref": "#/components/schemas/TopicSnapshotMeta" } } }, "examples": { "success": { "summary": "Current leaderboard head", "value": { "data": [ { "id": "topic_a1b2c3d4e5f601234567", "rank": 1, "name": "Restaking yield compression", "summary": "Yields across restaking protocols compress as new AVS demand stalls.", "trend": 93.2, "postCount": 412, "authorCount": 118, "lastSeenAt": "2026-08-05T04:52:00Z", "clusters": [ { "cluster": { "id": "cl_defi", "name": "DeFi researchers" }, "share": 0.41 } ], "report": { "id": "tr_9f2b6c41d8a35e07b1c4f6a2d5e8091c3b7a4f60d2e5c8b1a4f7092c5d8e3b6a", "title": "Restaking Yield Compression", "publishedAt": "2026-08-04T18:00:00Z" } } ], "meta": { "snapshot": { "completedAt": "2026-08-05T04:55:00Z", "latestEvidenceAt": "2026-08-05T04:52:10Z", "windowStartedAt": "2026-08-04T04:55:00Z" } } } }, "empty": { "summary": "Project with no associated Topics", "value": { "data": [], "meta": { "snapshot": { "completedAt": "2026-08-05T04:55:00Z", "latestEvidenceAt": "2026-08-05T04:52:10Z", "windowStartedAt": "2026-08-04T04:55:00Z" } } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get a Topic `GET /v3/topics/{topicId}` Topic detail. Carries the versioned `stance` series: bucketed, target-scoped stance of the Topic conversation itself (`supportive`, `skeptical`, `neutral`, `mixed`, `unknown`), independent from Project-targeted sentiment. ## Authentication None. This endpoint is public. ## Parameters ```json [ { "name": "topicId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^topic_[a-f0-9]{20}$" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Topic detail.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/TopicDetail" }, "meta": { "$ref": "#/components/schemas/TopicSnapshotMeta" } } }, "examples": { "success": { "summary": "Detail with stance series", "value": { "data": { "id": "topic_a1b2c3d4e5f601234567", "rank": 1, "name": "Restaking yield compression", "summary": "Yields across restaking protocols compress as new AVS demand stalls.", "trend": 93.2, "postCount": 412, "authorCount": 118, "lastSeenAt": "2026-08-05T04:52:00Z", "clusters": [ { "cluster": { "id": "cl_defi", "name": "DeFi researchers" }, "share": 0.41 } ], "report": { "id": "tr_9f2b6c41d8a35e07b1c4f6a2d5e8091c3b7a4f60d2e5c8b1a4f7092c5d8e3b6a", "title": "Restaking Yield Compression", "publishedAt": "2026-08-04T18:00:00Z" }, "stance": { "buckets": [ { "from": "2026-08-05T03:00:00Z", "to": "2026-08-05T04:00:00Z", "dominant": "skeptical", "shares": { "supportive": 0.18, "skeptical": 0.47, "neutral": 0.22, "mixed": 0.08, "unknown": 0.05 } } ] } }, "meta": { "snapshot": { "completedAt": "2026-08-05T04:55:00Z", "latestEvidenceAt": "2026-08-05T04:52:10Z", "windowStartedAt": "2026-08-04T04:55:00Z" }, "versions": { "stanceSchema": "1", "stanceClassifier": "stance-v2" } } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # List Projects associated with a Topic `GET /v3/topics/{topicId}/projects` The authoritative Topic→Project association collection. An association is observational: canonical Project-attributed posts that are members of the Topic at the shared cutoff in the sustained-attention cohort. It never implies partnership, endorsement, taxonomy, causality, or a primary Project. Coverage is a statement about source completeness, separate from association eligibility. ## Authentication None. This endpoint is public. ## Parameters ```json [ { "name": "topicId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^topic_[a-f0-9]{20}$" } }, { "name": "ranking", "in": "query", "description": "Topic ranking cohort used to resolve the association snapshot.", "schema": { "type": "string", "enum": [ "trend" ], "default": "trend" } }, { "$ref": "#/components/parameters/Cursor" }, { "$ref": "#/components/parameters/Limit" } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Association page.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopicProjectAssociation" } }, "meta": { "$ref": "#/components/schemas/AssociationMeta" } } }, "examples": { "success": { "summary": "Associations at the current window", "value": { "data": [ { "project": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain" }, "observedPosts": 96, "distinctAuthors": 44, "shareOfTopicPosts": 0.23, "firstObservedAt": "2026-08-04T06:10:00Z", "lastObservedAt": "2026-08-05T04:41:00Z", "sentiment": { "populated": 61, "coverage": 0.64 } } ], "meta": { "nextCursor": null, "window": { "from": "2026-08-04T04:55:00Z", "to": "2026-08-05T04:55:00Z" }, "versions": { "resolver": "project-resolver-v4", "membership": "topic-membership-v2" } } } }, "empty": { "summary": "No qualifying associations", "value": { "data": [], "meta": { "nextCursor": null, "window": { "from": "2026-08-04T04:55:00Z", "to": "2026-08-05T04:55:00Z" } } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get a Topic measurement series `GET /v3/topics/{topicId}/series/{measure}` The same measurement-series contract used by Projects, for one known Topic id. `trend` keeps the newest real completed score boundary in each hourly bucket. `rank` is the committed Trend-boundary series reduced to change points; `value` is `null` when a complete leaderboard publishes the Topic as unranked. Point timestamps preserve the actual completed measurement boundary. Topic history requires an API key. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "name": "topicId", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^topic_[a-f0-9]{20}$" } }, { "name": "measure", "in": "path", "required": true, "schema": { "type": "string", "enum": [ "trend", "rank" ] } }, { "name": "from", "in": "query", "schema": { "type": "string", "format": "date-time" } }, { "name": "to", "in": "query", "schema": { "type": "string", "format": "date-time" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Series page.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "object", "required": [ "topic", "points" ], "properties": { "topic": { "$ref": "#/components/schemas/TopicRef" }, "points": { "type": "array", "items": { "$ref": "#/components/schemas/SeriesPoint" } } } }, "meta": { "$ref": "#/components/schemas/SeriesMeta" } } }, "examples": { "success": { "summary": "Hourly Topic trend series", "value": { "data": { "topic": { "id": "topic_a1b2c3d4e5f601234567", "name": "Restaking yield compression" }, "points": [ { "at": "2026-08-05T03:45:00Z", "value": 91.8 }, { "at": "2026-08-05T04:45:00Z", "value": 93.2 } ] }, "meta": { "measure": "trend", "basis": "hourly", "window": { "from": "2026-08-04T05:00:00Z", "to": "2026-08-05T05:00:00Z" }, "versions": { "trendModel": "trend-nb-predictive-v2", "topicAlgorithm": "trend-nb-predictive-v2.topic-relevance-v3" }, "history": { "lookbackDays": 90, "earliestAvailableAt": "2026-05-07T00:00:00Z" } } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" }, "503": { "$ref": "#/components/responses/Unavailable" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # List Intel `GET /v3/intel` Discrete evidence-graded developments. `grades` filters on the evidence ladder from `chipped` to `flawless`. Project filters combine with AND across kinds and OR within one comma-separated value. `search` is free-text search: the query parses into meaningful terms that must all match, against project identity (names, tickers, handles, addresses, chains) and intel text. Matched items carry a `searchMatches` array explaining each match. Search results page through `meta.nextCursor`. Every non-empty query shape is accepted. When responsive candidate or recent-result bounds may omit matches, `meta.searchCoverage` names the bound and `meta.executedSearch` discloses any normalized scope that differs from the request. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "$ref": "#/components/parameters/Cursor" }, { "$ref": "#/components/parameters/Limit" }, { "name": "search", "in": "query", "description": "Free-text deep search; combines with every other filter.", "schema": { "type": "string" } }, { "name": "sort", "in": "query", "description": "`detectedAt` orders by first sighting; `reinforcedAt` by the\nlatest confirming observation of any kind (an echoed story).\n", "schema": { "type": "string", "enum": [ "reinforcedAt", "detectedAt" ], "default": "detectedAt" } }, { "name": "projectIds", "in": "query", "schema": { "type": "string" } }, { "name": "projectSlugs", "in": "query", "schema": { "type": "string" } }, { "name": "names", "in": "query", "schema": { "type": "string" } }, { "name": "xHandles", "in": "query", "schema": { "type": "string" } }, { "name": "tickers", "in": "query", "schema": { "type": "string" } }, { "name": "address", "in": "query", "schema": { "type": "string" } }, { "name": "assetTypes", "in": "query", "description": "Comma-separated asset types of the parent Project.", "schema": { "type": "string" } }, { "name": "marketCap", "in": "query", "description": "Restrict to Projects whose current market cap is in the named band: `low` (under $80M), `mid` ($80M to $500M), or `large` ($500M and above). Projects without a current market cap are excluded. The band is a filter only; responses carry no market data.", "schema": { "type": "string", "enum": [ "low", "mid", "large" ] } }, { "name": "projectRanking", "in": "query", "description": "Restrict to Projects in the named ranking cohort.", "schema": { "type": "string", "enum": [ "trend" ] } }, { "name": "clusterIds", "in": "query", "schema": { "type": "string" } }, { "name": "categories", "in": "query", "description": "Comma-separated intel event categories (see `/v3/vocabulary`).", "schema": { "type": "string" } }, { "name": "grades", "in": "query", "description": "Comma-separated evidence grades.", "schema": { "type": "string" } }, { "name": "sentiments", "in": "query", "description": "Comma-separated sentiment values.", "schema": { "type": "string" } }, { "name": "hasOfficialSource", "in": "query", "schema": { "type": "boolean" } }, { "name": "minClusters", "in": "query", "schema": { "type": "integer", "minimum": 1 } }, { "name": "detectedAfter", "in": "query", "schema": { "type": "string", "format": "date-time" } }, { "name": "detectedBefore", "in": "query", "schema": { "type": "string", "format": "date-time" } }, { "name": "reinforcedAfter", "in": "query", "schema": { "type": "string", "format": "date-time" } }, { "name": "reinforcedBefore", "in": "query", "schema": { "type": "string", "format": "date-time" } }, { "name": "activity", "in": "query", "schema": { "type": "string", "enum": [ "all", "observations", "none" ], "default": "all" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Intel page.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Intel" } }, "meta": { "$ref": "#/components/schemas/IntelCollectionMeta" } } }, "examples": { "success": { "summary": "Recent graded intel", "value": { "data": [ { "id": "6890aa000000000000000001", "headline": "Mainnet v2 date confirmed", "description": "ExampleChain confirmed the v2 mainnet date for September 3rd with a public changelog entry.", "grade": "polished", "project": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain" }, "category": "product-launch", "clusters": [ { "id": "cl_defi", "name": "DeFi researchers" } ], "observationCount": 9, "hasOfficialSource": true, "citations": [ "https://blog.example.chain/v2-mainnet" ], "sentiment": { "value": "positive" }, "detectedAt": "2026-08-04T21:14:00Z", "reinforcedAt": "2026-08-05T03:40:00Z" } ], "meta": { "nextCursor": "b3BhcXVlLWN1cnNvcg", "history": { "lookbackDays": 90, "earliestAvailableAt": "2026-05-07T00:00:00Z" } } } }, "empty": { "summary": "No intel matched the qualifiers", "value": { "data": [], "meta": { "nextCursor": null } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get an Intel item `GET /v3/intel/{id}` Intel detail with the activity trail and cluster composition. The history boundary is enforced against the intel's own recency (`reinforcedAt`, falling back to `detectedAt`). ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "activity", "in": "query", "schema": { "type": "string", "enum": [ "all", "observations", "none" ], "default": "all" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Intel detail.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/IntelDetail" }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "Detail with activity and composition", "value": { "data": { "id": "6890aa000000000000000001", "headline": "Mainnet v2 date confirmed", "description": "ExampleChain confirmed the v2 mainnet date for September 3rd with a public changelog entry.", "grade": "polished", "project": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain" }, "category": "product-launch", "clusters": [ { "id": "cl_defi", "name": "DeFi researchers" } ], "observationCount": 9, "hasOfficialSource": true, "citations": [ "https://blog.example.chain/v2-mainnet" ], "sentiment": { "value": "positive" }, "detectedAt": "2026-08-04T21:14:00Z", "reinforcedAt": "2026-08-05T03:40:00Z", "activity": [ { "action": "observation", "detectedAt": "2026-08-04T21:14:00Z", "occurredAt": "2026-08-04T21:14:00Z", "eventTime": { "status": "instant", "at": "2026-09-03T00:00:00Z", "precision": "day", "relationToSource": "future" }, "headline": "First sighting", "source": { "url": "https://x.com/someone/status/1", "official": false }, "sentiment": { "value": "positive" } }, { "action": "official_statement", "detectedAt": "2026-08-04T22:03:00Z", "occurredAt": "2026-08-04T22:03:00Z", "eventTime": { "status": "unknown", "reason": "ambiguous" }, "source": { "url": "https://blog.example.chain/v2-mainnet", "official": true } } ], "clusterComposition": [ { "cluster": { "id": "cl_defi", "name": "DeFi researchers" }, "percentage": 62.5 }, { "cluster": { "id": "cl_other", "name": "Other" }, "percentage": 37.5 } ] }, "meta": {} } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # List published Reports `GET /v3/reports` Top-level read-only collection of published research artifacts, newest first, with relationship filters. List items are bounded previews; the full body requires the `topic-reports` entitlement on the detail route. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "$ref": "#/components/parameters/Cursor" }, { "$ref": "#/components/parameters/Limit" }, { "name": "projectId", "in": "query", "description": "Current canonical Project id. Matches Reports whose frozen publication-time binding used this id or one of its absorbed id aliases.", "schema": { "type": "string" } }, { "name": "projectSlug", "in": "query", "description": "Current canonical Project slug or slug alias. Matches the same frozen publication-time bindings as projectId.", "schema": { "type": "string" } }, { "name": "topicId", "in": "query", "schema": { "type": "string" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Report page.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ReportListItem" } }, "meta": { "$ref": "#/components/schemas/CollectionMeta" } } }, "examples": { "success": { "summary": "Latest reports", "value": { "data": [ { "id": "tr_9f2b6c41d8a35e07b1c4f6a2d5e8091c3b7a4f60d2e5c8b1a4f7092c5d8e3b6a", "title": "Restaking Yield Compression", "publishedAt": "2026-08-04T18:00:00Z", "revisedAt": null, "primarySubject": { "type": "topic", "topic": { "id": "topic_a1b2c3d4e5f601234567", "name": "Restaking yield compression" } }, "relatedSubjects": [ { "type": "project", "project": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain" } } ], "preview": "Yields across restaking protocols compress as new AVS demand stalls..." } ], "meta": { "nextCursor": null } } }, "empty": { "summary": "No reports for the filter", "value": { "data": [], "meta": { "nextCursor": null } } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get a published Report `GET /v3/reports/{id}` Full report artifact: body, typed sources, and the publication-time evidence block. Requires the `topic-reports` entitlement. The evidence block quotes market figures with source attribution as part of the published research. ## Authentication Required. Send an API key in the `x-api-key` header. Required account access: `topic-reports`. ## Parameters ```json [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Report detail.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/Report" }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "Full report", "value": { "data": { "id": "tr_9f2b6c41d8a35e07b1c4f6a2d5e8091c3b7a4f60d2e5c8b1a4f7092c5d8e3b6a", "title": "Restaking Yield Compression", "publishedAt": "2026-08-04T18:00:00Z", "revisedAt": null, "primarySubject": { "type": "topic", "topic": { "id": "topic_a1b2c3d4e5f601234567", "name": "Restaking yield compression" } }, "relatedSubjects": [ { "type": "project", "project": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain" } } ], "summary": "Yields across restaking protocols compress as new AVS demand stalls.", "body": "## Thesis\n\nYields compress because...", "sources": [ { "title": "AVS demand dashboard", "url": "https://dune.com/example/avs", "publishedAt": "2026-08-03T00:00:00Z" } ], "evidence": { "snapshotAt": "2026-08-04T18:00:00Z", "entities": [ { "project": { "id": "665f0a2b1c9d440000a1b2c3", "slug": "examplechain", "name": "ExampleChain" }, "observations": [ { "key": "avs_count", "value": 41, "unit": "count", "provider": "aixbt", "observedAt": "2026-08-04T17:58:00Z", "freshness": "fresh" } ] } ] } }, "meta": {} } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # List Clusters `GET /v3/clusters` Audience/source archetypes used as an analysis dimension across Topics and Intel. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "name": "universe", "in": "query", "schema": { "type": "string", "enum": [ "crypto", "tradfi" ], "default": "crypto" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Clusters.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Cluster" } }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "Crypto universe clusters", "value": { "data": [ { "id": "cl_defi", "name": "DeFi researchers", "description": "Protocol analysts and yield researchers.", "universe": "crypto" } ], "meta": {} } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # List my alert subscriptions `GET /v3/alerts` Alert subscriptions owned by the calling credential. One owner may hold at most 50 subscriptions, paused rows included. Lists the API-manageable kinds (`intelligence.material`, `rank.entered`); preset subscriptions managed in product Settings do not appear here. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "$ref": "#/components/parameters/Cursor" }, { "$ref": "#/components/parameters/Limit" } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Alert page.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/Alert" } }, "meta": { "$ref": "#/components/schemas/CollectionMeta" } } }, "examples": { "success": { "summary": "Owner subscriptions", "value": { "data": [ { "id": "66a10a2b1c9d440000d1e2f3", "status": "active", "trigger": "intelligence.material", "selector": { "followedProjects": true, "qualifiers": { "grades": [ "polished", "flawless" ], "categories": [ "product-launch" ] } }, "cadence": "hourly", "destinationIds": [ "66a10a2b1c9d440000aa0001" ], "createdAt": "2026-08-01T10:00:00Z", "updatedAt": "2026-08-05T04:00:00Z" } ], "meta": { "nextCursor": null } } }, "empty": { "summary": "No subscriptions yet", "value": { "data": [], "meta": { "nextCursor": null } } } } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Create an alert subscription `POST /v3/alerts` Creates an owner-scoped subscription: selector + one trigger + delivery cadence + explicit destination ids. Destinations are provisioned in product Settings and referenced here by id. Chat cadence defaults to `hourly`; `instant` is subject to a per-day platform safety ceiling. Webhook destinations receive every admitted event regardless of cadence. The 50-subscription owner cap and selector list bounds (20 values per list) are enforced. An account holds at most one `rank.entered` subscription; creating a second while one exists fails with `invalid_request`. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters None. ## Request body ```json { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AlertCreate" }, "examples": { "materialIntel": { "summary": "Material intel on followed Projects", "value": { "trigger": "intelligence.material", "selector": { "followedProjects": true, "qualifiers": { "grades": [ "polished", "flawless" ] } }, "cadence": "hourly", "destinationIds": [ "66a10a2b1c9d440000aa0001" ] } }, "rankEntry": { "summary": "Rank entry into the top 10", "value": { "trigger": "rank.entered", "rankThreshold": 10, "selector": { "qualifiers": { "categories": [ "modular-blockchains" ] } }, "cadence": "instant", "destinationIds": [ "66a10a2b1c9d440000aa0002" ] } } } } } } ``` ## Responses ```json { "201": { "description": "Created subscription.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/Alert" }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "Created", "value": { "data": { "id": "66a10a2b1c9d440000d1e2f4", "status": "active", "trigger": "rank.entered", "rankThreshold": 10, "selector": { "qualifiers": { "categories": [ "modular-blockchains" ] } }, "cadence": "instant", "destinationIds": [ "66a10a2b1c9d440000aa0002" ], "createdAt": "2026-08-05T05:00:00Z", "updatedAt": "2026-08-05T05:00:00Z" }, "meta": {} } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Delete an alert subscription `DELETE /v3/alerts/{id}` Removes the subscription; delivery history retention is unaffected. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ] ``` ## Request body None. ## Responses ```json { "204": { "description": "Deleted." }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get an alert subscription `GET /v3/alerts/{id}` Owner-scoped read; another owner's id behaves as `not_found`. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Subscription.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/Alert" }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "One subscription", "value": { "data": { "id": "66a10a2b1c9d440000d1e2f3", "status": "active", "trigger": "intelligence.material", "selector": { "followedProjects": true }, "cadence": "hourly", "destinationIds": [ "66a10a2b1c9d440000aa0001" ], "createdAt": "2026-08-01T10:00:00Z", "updatedAt": "2026-08-05T04:00:00Z" }, "meta": {} } } } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Update an alert subscription `PATCH /v3/alerts/{id}` Partial update: pause/resume, rename, change cadence, selector, threshold, or destinations. Semantics are identical to creation. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ] ``` ## Request body ```json { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AlertUpdate" }, "examples": { "pause": { "summary": "Pause delivery", "value": { "status": "paused" } } } } } } ``` ## Responses ```json { "200": { "description": "Updated subscription.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/Alert" }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "Paused", "value": { "data": { "id": "66a10a2b1c9d440000d1e2f3", "status": "paused", "trigger": "intelligence.material", "selector": { "followedProjects": true }, "cadence": "hourly", "destinationIds": [ "66a10a2b1c9d440000aa0001" ], "createdAt": "2026-08-01T10:00:00Z", "updatedAt": "2026-08-05T05:10:00Z" }, "meta": {} } } } } } }, "400": { "$ref": "#/components/responses/BadRequest" }, "401": { "$ref": "#/components/responses/Unauthorized" }, "404": { "$ref": "#/components/responses/SubjectMiss" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # List my delivery destinations `GET /v3/alerts/destinations` Read-only list of destinations connected in product Settings (Telegram, Discord, signed webhooks). Creation, secret rotation, and repair stay in Settings; subscriptions reference these ids. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "Destinations.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/AlertDestination" } }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "Connected destinations", "value": { "data": [ { "id": "66a10a2b1c9d440000aa0001", "kind": "telegram", "label": "Team channel", "status": "active" }, { "id": "66a10a2b1c9d440000aa0002", "kind": "webhook", "label": "prod ingest", "status": "active" } ], "meta": {} } } } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get the filter vocabularies `GET /v3/vocabulary` One discovery surface for every value a v3 filter accepts. Closed vocabularies (grades, sentiments, stances, sort keys, activity modes, rankings, universes, asset types, series measures) are versioned with the contract; catalog-derived sets (project categories, intel categories, chains) are composed from their owning catalogs at read time and carry their own versions. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "Vocabularies.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/Vocabulary" }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "Current vocabularies", "value": { "data": { "grades": [ "chipped", "flawed", "cut", "polished", "flawless" ], "sentiments": [ "positive", "neutral", "negative" ], "stances": [ "supportive", "skeptical", "neutral", "mixed", "unknown" ], "assetTypes": [ "token", "stablecoin", "nft-collection" ], "marketCapBands": [ "low", "mid", "large" ], "projectSort": [ "trend", "createdAt", "reinforcedAt" ], "intelSort": [ "reinforcedAt", "detectedAt" ], "activityModes": [ "all", "observations", "none" ], "projectRankings": [ "trend" ], "universes": [ "crypto", "tradfi" ], "seriesMeasures": [ "trend", "rank" ], "alertTriggers": [ "intelligence.material", "rank.entered" ], "alertCadences": [ "instant", "hourly", "every_12h", "daily" ], "projectCategories": [ { "slug": "modular-blockchains", "name": "Modular blockchains" } ], "intelCategories": [ { "slug": "product-launch", "name": "Product launch" } ], "chains": [ "ethereum", "solana", "base" ] }, "meta": { "versions": { "vocabulary": "3.0.0-draft.1", "taxonomy": "taxonomy-v2" } } } } } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get the signed-in account `GET /v3/me` The account behind the credential: its id, plan with billing period, and wallet (last four characters only), plus the effective rate limits and history window. Replaces `/v2/api-keys/info`. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "The signed-in account.", "content": { "application/json": { "schema": { "type": "object", "required": [ "data", "meta" ], "properties": { "data": { "$ref": "#/components/schemas/Me" }, "meta": { "$ref": "#/components/schemas/Meta" } } }, "examples": { "success": { "summary": "A Frontier account", "value": { "data": { "account": { "id": "66f1c0a2e4b0c1d2e3f40516", "plan": { "name": "AIXBT Frontier", "via": "subscription", "status": "active", "periodStart": "2026-09-01T00:00:00Z", "renewsAt": "2026-10-01T00:00:00Z", "endsAt": null }, "wallet": { "chain": "eip155", "last4": "a3F9" } }, "rateLimit": { "perMinute": 100, "perDay": 10000 }, "history": { "lookbackDays": 90 } }, "meta": {} } } } } } }, "401": { "$ref": "#/components/responses/Unauthorized" }, "429": { "$ref": "#/components/responses/RateLimited" }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Get this contract `GET /v3/openapi.yaml` The canonical v3 OpenAPI document, served verbatim. No credential required. ## Authentication None. This endpoint is public. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "This document.", "content": { "application/yaml": { "schema": { "type": "string" } } } }, "500": { "$ref": "#/components/responses/Internal" } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v3/openapi.yaml). # Overview v2 is deprecated. New integrations should use [API v3](/developers/v3); if you are on v2 today, the [migration guide](/developers/v3/migration) maps every route and field. v2 remains available while you migrate. The base URL is `https://api.aixbt.tech/v2`. ## Authentication [#authentication] This public request returns the current Trending topics ranking: ```bash curl --fail-with-body "https://api.aixbt.tech/v2/topics" ``` Trend is the sole ranking. Most data routes require a key from [Developer access](https://aixbt.tech/profile#developer-access), sent in the `x-api-key` header: ```bash curl --fail-with-body "https://api.aixbt.tech/v2/projects?limit=5" \ -H "x-api-key: YOUR_API_KEY" ``` ## Response contracts [#response-contracts] Most data endpoints return `status` and `data`. List endpoints can also return `pagination`, while endpoint-specific context appears under `meta`. ```json { "status": 200, "data": [], "pagination": { "page": 1, "limit": 50, "totalCount": 0, "hasMore": false } } ``` Response and error shapes are endpoint-specific. Consume `code` only when the endpoint advertises it. ## Rate limits [#rate-limits] Key-specific limits appear in [Developer access](https://aixbt.tech/profile#developer-access). Responses expose the applicable `X-RateLimit-*` headers. A rate-limited request returns `429` and `Retry-After`. ## Pagination and filtering [#pagination-and-filtering] Paginated list endpoints use `page` and `limit`. Where multi-value filters are supported, comma-separated values use OR logic within one parameter; separate filter parameters use AND logic. ## Reference [#reference] Use the [Reference](/developers/rest-api/reference) for each endpoint's parameters, authentication, schemas, examples, and live request form. For help, [contact support](/support/get-support). # Reference See [Overview](/developers/rest-api) for authentication and request basics. Base URL: `https://api.aixbt.tech`. v2 is deprecated; see the [v3 API](/developers/v3). ## API [#api] * [`GET /v2`](/developers/rest-api/reference/get-v2) — V2 API root endpoint * [`GET /v2/api-keys/info`](/developers/rest-api/reference/get-v2-api-keys-info) — Get API Key Information ## Topics [#topics] * [`GET /v2/grounding`](/developers/rest-api/reference/get-v2-grounding) — Get Topic Rankings (Legacy Alias) * [`GET /v2/grounding/history`](/developers/rest-api/reference/get-v2-grounding-history) — Get Topic Leaderboard History (Legacy Alias) * [`GET /v2/topics`](/developers/rest-api/reference/get-v2-topics) — Get Topic Rankings * [`GET /v2/topics/{id}/report`](/developers/rest-api/reference/get-v2-topics-id-report) — Get a Frontier Report ## Projects [#projects] * [`GET /v2/projects`](/developers/rest-api/reference/get-v2-projects) — List Projects * [`GET /v2/projects/{id}`](/developers/rest-api/reference/get-v2-projects-id) — Get Project * [`GET /v2/projects/{id}/neighbors`](/developers/rest-api/reference/get-v2-projects-id-neighbors) — Project Neighbors (co-mentioned projects) ## Intel [#intel] * [`GET /v2/intel`](/developers/rest-api/reference/get-v2-intel) — List Intel * [`GET /v2/intel/{id}`](/developers/rest-api/reference/get-v2-intel-id) — Get Intel by ID ## Signals [#signals] * [`GET /v2/signals`](/developers/rest-api/reference/get-v2-signals) — List Signals (deprecated alias of /v2/intel) * [`GET /v2/signals/{id}`](/developers/rest-api/reference/get-v2-signals-id) — Get Signal by ID (deprecated alias) ## Momentum [#momentum] * [`GET /v2/projects/{id}/momentum`](/developers/rest-api/reference/get-v2-projects-id-momentum) — Momentum History ## Rank [#rank] * [`GET /v2/projects/{id}/rank`](/developers/rest-api/reference/get-v2-projects-id-rank) — Rank History ## Candles [#candles] * [`GET /v2/projects/{id}/candles`](/developers/rest-api/reference/get-v2-projects-id-candles) — Price Candles (OHLCV) ## Metrics [#metrics] * [`GET /v2/projects/{id}/metrics`](/developers/rest-api/reference/get-v2-projects-id-metrics) — Project Metrics Snapshot ## Clusters [#clusters] * [`GET /v2/clusters`](/developers/rest-api/reference/get-v2-clusters) — List Clusters ## Intel Categories [#intel-categories] * [`GET /v2/intel-categories`](/developers/rest-api/reference/get-v2-intel-categories) — List Intel Categories ## Blockchain Platforms [#blockchain-platforms] * [`GET /v2/projects/chains`](/developers/rest-api/reference/get-v2-projects-chains) — List Blockchain Platforms ## Recipes [#recipes] * [`GET /v2/recipes`](/developers/rest-api/reference/get-v2-recipes) — List available recipes * [`GET /v2/recipes/{name}`](/developers/rest-api/reference/get-v2-recipes-name) — Get recipe by name * [`POST /v2/recipes/execute`](/developers/rest-api/reference/post-v2-recipes-execute) — Execute a recipe * [`POST /v2/recipes/validate`](/developers/rest-api/reference/post-v2-recipes-validate) — Validate a recipe # V2 API root endpoint `GET /v2` ## Authentication None. This endpoint is public. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "API information", "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "version", "status" ], "properties": { "name": { "type": "string", "examples": [ "AIXBT API" ] }, "version": { "type": "string", "examples": [ "2.0.0" ] }, "status": { "type": "string", "enum": [ "active" ] } } } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get API Key Information `GET /v2/api-keys/info` Returns metadata and expiry for the authenticated API key. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "API key information", "content": { "application/json": { "schema": { "type": "object", "required": [ "status", "data" ], "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "data": { "type": "object", "required": [ "id", "name", "type", "expiresAt" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string" }, "expiresAt": { "description": "ISO 8601 expiry or `never` for a non-expiring key.", "oneOf": [ { "type": "string", "format": "date-time" }, { "type": "string", "enum": [ "never" ] } ] } } } } } } } }, "401": { "description": "Missing or invalid API key", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get Topic Rankings (Legacy Alias) `GET /v2/grounding` Deprecated compatibility path returning the top 10 ranked crypto topics. New integrations should use `GET /v2/topics`. Topics are sorted by recency-weighted 48-hour attention rank and include summary, score, latest-24-hour tweet/author breadth, and freshness. **No authentication required.** Returns real-time data for all requests. Unauthenticated responses include `meta` with upgrade information. **Authenticated:** Supports historical snapshots via `?at=`. Using `?at=` without authentication returns 403. ## Authentication None. This endpoint is public. ## Lifecycle Deprecated. ## Parameters ```json [ { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Historical timestamp (ISO 8601). Returns the snapshot that was active at this time.\nOnly available for authenticated requests. Must be in the past.\n", "examples": { "default": { "value": "2026-03-25T12:00:00Z" } } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Top-10 topic rankings", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "oneOf": [ { "$ref": "#/components/schemas/UpgradeMeta" }, { "$ref": "#/components/schemas/HistoryResponseMeta" } ] }, "data": { "type": "object", "properties": { "completedAt": { "type": "string", "format": "date-time" }, "windowStartedAt": { "type": "string", "format": "date-time" }, "topics": { "type": "array", "maxItems": 10, "items": { "type": "object", "properties": { "id": { "type": "string" }, "rank": { "type": "integer" }, "name": { "type": "string" }, "summary": { "type": "string" }, "score": { "type": "number" }, "tweetCount": { "type": "integer", "description": "Qualifying tweets in the latest 24 hours" }, "authorCount": { "type": "integer", "description": "Distinct qualifying authors in the latest 24 hours" }, "lastSeenAt": { "type": "string", "format": "date-time" } } } } } } } } } } }, "400": { "description": "Invalid `at` parameter", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required, or requested history is outside the credential window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "No topic leaderboard snapshot found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get Topic Leaderboard History (Legacy Alias) `GET /v2/grounding/history` Deprecated compatibility path for paginated historical topic leaderboard snapshots. New integrations should use `GET /v2/topics`. Each snapshot contains up to 10 structured topics in attention-rank order. Supports date range filtering with `from`/`to` and anchor clamping with `at`. Requires authentication. ## Authentication Required. Send an API key in the `x-api-key` header. ## Lifecycle Deprecated. ## Parameters ```json [ { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Anchor timestamp. Clamps `to` if it exceeds this value. Defaults to now." }, { "in": "query", "name": "from", "schema": { "type": "string", "format": "date-time" }, "description": "Range start (createdAt >= from)" }, { "in": "query", "name": "to", "schema": { "type": "string", "format": "date-time" }, "description": "Range end (createdAt <= to), clamped by `at`" }, { "in": "query", "name": "page", "schema": { "type": "integer", "default": 1 } }, { "in": "query", "name": "limit", "schema": { "type": "integer", "default": 50, "maximum": 50 } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Paginated topic leaderboard history", "content": { "application/json": { "schema": { "type": "object", "required": [ "status", "data", "pagination" ], "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/TopicIndexSnapshot" } }, "pagination": { "$ref": "#/components/schemas/Pagination" } } } } } }, "400": { "description": "Invalid parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required, or requested history is outside the credential window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch topic history", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get Topic Rankings `GET /v2/topics` Returns the top 25 crypto narratives drawing the most attention on X, ranked and refreshed hourly. This is the REST equivalent of the MCP `get_trending_topics` tool. No authentication is required. ## Authentication None. This endpoint is public. ## Parameters ```json [ { "in": "query", "name": "ranking", "required": false, "schema": { "type": "string", "enum": [ "trend" ], "default": "trend" }, "description": "Trending sustained-attention board." } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Current topic rankings", "content": { "application/json": { "schema": { "type": "object", "required": [ "status", "data" ], "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "data": { "type": "object", "required": [ "completedAt", "latestEvidenceAt", "windowStartedAt", "topics" ], "properties": { "completedAt": { "type": [ "string", "null" ], "format": "date-time" }, "latestEvidenceAt": { "type": [ "string", "null" ], "format": "date-time", "description": "Newest source tweet timestamp represented by the stored leaderboard" }, "windowStartedAt": { "type": [ "string", "null" ], "format": "date-time" }, "topics": { "type": "array", "maxItems": 25, "items": { "type": "object", "required": [ "id", "rank", "name", "summary", "score", "tweetCount", "authorCount", "lastSeenAt", "clusters", "frontierReport" ], "properties": { "id": { "type": "string" }, "rank": { "type": "integer" }, "name": { "type": "string" }, "summary": { "type": "string" }, "score": { "type": "number" }, "tweetCount": { "type": "integer", "description": "Qualifying tweets in the latest 24 hours" }, "authorCount": { "type": "integer", "description": "Distinct qualifying authors in the latest 24 hours" }, "lastSeenAt": { "type": "string", "format": "date-time" }, "clusters": { "type": "array", "description": "Complete non-zero author-balanced cluster composition for the ranking window,\nsorted by descending share. Each author's mass is split across their labels;\nthe shares therefore sum approximately to the fraction of authors with at least one cluster label.\n", "items": { "type": "object", "required": [ "id", "name", "share" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "share": { "type": "number", "minimum": 0, "maximum": 1 } } } }, "frontierReport": { "type": [ "object", "null" ], "required": [ "url", "preview" ], "properties": { "url": { "type": "string", "format": "uri" }, "preview": { "type": "string" } } } } } } } } } } } } }, "500": { "description": "Failed to fetch topic rankings", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get a Frontier Report `GET /v2/topics/{id}/report` Returns the latest published full Frontier Report for a topic. The `id` is the topic id returned by `GET /v2/topics`. This endpoint requires an account-backed credential with Frontier Reports access. ## Authentication Required. Send an API key in the `x-api-key` header. Required account access: `topic-reports`. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string", "pattern": "^topic_[a-f0-9]{20}$" }, "description": "Topic id from the topic rankings response" } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Latest published Frontier Report", "content": { "application/json": { "schema": { "type": "object", "required": [ "status", "data" ], "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "data": { "type": "object", "required": [ "id", "url", "publishedAt", "title", "summary", "bodyMarkdown", "sources" ], "properties": { "id": { "type": "string" }, "url": { "type": "string", "format": "uri" }, "publishedAt": { "type": "string", "format": "date-time" }, "title": { "type": "string" }, "summary": { "type": "string" }, "bodyMarkdown": { "type": "string", "description": "GFM report body without internal source-id markers." }, "market": { "type": "object", "description": "Publication-time and latest market snapshots. This field is omitted when market data is unavailable.", "required": [ "publicationSnapshotAt", "updatedAt", "state", "entities" ], "properties": { "publicationSnapshotAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "state": { "type": "string", "enum": [ "fresh", "stale", "partial", "unavailable" ] }, "entities": { "type": "array", "items": { "type": "object", "required": [ "identity", "state", "metrics" ], "properties": { "identity": { "type": "object", "required": [ "projectId", "name" ], "properties": { "projectId": { "type": "string" }, "name": { "type": "string" }, "symbol": { "type": "string" }, "coingeckoId": { "type": "string" }, "defillamaSlug": { "type": "string" } } }, "state": { "type": "string", "enum": [ "fresh", "stale", "partial", "unavailable" ] }, "metrics": { "type": "array", "items": { "type": "object", "required": [ "key", "value", "publishedValue", "unit", "provider", "observedAt", "fetchedAt", "freshness" ], "properties": { "key": { "type": "string", "enum": [ "price_usd", "market_cap_usd", "volume_24h_usd", "change_24h_pct", "tvl_usd", "fees_24h_usd", "revenue_24h_usd" ] }, "value": { "type": [ "number", "null" ] }, "publishedValue": { "type": [ "number", "null" ] }, "unit": { "type": "string", "enum": [ "usd", "percent" ] }, "provider": { "type": "string", "enum": [ "coingecko", "defillama", "project_metrics" ] }, "observedAt": { "type": [ "string", "null" ], "format": "date-time" }, "fetchedAt": { "type": "string", "format": "date-time" }, "freshness": { "type": "string", "enum": [ "fresh", "stale", "unavailable" ] }, "disagreement": { "type": "object", "required": [ "comparedWith", "comparedValue", "differencePercent" ], "properties": { "comparedWith": { "type": "string", "enum": [ "coingecko", "defillama", "project_metrics" ] }, "comparedValue": { "type": "number" }, "differencePercent": { "type": "number" } } } } } } } } } } }, "sources": { "type": "array", "items": { "type": "object", "required": [ "id", "title", "url", "publishedAt" ], "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "url": { "type": "string", "format": "uri" }, "publishedAt": { "type": [ "string", "null" ], "format": "date-time" } } } } } } } } } } }, "400": { "description": "Invalid topic id", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "401": { "description": "Missing or invalid account-backed API key", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Current account plan lacks Frontier Reports access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "No published Frontier Report for this topic", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch the Frontier Report", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # List Projects `GET /v2/projects` Returns a paginated list of projects with signals, coingeckoData, one canonical trendScore, and one trend rank. **Filter Behavior:** - Multi-value filters (projectIds, names, xHandles, tickers) use OR logic within the same filter - Different filters use AND logic between them - Project category filters accept canonical taxonomy slugs or supported CoinGecko aliases and match any listed category - Market-cap filters require a known positive USD market cap; missing, null, or zero market cap is excluded - Example: `names=eth,btc&tickers=SOL` returns projects matching (name=eth OR name=btc) AND ticker=SOL ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "query", "name": "page", "schema": { "type": "integer", "default": 1 }, "description": "Page number (1-indexed)" }, { "in": "query", "name": "limit", "schema": { "type": "integer", "default": 50, "maximum": 50 }, "description": "Number of projects per page (max 50)" }, { "in": "query", "name": "projectIds", "schema": { "type": "string" }, "description": "Comma-separated list of project ObjectIds to filter by" }, { "in": "query", "name": "names", "schema": { "type": "string" }, "description": "Comma-separated list of project names to filter by (case-insensitive regex)" }, { "in": "query", "name": "xHandles", "schema": { "type": "string" }, "description": "Comma-separated list of X/Twitter handles to filter by" }, { "in": "query", "name": "tickers", "schema": { "type": "string" }, "description": "Comma-separated list of token tickers to filter by" }, { "in": "query", "name": "chain", "schema": { "type": "string" }, "description": "Filter by blockchain platform. See /projects/chains for values." }, { "in": "query", "name": "categories", "schema": { "type": "string" }, "description": "Comma-separated canonical project category slugs or supported CoinGecko aliases to filter by" }, { "in": "query", "name": "address", "schema": { "type": "string" }, "description": "Filter by contract address. EVM addresses are case-insensitive; non-EVM addresses (e.g., Solana) are case-sensitive.\nCan be combined with `chain` to filter by specific chain + address.\n", "examples": { "default": { "value": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599" } } }, { "in": "query", "name": "minTrendScore", "schema": { "type": "number" }, "description": "Minimum trend score threshold (0-100)" }, { "in": "query", "name": "minMarketCap", "schema": { "type": "number", "minimum": 0 }, "description": "Minimum USD market cap. Requires projects to have a known positive market cap." }, { "in": "query", "name": "maxMarketCap", "schema": { "type": "number", "minimum": 0 }, "description": "Maximum USD market cap. Requires projects to have a known positive market cap." }, { "in": "query", "name": "sortBy", "schema": { "type": "string", "enum": [ "trendScore", "createdAt", "reinforcedAt" ], "default": "trendScore" }, "description": "Field to sort results by (always descending)." }, { "in": "query", "name": "hasToken", "schema": { "type": "boolean" }, "description": "Filter by token presence. `true` returns only projects with contract addresses, `false` returns only projects without." }, { "in": "query", "name": "intelSortBy", "schema": { "type": "string", "enum": [ "reinforcedAt", "createdAt", "detectedAt" ], "default": "detectedAt" }, "description": "Sort embedded intel by original detection date (default) or supporting-evidence recency (`createdAt` and `detectedAt` are aliases)" }, { "in": "query", "name": "intelActivity", "schema": { "$ref": "#/components/schemas/ActivityMode" }, "description": "Controls activity data on embedded intel items.\n`all` (default) — full timeline; `observations` — observation entries only; `none` — omit activity array.\n" }, { "in": "query", "name": "createdAfter", "schema": { "type": "string", "format": "date-time" }, "description": "Filter projects created on or after this date (ISO 8601)" }, { "in": "query", "name": "createdBefore", "schema": { "type": "string", "format": "date-time" }, "description": "Filter projects created on or before this date (ISO 8601)" }, { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Historical timestamp (ISO 8601). Returns project data as it existed at this point in time.\nMust be in the past.\nWhen used, responses include a `provenance` field indicating data source.\n", "examples": { "default": { "value": "2026-03-25T12:00:00Z" } } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Paginated list of projects with signals", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "xHandle": { "type": "string" }, "trendScore": { "type": "number", "minimum": 0, "maximum": 100 }, "trendScoreDelta": { "type": "number", "description": "Change in trend score since the previous scoring refresh" }, "rank": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Leaderboard position (1-100). Omitted when the project is not in the current ranked roster." }, "rankBand": { "type": "string", "enum": [ "strong", "corroborated" ], "description": "Evidence eligibility band for the current rank. Omitted when the project is unranked." }, "coingeckoData": { "type": "object", "properties": { "apiId": { "type": "string" }, "symbol": { "type": "string" }, "slug": { "type": "string" }, "description": { "type": "string" }, "contractAddress": { "type": "string" }, "categories": { "type": "array", "items": { "type": "string" } }, "image": { "type": "object", "properties": { "thumb": { "type": "string", "format": "uri" }, "small": { "type": "string", "format": "uri" }, "large": { "type": "string", "format": "uri" } } } } }, "metrics": { "type": "object", "description": "Price and market data from CoinGecko (updated every minute)", "properties": { "usd": { "type": "number", "description": "Current price in USD" }, "usdMarketCap": { "type": "number", "description": "Market capitalization in USD" }, "usd24hVol": { "type": "number", "description": "24-hour trading volume in USD" }, "usd24hChange": { "type": "number", "description": "24-hour price change percentage" }, "lastUpdatedAt": { "type": "number", "description": "Unix timestamp in seconds of the last metrics update" }, "high24h": { "type": "number" }, "low24h": { "type": "number" }, "athUsd": { "type": "number" }, "athDate": { "type": "string", "format": "date-time" }, "athChangePct": { "type": "number" }, "priceChange7d": { "type": "number" }, "priceChange14d": { "type": "number" }, "priceChange30d": { "type": "number" } } }, "tokens": { "type": "array", "description": "Contract addresses by blockchain platform", "items": { "type": "object", "properties": { "chain": { "type": "string" }, "address": { "type": "string" }, "source": { "type": "string", "description": "Data source (coingecko, dexscreener, tweet, grok)" }, "primary": { "type": "boolean", "description": "Whether this is the project's current primary token" } } } }, "primaryComputedAt": { "type": "string", "format": "date-time", "description": "When the primary token selection was computed" }, "createdAt": { "type": "string", "format": "date-time", "description": "Project creation timestamp (ISO 8601)" }, "updatedAt": { "type": "string", "format": "date-time", "description": "Project last updated timestamp (ISO 8601)" }, "reinforcedAt": { "type": "string", "format": "date-time", "description": "Timestamp of last signal activity (created or reinforced) for this project" }, "provenance": { "type": "string", "enum": [ "historical", "constructed" ], "description": "Data source indicator (only present when `at` parameter is used).\n`historical` = reconstructed from a stored snapshot.\n`constructed` = assembled from available data (no exact snapshot found).\n" }, "momentumContext": { "$ref": "#/components/schemas/MomentumContext" }, "signals": { "type": "array", "description": "10 most recent intel items sorted by detection date by default", "items": { "type": "object", "properties": { "id": { "type": "string" }, "detectedAt": { "type": "string", "format": "date-time", "description": "Intel detection date" }, "reinforcedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "Date when this intel was last reinforced with independent supporting evidence; null for research-only intel" }, "description": { "type": "string" }, "headline": { "type": "string", "description": "Plain-language summary up to 10 words" }, "projectName": { "type": "string" }, "projectId": { "type": "string" }, "citations": { "type": "array", "description": "Vetted non-X citations supporting this intel", "items": { "type": "string" } }, "category": { "type": "string" }, "observationCount": { "type": "integer", "minimum": 0, "description": "Number of observation-type activity entries" }, "hasOfficialSource": { "type": "boolean", "description": "Whether any observation came from an official project source" }, "officialSourceUrl": { "type": "string", "format": "uri", "description": "Canonical official X provenance retained when the source observation is omitted from public activity" }, "sentiment": { "type": [ "number", "null" ], "minimum": -1, "maximum": 1, "description": "Aggregate sentiment averaged across activity entries" }, "referencesMetrics": { "type": [ "boolean", "null" ], "description": "Whether this intel description references market metrics. `null` when not classified." }, "clusters": { "type": "array", "items": { "$ref": "#/components/schemas/SignalCluster" } }, "activity": { "type": "array", "description": "Activity timeline. Present unless `intelActivity=none`.", "items": { "$ref": "#/components/schemas/SignalActivity" } } } } } } } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "totalCount": { "type": "integer" }, "hasMore": { "type": "boolean" } } } } } } } }, "400": { "description": "Invalid request parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required, or requested history is outside the credential window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "503": { "description": "Historical data service temporarily unavailable (only when `at` is used)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get Project `GET /v2/projects/{id}` Returns a project by ID, including the 10 most recent signals, full coingeckoData, and its canonical trend score. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" }, "description": "MongoDB ObjectId of the project" }, { "in": "query", "name": "intelSortBy", "schema": { "type": "string", "enum": [ "reinforcedAt", "createdAt", "detectedAt" ], "default": "detectedAt" }, "description": "Sort embedded intel by original detection date (default) or supporting-evidence recency (`createdAt` and `detectedAt` are aliases)" }, { "in": "query", "name": "intelActivity", "schema": { "$ref": "#/components/schemas/ActivityMode" }, "description": "Controls activity data on embedded intel items.\n`all` (default) — full timeline; `observations` — observation entries only; `none` — omit activity array.\n" }, { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Historical timestamp (ISO 8601). Returns project data as it existed at this point in time.\nMust be in the past.\nWhen used, responses include a `provenance` field indicating data source.\n", "examples": { "default": { "value": "2026-03-25T12:00:00Z" } } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Project details with signals", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" }, "data": { "type": "object", "properties": { "id": { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, "name": { "type": "string", "examples": [ "ethereum" ] }, "description": { "type": "string" }, "xHandle": { "type": "string", "examples": [ "ethereum" ] }, "trendScore": { "type": "number", "minimum": 0, "maximum": 100, "examples": [ 85 ] }, "trendScoreDelta": { "type": "number", "description": "Change in trend score since the previous scoring refresh" }, "rank": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Leaderboard position (1-100). Omitted when the project is not in the current ranked roster.", "examples": [ 7 ] }, "rankBand": { "type": "string", "enum": [ "strong", "corroborated" ], "description": "Evidence eligibility band for the current rank. Omitted when the project is unranked.", "examples": [ "strong" ] }, "coingeckoData": { "type": "object", "properties": { "apiId": { "type": "string", "examples": [ "ethereum" ] }, "symbol": { "type": "string", "examples": [ "eth" ] }, "slug": { "type": "string" }, "description": { "type": "string" }, "contractAddress": { "type": "string" }, "categories": { "type": "array", "items": { "type": "string" } }, "image": { "type": "object", "properties": { "thumb": { "type": "string", "format": "uri" }, "small": { "type": "string", "format": "uri" }, "large": { "type": "string", "format": "uri" } } } } }, "metrics": { "type": "object", "description": "Price and market data from CoinGecko (updated every minute)", "properties": { "usd": { "type": "number", "description": "Current price in USD" }, "usdMarketCap": { "type": "number", "description": "Market capitalization in USD" }, "usd24hVol": { "type": "number", "description": "24-hour trading volume in USD" }, "usd24hChange": { "type": "number", "description": "24-hour price change percentage" }, "lastUpdatedAt": { "type": "number", "description": "Unix timestamp in seconds of the last metrics update" }, "high24h": { "type": "number" }, "low24h": { "type": "number" }, "athUsd": { "type": "number" }, "athDate": { "type": "string", "format": "date-time" }, "athChangePct": { "type": "number" }, "priceChange7d": { "type": "number" }, "priceChange14d": { "type": "number" }, "priceChange30d": { "type": "number" } } }, "tokens": { "type": "array", "description": "Contract addresses by blockchain platform", "items": { "type": "object", "properties": { "chain": { "type": "string" }, "address": { "type": "string" }, "source": { "type": "string", "description": "Data source (coingecko, dexscreener, tweet, grok)" }, "primary": { "type": "boolean", "description": "Whether this is the project's current primary token" } } } }, "primaryComputedAt": { "type": "string", "format": "date-time", "description": "When the primary token selection was computed" }, "createdAt": { "type": "string", "format": "date-time", "description": "Project creation timestamp (ISO 8601)" }, "updatedAt": { "type": "string", "format": "date-time", "description": "Project last updated timestamp (ISO 8601)" }, "reinforcedAt": { "type": "string", "format": "date-time", "description": "Timestamp of last signal activity (created or reinforced) for this project" }, "provenance": { "type": "string", "enum": [ "historical", "constructed" ], "description": "Data source indicator (only present when `at` parameter is used).\n`historical` = reconstructed from a stored snapshot.\n`constructed` = assembled from available data (no exact snapshot found).\n" }, "momentumContext": { "$ref": "#/components/schemas/MomentumContext" }, "signals": { "type": "array", "description": "10 most recent intel items sorted by detection date by default", "items": { "type": "object", "properties": { "id": { "type": "string" }, "detectedAt": { "type": "string", "format": "date-time", "description": "Intel detection date" }, "reinforcedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "Date when this intel was last reinforced with independent supporting evidence; null for research-only intel" }, "description": { "type": "string" }, "headline": { "type": "string", "description": "Plain-language summary up to 10 words" }, "projectName": { "type": "string" }, "projectId": { "type": "string" }, "category": { "type": "string" }, "citations": { "type": "array", "description": "Vetted non-X citations supporting this intel", "items": { "type": "string" } }, "observationCount": { "type": "integer", "minimum": 0, "description": "Number of observation-type activity entries" }, "hasOfficialSource": { "type": "boolean", "description": "Whether any observation came from an official project source" }, "officialSourceUrl": { "type": "string", "format": "uri", "description": "Canonical official X provenance retained when the source observation is omitted from public activity" }, "sentiment": { "type": [ "number", "null" ], "minimum": -1, "maximum": 1, "description": "Aggregate sentiment averaged across activity entries" }, "referencesMetrics": { "type": [ "boolean", "null" ], "description": "Whether this intel description references market metrics. `null` when not classified." }, "clusters": { "type": "array", "items": { "$ref": "#/components/schemas/SignalCluster" } }, "activity": { "type": "array", "description": "Activity timeline. Present unless `intelActivity=none`.", "items": { "$ref": "#/components/schemas/SignalActivity" } } } } } } } } } } } }, "400": { "description": "Invalid project ID format", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required, or requested history is outside the credential window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Project not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "503": { "description": "Historical data service temporarily unavailable (only when `at` is used)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Project Neighbors (co-mentioned projects) `GET /v2/projects/{id}/neighbors` Projects co-mentioned with this one in the same intel posts within a recency window — neighbours in the source-sharing graph, ranked by how often they co-occur. Two projects are neighbours when the same originating post (`source.sourceId`) appears in the activity ledger of a signal for each. High-degree roundup posts are excluded. After canonical-id dedup, a candidate must share at least two source posts from at least two distinct authors; the seed itself is excluded. This is a co-occurrence signal (discussed alongside), not a structural relationship like shared team, ecosystem, or category. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" }, "description": "MongoDB ObjectId of the seed project" }, { "in": "query", "name": "since", "schema": { "type": "string", "default": "14d" }, "description": "Recency window. Relative forms like `14d`, `7d`, `48h`.\n", "examples": { "default": { "value": "14d" } } }, { "in": "query", "name": "limit", "schema": { "type": "integer", "default": 5, "minimum": 1, "maximum": 50 }, "description": "Number of neighbours to return (1-50)" } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Ranked list of neighbour projects", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" }, "data": { "type": "array", "items": { "type": "object", "properties": { "projectId": { "type": "string" }, "projectName": { "type": "string" }, "joiningSignals": { "type": "integer", "description": "Distinct candidate signals sharing >= 1 source with the seed" }, "joiningReinforcements": { "type": "integer", "description": "Row count of shared-source activity entries" } } } } } } } } }, "400": { "description": "Invalid project id or since parameter", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required, or requested history is outside the credential window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch project neighbors", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # List Intel `GET /v2/intel` Returns intel (formerly summaries) with filtering and pagination support. **Filter Behavior:** - Project filters (projectIds, names, xHandles, tickers) use AND logic between different filters - projectRanking filters intel to the current ranked project roster, up to 100 projects. Live queries use current project ranks; historical `at` queries use stored score snapshots at the requested timestamp. - Multiple values within a single filter use OR logic - Cluster filter returns intel containing ANY of the specified cluster IDs - Category filter returns intel matching ANY of the specified categories (OR logic) - Date filters (detectedAfter/detectedBefore) filter by original detection date - Date filters (reinforcedAfter/reinforcedBefore) filter by last reinforced date - All date filters can be used independently, together, or combined (AND logic) - Every non-empty search shape is accepted; responsive bounds and the exact executed scope are disclosed in pagination ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "query", "name": "projectIds", "schema": { "type": "string" }, "description": "Comma-separated list of project IDs to filter by" }, { "in": "query", "name": "names", "schema": { "type": "string" }, "description": "Comma-separated list of project names to filter by (case-insensitive regex match)" }, { "in": "query", "name": "xHandles", "schema": { "type": "string" }, "description": "Comma-separated list of X/Twitter handles to filter by" }, { "in": "query", "name": "tickers", "schema": { "type": "string" }, "description": "Comma-separated list of token tickers to filter by" }, { "in": "query", "name": "projectRanking", "schema": { "type": "string", "enum": [ "trend" ] }, "description": "Filter intel to the current ranked project roster, up to 100 projects." }, { "in": "query", "name": "address", "schema": { "type": "string" }, "description": "Filter by contract address. Finds projects matching the address, then returns their intel.\nEVM addresses are case-insensitive; non-EVM addresses (e.g., Solana) are case-sensitive.\n", "examples": { "default": { "value": "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599" } } }, { "in": "query", "name": "clusterIds", "schema": { "type": "string" }, "description": "Comma-separated list of community cluster IDs to filter by (OR logic)" }, { "in": "query", "name": "categories", "schema": { "type": "string" }, "description": "Comma-separated category names to filter by (OR logic).\nValid values: FINANCIAL_EVENT, TOKEN_ECONOMICS, TECH_EVENT, MARKET_ACTIVITY, ONCHAIN_METRICS, PARTNERSHIP, TEAM_UPDATE, REGULATORY, WHALE_ACTIVITY, RISK_ALERT, VISIBILITY_EVENT, OPINION_SPECULATION\n", "examples": { "default": { "value": "TECH_EVENT,PARTNERSHIP" } } }, { "in": "query", "name": "hasOfficialSource", "schema": { "type": "boolean" }, "description": "If true, only return intel from official project sources" }, { "in": "query", "name": "hasToken", "schema": { "type": "string", "enum": [ "true", "false" ] }, "description": "Filter intel by whether their associated project has at least one token.\nWhen 'true', only intel from projects with tokens is returned.\nWhen 'false', only intel from projects without tokens is returned.\n" }, { "in": "query", "name": "marketCap", "schema": { "type": "string", "enum": [ "low", "mid", "large" ] }, "description": "Filter intel by the current market cap of its project: low (under $80M),\nmid ($80M to $500M), or large ($500M and above). Projects without a\ncurrent market cap are excluded. Not supported with at.\n" }, { "in": "query", "name": "detectedAfter", "schema": { "type": "string", "format": "date-time" }, "description": "Filter intel originally detected after this date (ISO datetime)", "examples": { "default": { "value": "2025-01-01T00:00:00Z" } } }, { "in": "query", "name": "detectedBefore", "schema": { "type": "string", "format": "date-time" }, "description": "Filter intel originally detected before this date (ISO datetime)", "examples": { "default": { "value": "2025-01-31T23:59:59Z" } } }, { "in": "query", "name": "reinforcedAfter", "schema": { "type": "string", "format": "date-time" }, "description": "Filter intel reinforced after this date (ISO datetime)", "examples": { "default": { "value": "2025-01-01T00:00:00Z" } } }, { "in": "query", "name": "reinforcedBefore", "schema": { "type": "string", "format": "date-time" }, "description": "Filter intel reinforced before this date (ISO datetime)", "examples": { "default": { "value": "2025-01-31T23:59:59Z" } } }, { "in": "query", "name": "minClusters", "schema": { "type": "integer", "minimum": 1 }, "description": "Minimum number of community clusters represented on an intel item.\nCommunity clusters are overlapping account archetypes, so this is a coverage filter. Use source and reinforcement details for confirmation.\nWhen provided, only intel with at least this many clusters is returned.\nWhen omitted, no cluster count filter is applied.\n" }, { "in": "query", "name": "sentiment", "schema": { "type": "string" }, "description": "Comma-separated sentiment buckets to filter by (OR logic).\nAccepted values (case-insensitive): `positive`, `neutral`, `negative`.\n\nEach intel's `sentiment` field is a continuous value in [-1, 1]\n(the average of per-activity sentiments). Buckets are derived\nwith these thresholds:\n- **positive**: sentiment ≥ 0.25\n- **neutral**: -0.25 < sentiment < 0.25\n- **negative**: sentiment ≤ -0.25\n\nOmitting the param (or selecting all three buckets) applies no filter.\n", "examples": { "default": { "value": "positive,negative" } } }, { "in": "query", "name": "search", "schema": { "type": "string" }, "description": "Free-text Intel search. Every query shape is accepted; pagination metadata discloses responsive coverage bounds and the exact executed scope." }, { "in": "query", "name": "sortBy", "schema": { "type": "string", "enum": [ "reinforcedAt", "createdAt", "detectedAt" ], "default": "detectedAt" }, "description": "Sort intel by original detection date (default) or supporting-evidence recency" }, { "in": "query", "name": "page", "schema": { "type": "integer", "default": 1 }, "description": "Page number for pagination (1-indexed)" }, { "in": "query", "name": "limit", "schema": { "type": "integer", "default": 50, "maximum": 50 }, "description": "Number of results per page (max 50)" }, { "in": "query", "name": "activity", "schema": { "$ref": "#/components/schemas/ActivityMode" }, "description": "Controls activity data in the response.\n`all` (default) — full timeline; `observations` — observation entries only; `none` — omit activity array.\n" }, { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Historical timestamp (ISO 8601). Returns intel as it existed at this point in time.\nOnly available for authenticated requests. Must be in the past.\n\nWhen used:\n- Only intel detected at or before the timestamp is returned\n- `citations`, `observationCount`, `reinforcedAt`, `clusters`, `hasOfficialSource`, `description`, `headline`, and `sentiment` are derived from activity at or before the timestamp\n", "examples": { "default": { "value": "2026-03-25T12:00:00Z" } } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "List of intel with pagination metadata", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "detectedAt": { "type": "string", "format": "date-time", "description": "Date when this intel was first detected" }, "reinforcedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "Date when this intel was last reinforced with independent supporting evidence; null for research-only intel" }, "description": { "type": "string", "description": "Intel description" }, "citations": { "type": "array", "description": "Vetted non-X citations supporting this intel", "items": { "type": "string" } }, "projectName": { "type": "string" }, "projectId": { "type": "string" }, "category": { "type": "string" }, "observationCount": { "type": "integer", "minimum": 0, "description": "Number of observation-type activity entries on this intel" }, "hasOfficialSource": { "type": "boolean", "description": "Whether any observation on this intel came from an official project source" }, "officialSourceUrl": { "type": "string", "format": "uri", "description": "Canonical official X provenance retained when the source observation is omitted from public activity" }, "sentiment": { "type": [ "number", "null" ], "minimum": -1, "maximum": 1, "description": "Aggregate sentiment for this intel, averaged across all activity entries (each scored -1, 0, or 1).\nBucket thresholds for filtering: positive ≥ 0.25, neutral in (-0.25, 0.25), negative ≤ -0.25.\n`null` when no sentiment has been classified.\n" }, "referencesMetrics": { "type": [ "boolean", "null" ], "description": "Whether this intel description references market metrics. `null` when not classified." }, "metrics": { "type": [ "object", "null" ], "description": "Project market metrics attached when `referencesMetrics` is true and metrics are available.", "properties": { "usd": { "type": [ "number", "null" ] }, "usdMarketCap": { "type": [ "number", "null" ] }, "usd24hVol": { "type": [ "number", "null" ] }, "usd24hChange": { "type": [ "number", "null" ] }, "lastUpdatedAt": { "type": [ "number", "null" ] } } }, "clusters": { "type": "array", "items": { "$ref": "#/components/schemas/SignalCluster" } }, "activity": { "type": "array", "description": "Activity timeline. Present unless `activity=none`.", "items": { "$ref": "#/components/schemas/SignalActivity" } } } } }, "pagination": { "type": "object", "properties": { "page": { "type": "integer" }, "limit": { "type": "integer" }, "totalCount": { "type": "integer" }, "totalCountExact": { "type": "boolean", "description": "False when totalCount is a responsive lower bound rather than an exact count." }, "hasMore": { "type": "boolean" }, "searchCoverage": { "type": "string", "enum": [ "bounded_candidates", "bounded_recent", "bounded_candidates_recent" ] }, "searchQuery": { "type": "string" }, "executedSearch": { "type": "string" } } } } } } } }, "400": { "description": "Invalid request parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required, or requested history is outside the credential window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get Intel by ID `GET /v2/intel/{id}` Returns full intel detail including activity history and cluster composition. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" }, "description": "Intel (summary) ID" }, { "in": "query", "name": "activity", "schema": { "$ref": "#/components/schemas/ActivityMode" }, "description": "Controls whether the activity timeline is full, observation-only, or omitted." } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Intel detail with activity and cluster composition", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" }, "data": { "type": "object", "properties": { "id": { "type": "string" }, "detectedAt": { "type": "string", "format": "date-time" }, "reinforcedAt": { "type": [ "string", "null" ], "format": "date-time" }, "description": { "type": "string" }, "headline": { "type": "string", "description": "Plain-language summary up to 10 words" }, "citations": { "type": "array", "description": "Vetted non-X citations supporting this intel", "items": { "type": "string" } }, "projectName": { "type": "string" }, "projectId": { "type": "string" }, "projectImage": { "type": "string", "format": "uri" }, "category": { "type": "string" }, "observationCount": { "type": "integer", "minimum": 0, "description": "Number of observation-type activity entries on this intel" }, "hasOfficialSource": { "type": "boolean", "description": "Whether any observation on this intel came from an official project source" }, "officialSourceUrl": { "type": "string", "format": "uri", "description": "Canonical official X provenance retained when the source observation is omitted from public activity" }, "sentiment": { "type": [ "number", "null" ], "minimum": -1, "maximum": 1, "description": "Aggregate sentiment, averaged across all activity entries (each scored -1, 0, or 1).\nBucket thresholds: positive ≥ 0.25, neutral in (-0.25, 0.25), negative ≤ -0.25.\n`null` when no sentiment has been classified.\n" }, "referencesMetrics": { "type": [ "boolean", "null" ], "description": "Whether this intel description references market metrics. `null` when not classified." }, "metrics": { "type": [ "object", "null" ], "description": "Project market metrics attached when `referencesMetrics` is true and metrics are available.", "properties": { "usd": { "type": [ "number", "null" ] }, "usdMarketCap": { "type": [ "number", "null" ] }, "usd24hVol": { "type": [ "number", "null" ] }, "usd24hChange": { "type": [ "number", "null" ] }, "lastUpdatedAt": { "type": [ "number", "null" ] } } }, "clusters": { "type": "array", "items": { "$ref": "#/components/schemas/SignalCluster" } }, "activity": { "type": "array", "items": { "$ref": "#/components/schemas/SignalActivity" } }, "clusterComposition": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "percentage": { "type": "number" } } } } } } } } } } }, "400": { "description": "Invalid intel ID format", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Requested intel is outside the credential history window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Intel not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch intel", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # List Signals (deprecated alias of /v2/intel) `GET /v2/signals` **Deprecated compatibility alias.** Signals were renamed to Intel. This route responds with the exact `GET /v2/intel` contract — same parameters, response shape, and errors — and adds `Deprecation` and `Link: successor-version` headers. Migrate to `/v2/intel`. ## Authentication Required. Send an API key in the `x-api-key` header. ## Lifecycle Deprecated. Successor: `/v2/intel`. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "Identical to the GET /v2/intel response", "content": { "application/json": { "schema": { "type": "object", "description": "See GET /v2/intel" } } } }, "400": { "description": "Invalid query parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "401": { "description": "Invalid API key", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Missing API key or history window exceeded", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get Signal by ID (deprecated alias) `GET /v2/signals/{id}` **Deprecated compatibility alias.** Responds with the exact `GET /v2/intel/{id}` contract. Migrate to `/v2/intel/{id}`. ## Authentication Required. Send an API key in the `x-api-key` header. ## Lifecycle Deprecated. Successor: `/v2/intel`. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Identical to the GET /v2/intel/{id} response", "content": { "application/json": { "schema": { "type": "object", "description": "See GET /v2/intel/{id}" } } } }, "400": { "description": "Invalid intel ID", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "401": { "description": "Invalid API key", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Missing API key or history window exceeded", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Intel not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Momentum History `GET /v2/projects/{id}/momentum` Returns hourly momentum history with cluster attribution breakdown. A multi-cluster source appears once under each cluster. Includes score history for a project over a specified time period. Default period is the last 7 days. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" }, "description": "The project ID" }, { "in": "query", "name": "start", "schema": { "type": "string", "format": "date-time" }, "description": "Start timestamp (ISO 8601 format). Defaults to 7 days ago.", "examples": { "default": { "value": "2025-11-21T00:00:00.000Z" } } }, { "in": "query", "name": "end", "schema": { "type": "string", "format": "date-time" }, "description": "End timestamp (ISO 8601 format). Defaults to now.", "examples": { "default": { "value": "2025-11-28T00:00:00.000Z" } } }, { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Historical anchor timestamp (ISO 8601). Sets the end of the momentum time window.\nMust be in the past.\n\nWhen used:\n- If `end` is not provided, `at` sets the end of the window\n- If `end` is provided, `at` acts as a ceiling — `end` is capped to whichever is earlier\n- If `start` is not provided, it defaults to 7 days before `at`\n", "examples": { "default": { "value": "2026-03-25T12:00:00Z" } } }, { "in": "query", "name": "includeClusters", "schema": { "type": "string", "enum": [ "true", "false" ], "default": "true" }, "description": "Whether to include per-hour cluster attribution breakdown. Set to \"false\" to return only momentum scores (faster, smaller response)." } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Momentum and score history data", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" }, "data": { "type": "object", "properties": { "projectId": { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, "projectName": { "type": "string", "examples": [ "ethereum" ] }, "data": { "type": "array", "items": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "date-time", "examples": [ "2025-11-30T12:00:00.000Z" ] }, "trendScore": { "type": "number", "minimum": 0, "maximum": 100, "examples": [ 43 ] }, "clusters": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "examples": [ "VC" ] }, "name": { "type": "string", "examples": [ "VC" ] }, "count": { "type": "integer", "examples": [ 3 ] } } } } } } } } } } } } } }, "400": { "description": "Invalid project ID format or invalid date parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required, or requested history is outside the credential window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Project not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch project momentum", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Rank History `GET /v2/projects/{id}/rank` Returns rank position history with scores over a time window. Only includes timestamps where the project was in the ranked roster, which contains up to 100 projects. Default period is the last 7 days. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" }, "description": "The project ID" }, { "in": "query", "name": "start", "schema": { "type": "string", "format": "date-time" }, "description": "Start timestamp (ISO 8601 format). Defaults to 7 days ago." }, { "in": "query", "name": "end", "schema": { "type": "string", "format": "date-time" }, "description": "End timestamp (ISO 8601 format). Defaults to now." }, { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Historical anchor timestamp (ISO 8601). Sets the end of the rank time window.\nMust be in the past.\n" } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Rank position history with scores", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" }, "data": { "type": "object", "properties": { "projectId": { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, "projectName": { "type": "string", "examples": [ "ethereum" ] }, "data": { "type": "array", "items": { "type": "object", "properties": { "timestamp": { "type": "string", "format": "date-time", "examples": [ "2026-03-30T12:00:00.000Z" ] }, "rank": { "type": "integer", "minimum": 1, "maximum": 100, "examples": [ 3 ] }, "trendScore": { "type": "number", "description": "Trend score at this timestamp", "examples": [ 85 ] } } } } } } } } } } }, "400": { "description": "Invalid project ID format or invalid date parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required, or requested history is outside the credential window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Project not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch project rank", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "503": { "description": "Rank data temporarily unavailable (TimescaleDB connectivity issue)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Price Candles (OHLCV) `GET /v2/projects/{id}/candles` Returns OHLCV candlestick data from TimescaleDB metric history. Each candle is an array: `[timestamp_ms, open, high, low, close, volume24h]`. `volume24h` is the rolling 24-hour volume at candle close, not per-interval volume. **Interval defaults and caps:** | Interval | Default range | Max range | |----------|--------------|-----------| | `5m` | 24 hours | 48 hours | | `1h` | 7 days | 14 days | | `1d` | 30 days | 90 days | If the requested range exceeds the max, `start` is clamped forward (most recent candles are returned). ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" }, "description": "MongoDB ObjectId of the project" }, { "in": "query", "name": "interval", "required": true, "schema": { "type": "string", "enum": [ "5m", "1h", "1d" ] }, "description": "Candle interval" }, { "in": "query", "name": "start", "schema": { "type": "string", "format": "date-time" }, "description": "Start timestamp (ISO 8601). Defaults to interval-dependent lookback from end." }, { "in": "query", "name": "end", "schema": { "type": "string", "format": "date-time" }, "description": "End timestamp (ISO 8601). Defaults to now." }, { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Historical anchor timestamp (ISO 8601). Caps `end` and shifts the default lookback.\nMust be in the past.\n\nWhen used:\n- If `end` is not provided, `at` sets the end of the window\n- If `end` is provided, `at` acts as a ceiling — `end` is capped to whichever is earlier\n- If `start` is not provided, it defaults to the interval's default lookback before `at`\n", "examples": { "default": { "value": "2026-03-25T12:00:00Z" } } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "OHLCV candle data", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/UpgradeMeta" }, "data": { "type": "object", "properties": { "projectId": { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, "projectName": { "type": "string", "examples": [ "Bitcoin" ] }, "interval": { "type": "string", "examples": [ "1h" ] }, "candles": { "type": "array", "description": "Array of candle arrays. Each inner array: [timestamp_ms, open, high, low, close, volume24h].\nTimestamps are Unix milliseconds. volume24h is rolling 24h volume at candle close.\n", "items": { "type": "array", "minItems": 6, "maxItems": 6, "items": { "type": [ "number", "null" ] }, "examples": [ [ 1709395200000, 0.0523, 0.0531, 0.0519, 0.0527, 1234567 ] ] } } } } } } } } }, "400": { "description": "Invalid parameters (bad interval, project ID format, or date format)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required. Provide an API key to access this endpoint.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Project not found, or price candles are not available for an NFT collection", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch candle data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "503": { "description": "Price data temporarily unavailable (TimescaleDB connectivity issue)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Project Metrics Snapshot `GET /v2/projects/{id}/metrics` Point-in-time snapshot of project market metrics (price, volume, 24h change, derived fields like price-change-7d/14d/30d and ATH change percentage). Without `at`, returns the live metrics subdocument from the project record (sourced from CoinGecko by the metrics sync). With `at`, reads from Timescale `metric_log` (latest row ≤ `at` within a 2-hour lookback) and recomputes derived fields from `at - 7d / 14d / 30d` lookups. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "path", "name": "id", "required": true, "schema": { "type": "string" }, "description": "MongoDB ObjectId of the project" }, { "in": "query", "name": "at", "schema": { "type": "string", "format": "date-time" }, "description": "Historical timestamp (ISO 8601). Returns project metrics as they existed\nat this point in time. Must be in the past.\n", "examples": { "default": { "value": "2026-03-25T12:00:00Z" } } } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Project metrics snapshot", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "meta": { "$ref": "#/components/schemas/UpgradeMeta" }, "data": { "type": "object", "properties": { "projectId": { "type": "string", "examples": [ "507f1f77bcf86cd799439011" ] }, "projectName": { "type": "string", "examples": [ "ethereum" ] }, "metrics": { "type": "object", "properties": { "usd": { "type": "number" }, "usdMarketCap": { "type": "number" }, "usd24hVol": { "type": "number" }, "usd24hChange": { "type": "number" }, "lastUpdatedAt": { "type": "number", "description": "Unix timestamp (seconds)" }, "high24h": { "type": "number" }, "low24h": { "type": "number" }, "athUsd": { "type": "number" }, "athDate": { "type": "string", "format": "date-time" }, "athChangePct": { "type": "number" }, "priceChange7d": { "type": "number" }, "priceChange14d": { "type": "number" }, "priceChange30d": { "type": "number" } } } } } } } } } }, "400": { "description": "Invalid project ID format or invalid `at` parameter", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Authentication required. Provide an API key to access this endpoint.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Project not found, token metrics are not available for an NFT collection, or no metrics are available at the requested timestamp", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch project metrics", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "503": { "description": "Historical queries temporarily unavailable (TimescaleDB connectivity issue)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # List Clusters `GET /v2/clusters` Returns crypto community clusters by default. Pass `universe=tradfi` to list TradFi account labels. Use crypto cluster IDs with the `clusterIds` parameter on the /v2/intel endpoint to filter signals by source. ## Authentication None. This endpoint is public. ## Parameters ```json [ { "in": "query", "name": "universe", "required": false, "schema": { "type": "string", "enum": [ "crypto", "tradfi" ] }, "description": "Cluster universe to list. Defaults to crypto." } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "List of clusters", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "universe": { "type": "string", "enum": [ "crypto", "tradfi" ] } } } } } } } } }, "400": { "description": "Invalid universe", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # List Intel Categories `GET /v2/intel-categories` Returns all active intel categories with id, name, and description. Use category names with the `categories` parameter on the /intel endpoint to filter intel by category. ## Authentication None. This endpoint is public. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "List of intel categories", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" } } } } } } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # List Blockchain Platforms `GET /v2/projects/chains` Returns supported blockchain platform identifiers for project filtering. ## Authentication None. This endpoint is public. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "Supported blockchain platforms", "content": { "application/json": { "schema": { "type": "object", "required": [ "status", "data" ], "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "data": { "type": "array", "items": { "type": "string" } } } } } } }, "500": { "description": "Failed to fetch blockchain platforms", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # List available recipes `GET /v2/recipes` Returns a list of all curated AIXBT recipes available in the registry. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters None. ## Request body None. ## Responses ```json { "200": { "description": "List of recipe summaries", "content": { "application/json": { "schema": { "type": "object", "required": [ "status", "data" ], "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/RecipeSummary" } } } } } } }, "500": { "description": "Failed to list recipes", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Get recipe by name `GET /v2/recipes/{name}` Returns the full YAML definition for a specific recipe. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters ```json [ { "in": "path", "name": "name", "required": true, "schema": { "type": "string" }, "description": "Recipe name" } ] ``` ## Request body None. ## Responses ```json { "200": { "description": "Recipe details with YAML definition", "content": { "application/json": { "schema": { "type": "object", "required": [ "status", "data" ], "properties": { "status": { "type": "integer", "examples": [ 200 ] }, "data": { "$ref": "#/components/schemas/RecipeDetail" } } } } } }, "404": { "description": "Recipe not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Failed to fetch recipe", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Execute a recipe `POST /v2/recipes/execute` Executes a recipe either from raw YAML or by registry name. AIXBT steps execute server-side via direct service calls. Provider steps return auto-fallback results with metadata for client-side enrichment. Exactly one of `yaml` or `recipeName` must be provided. The credential owner must have API access. MCP is not required. When execution yields at an agent step, the response includes carry-forward data and instructions for the agent. Resume by calling this endpoint again with `resumeFromStep`, `resumeInput`, and `carryForward` from the previous response. ## Authentication Required. Send an API key in the `x-api-key` header. Required account access: `api`. ## Parameters None. ## Request body ```json { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "yaml": { "type": "string", "description": "Raw YAML recipe definition" }, "recipeName": { "type": "string", "description": "Registry recipe name" }, "params": { "type": "object", "additionalProperties": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] }, "description": "Recipe parameters" }, "resumeFromStep": { "type": "string", "description": "Step ID to resume from" }, "resumeInput": { "type": "object", "description": "Agent output from the yielded step" }, "carryForward": { "type": "object", "description": "Pre-yield step data from previous response" } } } } } } ``` ## Responses ```json { "200": { "description": "Recipe execution result (awaiting_agent or complete)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RecipeExecutionResult" } } } }, "400": { "description": "Validation error or invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "401": { "description": "Missing or invalid API key", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "403": { "description": "Current account plan lacks access, or a recipe step requests history outside the account's entitlement window.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Registry recipe not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "500": { "description": "Internal execution error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "502": { "description": "Recipe step execution failed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "503": { "description": "Required service is unavailable", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # Validate a recipe `POST /v2/recipes/validate` Validates a raw YAML recipe definition without executing it. Returns structural validation issues and basic recipe metadata when valid. ## Authentication Required. Send an API key in the `x-api-key` header. ## Parameters None. ## Request body ```json { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "yaml": { "type": "string", "description": "Raw YAML recipe definition to validate (mutually exclusive with name)" }, "recipeName": { "type": "string", "description": "Registry recipe name to validate (mutually exclusive with yaml)" } } } } } } ``` ## Responses ```json { "200": { "description": "Validation result", "content": { "application/json": { "schema": { "type": "object", "properties": { "valid": { "type": "boolean" }, "issues": { "type": "array", "items": { "type": "object", "properties": { "path": { "type": "string" }, "message": { "type": "string" } } } }, "recipe": { "type": "object", "description": "Present when valid", "properties": { "name": { "type": "string" }, "version": { "type": "string" }, "description": { "type": "string" }, "stepCount": { "type": "integer" }, "paramCount": { "type": "integer" } } } } } } } }, "400": { "description": "Missing or invalid input (yaml/recipeName)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "404": { "description": "Recipe not found (when using recipeName)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "429": { "description": "Rate limit exceeded", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } } } ``` Schema references resolve against the [canonical OpenAPI specification](https://api.aixbt.tech/v2/openapi.yaml). # MCP AIXBT exposes one Streamable HTTP MCP server at `https://api.aixbt.tech/mcp`. Only the Topic tools, `list_topics` and `get_topic`, work without credentials; calling a protected tool returns an OAuth 2.1 challenge so an interactive client can ask the user to sign in. ## Connect [#connect] For app-specific setup, see [ChatGPT](/chatgpt), [Claude](/claude), [Grok Bot](/grok-bot), or [Hermes Agent](/hermes). In other interactive clients, add the server URL above with no headers. For non-interactive use, create an API key in [Developer access](https://aixbt.tech/profile#developer-access), then keep it in your client's secret or environment-variable store: ```json { "mcpServers": { "aixbt": { "type": "streamable-http", "url": "https://api.aixbt.tech/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } } } } ``` ## Add the research skill [#add-the-research-skill] The connector exposes AIXBT data and tools. Add the [research skill](/developers/skill) for the research workflow when your client supports skills. ## Discover tools [#discover-tools] Your client discovers the current tools and input/output schemas through the MCP handshake and `tools/list`, without signing in. Treat that response, not a copied tool inventory, as the contract. The tools expose the same resources and access rules as [API v3](/developers/v3). Use the discovered schemas for current filters and response shapes. # Research skill The AIXBT research skill is a concise workflow for finding and synthesizing AIXBT data. Use it in an agent connected through the [MCP connector](/developers/mcp) or [API v3](/developers/v3). The [ChatGPT plugin](/chatgpt) packages the skill with the connector. Download SKILL.md ## Install [#install] 1. Give the agent access to AIXBT through MCP or API v3. 2. Download the skill above and add it through your client's skill-import flow. 3. If the client expects a directory, save it as `research-crypto-market/SKILL.md`. # Webhooks A webhook destination receives new alerts and report notifications as `alert.v4` JSON: * `intelligence.material` when material intel matches an alert's filters. * `rank.entered` when a project or topic enters your selected ranking. * `report.published` when a subscribed new topic report is published. Its compact `event.report` contains the id and account-authorized URL for the full report. Current scored `alert.v4` events carry `event.ranking` (`trend`) and the ranking-neutral `event.measurement`. New payloads do not use `event.trend`. Destinations pinned to `alert.v3` keep `event.trend` during the compatibility window; retrying or replaying a delivery does not change its schema version. ## Set up [#set-up] 1. Open [Alerts](https://aixbt.tech/alerts) and add a webhook with a public HTTPS endpoint. 2. Registration sends a `destination.test` request. Return the `challenge` value from its JSON body as the plain-text response body. To try the flow before your receiver exists, register `https://docs.aixbt.tech/api/webhook-echo` first. 3. Store the signing secret when it appears. It is shown once. 4. Select the webhook on the alerts or reports you want delivered. ## Verify every request [#verify-every-request] Read the `AIXBT-Webhook-Timestamp` and `AIXBT-Webhook-Signature` headers and check them against the exact raw request body with your stored secret. Do not parse and re-serialize the body before verifying: ```ts import { createHmac, timingSafeEqual } from 'node:crypto' export function verifyAixbtWebhook( rawBody: Buffer, timestamp: string, // AIXBT-Webhook-Timestamp header signature: string, // AIXBT-Webhook-Signature header secret: string, // shown once in Alerts ): boolean { const sentAt = Number(timestamp) if (!Number.isSafeInteger(sentAt) || sentAt < 1) return false if (Math.abs(Date.now() / 1000 - sentAt) > 300) return false const expected = createHmac('sha256', secret) .update(`${timestamp}.`) .update(rawBody) .digest('hex') return signature.split(',').some(part => { const digest = part.trim().split('=')[1] ?? '' return ( /^[a-f0-9]{64}$/.test(digest) && timingSafeEqual(Buffer.from(digest, 'hex'), Buffer.from(expected, 'hex')) ) }) } ``` The signature header carries one entry, or two separated by a comma for 24 hours after you rotate the secret, so your stored secret keeps verifying straight through a rotation. The `AIXBT-Webhook-Event`, `AIXBT-Webhook-Event-ID`, and `AIXBT-Webhook-Delivery-ID` headers tell you what arrived without parsing the body. ## Respond [#respond] Return `2xx` after accepting a delivery. `408`, `429`, and `5xx` responses are retried, honoring a bounded `Retry-After`; other `4xx` responses are not. A `410` disables the destination, and repeated `401` or `404` responses pause it until a test succeeds. ## Process deliveries [#process-deliveries] Delivery is at-least-once and can arrive late or out of order. Deduplicate by the `delivery.id` body field; an intentional replay repeats it with a higher `delivery.replayCount`. Acknowledge an unknown event type with `2xx`. --- ## Resources --- # Get Support Email [support@aixbt.tech](mailto:support@aixbt.tech). --- # OpenAPI component schemas — API v3 Shared schemas referenced by the endpoint contracts above. ```json { "Error": { "type": "object", "required": [ "code", "message" ], "properties": { "code": { "type": "string", "enum": [ "invalid_request", "credential_required", "invalid_credential", "entitlement_required", "history_window_exceeded", "not_found", "not_current", "rate_limited", "internal_error", "service_unavailable" ] }, "message": { "type": "string" }, "details": { "type": "object", "additionalProperties": true, "description": "Optional structured context (field errors, subject locators, limits)." } } }, "Meta": { "type": "object", "description": "Response metadata. Empty when nothing applies.", "properties": { "history": { "$ref": "#/components/schemas/HistoryMeta" }, "versions": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Named component versions that shaped this response." } } }, "CollectionMeta": { "allOf": [ { "$ref": "#/components/schemas/Meta" }, { "type": "object", "required": [ "nextCursor" ], "properties": { "nextCursor": { "oneOf": [ { "type": "string" }, { "type": "null" } ], "description": "Cursor for the next page; `null` on the last page." } } } ] }, "IntelCollectionMeta": { "allOf": [ { "$ref": "#/components/schemas/CollectionMeta" }, { "type": "object", "properties": { "searchCoverage": { "type": "string", "enum": [ "bounded_candidates", "bounded_recent", "bounded_candidates_recent" ], "description": "Responsive search bounds that may have omitted matching Intel." }, "searchQuery": { "type": "string", "description": "Normalized search requested by the caller." }, "executedSearch": { "type": "string", "description": "Exact normalized term scope executed by bounded search." } } } ] }, "HistoryMeta": { "type": "object", "description": "The history window applied to this response. Both fields are null when the account has no history limit.", "required": [ "lookbackDays", "earliestAvailableAt" ], "properties": { "lookbackDays": { "oneOf": [ { "type": "integer" }, { "type": "null" } ] }, "earliestAvailableAt": { "oneOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] } } }, "ProjectRef": { "type": "object", "required": [ "id", "slug", "name" ], "properties": { "id": { "type": "string" }, "slug": { "type": "string", "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$", "maxLength": 64 }, "name": { "type": "string" } } }, "TopicRef": { "type": "object", "required": [ "id", "name" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "ClusterRef": { "type": "object", "required": [ "id", "name" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "ReportRef": { "type": "object", "required": [ "id", "title", "publishedAt", "revisedAt" ], "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "publishedAt": { "type": "string", "format": "date-time" }, "revisedAt": { "oneOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] } } }, "IntelRef": { "type": "object", "required": [ "id", "grade", "detectedAt" ], "properties": { "id": { "type": "string" }, "headline": { "type": "string" }, "grade": { "$ref": "#/components/schemas/Grade" }, "detectedAt": { "type": "string", "format": "date-time" } } }, "Grade": { "type": "string", "enum": [ "chipped", "flawed", "cut", "polished", "flawless" ], "description": "Evidence grade of an Intel item, lowest to highest. Grades describe\nthe shape of the evidence, never the truth of the claim.\n" }, "Sentiment": { "type": "object", "required": [ "value" ], "properties": { "value": { "type": "string", "enum": [ "positive", "neutral", "negative" ] } } }, "Identifiers": { "type": "object", "description": "Stable external join keys for composing AIXBT data with sources the\nconsumer licenses directly. Keys are additive per universe (tradfi\nadds e.g. exchange listing identifiers); values are identifiers\nonly; v3 never attaches the external source's data to them.\n", "properties": { "coingecko": { "type": "string", "description": "CoinGecko API id of the primary asset." }, "x": { "type": "string", "description": "X handle without the at sign." } } }, "Asset": { "type": "object", "required": [ "type", "primary" ], "description": "Canonical instrument identity owned by the Asset registry. Identity\nonly; v3 never attaches third-party market values to an asset.\nUniverse-specific fields are additive per type (crypto types carry\n`chain` and `address`).\n", "properties": { "type": { "type": "string", "enum": [ "token", "stablecoin", "nft-collection" ] }, "chain": { "type": "string" }, "address": { "type": "string" }, "symbol": { "type": "string" }, "primary": { "type": "boolean", "description": "The Project's primary instrument." } } }, "Project": { "type": "object", "required": [ "id", "slug", "name", "universe", "trend", "categories", "assets", "createdAt", "updatedAt" ], "properties": { "id": { "type": "string" }, "slug": { "type": "string" }, "name": { "type": "string" }, "universe": { "type": "string", "enum": [ "crypto", "tradfi" ], "description": "Entity universe; shares the Cluster enum. Ranks are universe-scoped." }, "symbol": { "type": "string" }, "description": { "type": "string" }, "identifiers": { "$ref": "#/components/schemas/Identifiers" }, "image": { "type": "string", "format": "uri" }, "trend": { "type": "number", "description": "Canonical trend measurement from the shared trend model.\nComparable only within the same `meta.versions.trendModel`.\n" }, "trendDelta": { "type": "object", "required": [ "value", "window" ], "description": "Series-derived change over the stated window (PT24H), computed\nfrom the hourly trend history. Emitted on Project detail; absent\nwhen history is too shallow to state one.\n", "properties": { "value": { "type": "number" }, "window": { "type": "string", "enum": [ "PT24H" ] } } }, "rank": { "type": "integer", "description": "Committed leaderboard rank within the Project's universe; absent while unranked." }, "categories": { "type": "array", "items": { "type": "string" }, "description": "Canonical taxonomy slugs." }, "assets": { "type": "array", "items": { "$ref": "#/components/schemas/Asset" } }, "intel": { "type": "array", "items": { "$ref": "#/components/schemas/IntelRef" }, "description": "Bounded preview of current Intel, newest first." }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "reinforcedAt": { "type": "string", "format": "date-time" } } }, "ProjectDetail": { "allOf": [ { "$ref": "#/components/schemas/Project" }, { "type": "object", "properties": { "relatedProjects": { "type": "array", "items": { "$ref": "#/components/schemas/RelatedProject" } } } } ] }, "RelatedProject": { "type": "object", "required": [ "project", "kind", "sharedIntel", "window", "asOf" ], "properties": { "project": { "$ref": "#/components/schemas/ProjectRef" }, "kind": { "type": "string", "enum": [ "co_mention" ], "description": "Observational relation kind; never partnership or endorsement." }, "sharedIntel": { "type": "integer", "description": "Distinct co-mentioning Intel items in the window." }, "window": { "type": "string", "description": "ISO 8601 duration of the observation window." }, "asOf": { "type": "string", "format": "date-time" } } }, "SeriesPoint": { "type": "object", "required": [ "at", "value" ], "properties": { "at": { "type": "string", "format": "date-time" }, "value": { "oneOf": [ { "type": "number" }, { "type": "null" } ], "description": "`null` marks a boundary where the subject was unranked or unmeasured." }, "clusters": { "type": "array", "items": { "type": "object", "required": [ "id", "count" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "count": { "type": "integer" } } } } } }, "SeriesMeta": { "allOf": [ { "$ref": "#/components/schemas/Meta" }, { "type": "object", "required": [ "measure", "basis", "window" ], "properties": { "measure": { "type": "string", "enum": [ "trend", "rank" ] }, "basis": { "type": "string", "enum": [ "hourly", "rank_transitions" ], "description": "How points are spaced: latest real measurement per one-hour bucket, or rank change points." }, "window": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "type": "string", "format": "date-time" }, "to": { "type": "string", "format": "date-time" } } } } } ] }, "TopicListItem": { "type": "object", "required": [ "id", "rank", "name", "summary", "postCount", "authorCount", "lastSeenAt" ], "properties": { "id": { "type": "string" }, "rank": { "type": "integer" }, "name": { "type": "string" }, "summary": { "type": "string" }, "trend": { "type": "number" }, "postCount": { "type": "integer" }, "authorCount": { "type": "integer" }, "lastSeenAt": { "type": "string", "format": "date-time" }, "clusters": { "type": "array", "items": { "type": "object", "required": [ "cluster", "share" ], "properties": { "cluster": { "$ref": "#/components/schemas/ClusterRef" }, "share": { "type": "number", "minimum": 0, "maximum": 1 } } } }, "report": { "oneOf": [ { "$ref": "#/components/schemas/ReportRef" }, { "type": "null" } ] }, "association": { "$ref": "#/components/schemas/TopicAssociationFacts" } } }, "TopicDetail": { "allOf": [ { "$ref": "#/components/schemas/TopicListItem" }, { "type": "object", "properties": { "stance": { "$ref": "#/components/schemas/StanceSeries" } } } ] }, "StanceSeries": { "type": "object", "required": [ "buckets" ], "description": "Bucketed stance of the Topic conversation itself, independent from\nProject-targeted sentiment. Versions travel in `meta.versions`.\n", "properties": { "buckets": { "type": "array", "items": { "type": "object", "required": [ "from", "to", "dominant", "shares" ], "properties": { "from": { "type": "string", "format": "date-time" }, "to": { "type": "string", "format": "date-time" }, "dominant": { "$ref": "#/components/schemas/Stance" }, "shares": { "type": "object", "additionalProperties": { "type": "number" }, "description": "Share per stance value, summing to 1." } } } } } }, "Stance": { "type": "string", "enum": [ "supportive", "skeptical", "neutral", "mixed", "unknown" ] }, "TopicSnapshotMeta": { "allOf": [ { "$ref": "#/components/schemas/Meta" }, { "type": "object", "required": [ "snapshot" ], "properties": { "snapshot": { "type": "object", "required": [ "completedAt", "windowStartedAt" ], "properties": { "completedAt": { "type": "string", "format": "date-time" }, "latestEvidenceAt": { "type": "string", "format": "date-time" }, "windowStartedAt": { "type": "string", "format": "date-time" } } } } } ] }, "TopicAssociationFacts": { "type": "object", "required": [ "observedPosts", "distinctAuthors", "shareOfTopicPosts", "firstObservedAt", "lastObservedAt" ], "properties": { "observedPosts": { "type": "integer" }, "distinctAuthors": { "type": "integer" }, "shareOfTopicPosts": { "type": "number", "minimum": 0, "maximum": 1 }, "firstObservedAt": { "type": "string", "format": "date-time" }, "lastObservedAt": { "type": "string", "format": "date-time" }, "sentiment": { "type": "object", "properties": { "populated": { "type": "integer" }, "coverage": { "type": "number", "minimum": 0, "maximum": 1 } } } } }, "TopicProjectAssociation": { "allOf": [ { "type": "object", "required": [ "project" ], "properties": { "project": { "$ref": "#/components/schemas/ProjectRef" } } }, { "$ref": "#/components/schemas/TopicAssociationFacts" } ] }, "AssociationMeta": { "allOf": [ { "$ref": "#/components/schemas/CollectionMeta" }, { "type": "object", "required": [ "window" ], "properties": { "window": { "type": "object", "required": [ "from", "to" ], "properties": { "from": { "type": "string", "format": "date-time" }, "to": { "type": "string", "format": "date-time" } } } } } ] }, "Intel": { "type": "object", "required": [ "id", "description", "grade", "project", "category", "observationCount", "hasOfficialSource", "citations", "detectedAt", "reinforcedAt" ], "properties": { "id": { "type": "string" }, "headline": { "type": "string" }, "description": { "type": "string" }, "grade": { "$ref": "#/components/schemas/Grade" }, "project": { "$ref": "#/components/schemas/ProjectRef" }, "category": { "type": "string", "description": "Intel event category (a vocabulary distinct from Project taxonomy)." }, "clusters": { "type": "array", "items": { "$ref": "#/components/schemas/ClusterRef" } }, "observationCount": { "type": "integer" }, "hasOfficialSource": { "type": "boolean" }, "officialSourceUrl": { "type": "string", "format": "uri", "description": "Canonical official X provenance for the intel, including research-only observations omitted from activity." }, "citations": { "type": "array", "items": { "type": "string", "format": "uri" }, "description": "Vetted non-X citations supporting this intel." }, "sentiment": { "$ref": "#/components/schemas/Sentiment" }, "detectedAt": { "type": "string", "format": "date-time" }, "reinforcedAt": { "type": "string", "format": "date-time", "nullable": true, "description": "Null until the first attention-contributing source activates the gem." }, "activity": { "type": "array", "items": { "$ref": "#/components/schemas/IntelActivity" } }, "searchMatches": { "type": "array", "description": "Present only on an active `search`: why this item matched,\nderived from stored data.\n", "items": { "type": "object", "required": [ "kind", "term" ], "properties": { "kind": { "type": "string", "enum": [ "contract_address", "canonical_chain", "current_official_x_handle", "project_identity", "asset_profile", "current_official_x_profile", "project_profile", "intel_text" ] }, "term": { "type": "string" }, "excerpt": { "type": "string", "description": "Short public text containing the match, when it is not already visible." } } } } } }, "IntelActivity": { "type": "object", "required": [ "action", "detectedAt", "occurredAt" ], "description": "One entry in the intel evidence trail. Detection time records when the\nsource was observed; event time records when the source claims the\nevent happened.\n", "properties": { "action": { "type": "string", "enum": [ "observation", "official_statement", "correction", "merge" ] }, "detectedAt": { "type": "string", "format": "date-time", "description": "Source observation timestamp." }, "occurredAt": { "type": "string", "format": "date-time", "deprecated": true, "x-successor": "#/components/schemas/IntelActivity/properties/detectedAt", "description": "Deprecated legacy timestamp: provider publication when known, otherwise detectedAt. Use eventTime for claimed event time." }, "eventTime": { "$ref": "#/components/schemas/IntelEventTime" }, "headline": { "type": "string" }, "source": { "type": "object", "required": [ "url", "official" ], "properties": { "url": { "type": "string", "format": "uri" }, "official": { "type": "boolean" } } }, "sentiment": { "$ref": "#/components/schemas/Sentiment" }, "clusters": { "type": "array", "items": { "$ref": "#/components/schemas/ClusterRef" } } } }, "IntelEventTime": { "description": "Claimed event time, sanitized from internal source evidence.", "oneOf": [ { "type": "object", "additionalProperties": false, "required": [ "status", "at", "precision", "relationToSource" ], "properties": { "status": { "type": "string", "const": "instant" }, "at": { "type": "string", "format": "date-time" }, "precision": { "type": "string", "enum": [ "instant", "day", "week", "month" ] }, "relationToSource": { "type": "string", "enum": [ "current", "historical", "future" ] } } }, { "type": "object", "additionalProperties": false, "required": [ "status", "startAt", "endAt", "precision", "relationToSource" ], "properties": { "status": { "type": "string", "const": "interval" }, "startAt": { "type": "string", "format": "date-time" }, "endAt": { "type": "string", "format": "date-time", "description": "Exclusive boundary after the final supported period." }, "precision": { "type": "string", "enum": [ "day", "week", "month" ] }, "relationToSource": { "type": "string", "enum": [ "current", "historical", "future" ] } } }, { "type": "object", "additionalProperties": false, "required": [ "status", "relationToSource" ], "properties": { "status": { "type": "string", "const": "relative_unresolved" }, "relationToSource": { "type": "string", "enum": [ "before_post", "after_post", "around_post" ] } } }, { "type": "object", "additionalProperties": false, "required": [ "status", "reason" ], "properties": { "status": { "type": "string", "const": "unknown" }, "reason": { "type": "string", "enum": [ "not_stated", "ambiguous", "ongoing" ] } } } ] }, "IntelDetail": { "allOf": [ { "$ref": "#/components/schemas/Intel" }, { "type": "object", "properties": { "clusterComposition": { "type": "array", "description": "Top clusters by share, with an `Other` bucket.", "items": { "type": "object", "required": [ "cluster", "percentage" ], "properties": { "cluster": { "$ref": "#/components/schemas/ClusterRef" }, "percentage": { "type": "number", "minimum": 0, "maximum": 100 } } } } } } ] }, "ReportSubject": { "type": "object", "required": [ "type" ], "properties": { "type": { "type": "string", "enum": [ "project", "topic" ] }, "project": { "$ref": "#/components/schemas/ProjectRef" }, "topic": { "$ref": "#/components/schemas/TopicRef" } } }, "ReportListItem": { "type": "object", "required": [ "id", "title", "publishedAt", "primarySubject", "preview" ], "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "publishedAt": { "type": "string", "format": "date-time" }, "revisedAt": { "oneOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "primarySubject": { "$ref": "#/components/schemas/ReportSubject" }, "relatedSubjects": { "type": "array", "items": { "$ref": "#/components/schemas/ReportSubject" }, "description": "Ordered, deduplicated Project bindings frozen from the Report's evidence membership and resolved to current Project identity; never inferred from prose, live Topic associations, or market evidence." }, "preview": { "type": "string" } } }, "Report": { "allOf": [ { "$ref": "#/components/schemas/ReportListItem" }, { "type": "object", "required": [ "summary", "body", "sources" ], "properties": { "summary": { "type": "string" }, "body": { "type": "string", "description": "Markdown body of the published artifact without internal source-id markers." }, "sources": { "type": "array", "items": { "type": "object", "required": [ "title", "url" ], "properties": { "title": { "type": "string" }, "url": { "type": "string", "format": "uri" }, "publishedAt": { "type": "string", "format": "date-time" } } } }, "evidence": { "type": "object", "description": "Publication-time evidence quoted by the artifact, with source\nattribution and observation timestamps. Immutable once\npublished.\n", "properties": { "snapshotAt": { "type": "string", "format": "date-time" }, "entities": { "type": "array", "items": { "type": "object", "required": [ "project", "observations" ], "properties": { "project": { "$ref": "#/components/schemas/ProjectRef" }, "observations": { "type": "array", "items": { "type": "object", "required": [ "key", "value", "unit", "provider", "observedAt", "freshness" ], "properties": { "key": { "type": "string" }, "value": { "type": "number" }, "unit": { "type": "string" }, "provider": { "type": "string" }, "observedAt": { "description": "Source-side observation timestamp. Null when\nthe provider publishes the figure without\none.\n", "oneOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "freshness": { "type": "string" }, "disagreement": { "type": "number" } } } } } } } } } } } ] }, "AlertTrigger": { "type": "string", "enum": [ "intelligence.material", "rank.entered" ], "description": "The set of launch triggers." }, "AlertCadence": { "type": "string", "enum": [ "instant", "hourly", "every_12h", "daily" ], "description": "Chat delivery cadence. First event in a window delivers immediately;\nthe window bundles the rest. `instant` is subject to a per-day\nplatform safety ceiling. Webhooks ignore cadence and receive every\nadmitted event.\n" }, "AlertQualifiers": { "type": "object", "description": "Filter qualifiers; each list holds at most 20 values.\n`grades`, `sentiments`, `clusterIds`, `maxRank`, and\n`hasOfficialSource` qualify `intelligence.material` subscriptions;\n`chains` qualifies `rank.entered`; `categories` and `assetTypes`\nqualify both.\n", "properties": { "categories": { "type": "array", "items": { "type": "string" } }, "grades": { "type": "array", "items": { "$ref": "#/components/schemas/Grade" } }, "sentiments": { "type": "array", "items": { "type": "string" } }, "assetTypes": { "type": "array", "items": { "type": "string" } }, "clusterIds": { "type": "array", "items": { "type": "string" } }, "chains": { "type": "array", "items": { "type": "string" } }, "maxRank": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Only intel on Projects at or above this rank in the Trend cohort." }, "hasOfficialSource": { "type": "boolean" } } }, "AlertSelector": { "type": "object", "additionalProperties": false, "description": "What the subscription watches: the owner's followed Projects, the\ncurrently ranked cohort, a normalized keyword, or a qualifier-only cohort.\nExplicit per-Project and per-Topic id lists are not yet supported\nand will join additively.\n", "properties": { "followedProjects": { "type": "boolean", "description": "Only the owner's followed Projects. Mutually exclusive with the ranked Project scopes." }, "trendingProjects": { "type": "boolean", "description": "Only Projects in the current Trend ranking. Mutually exclusive with `followedProjects`." }, "keyword": { "type": "string", "minLength": 2, "maxLength": 64, "description": "Normalized once at save time; matched case-insensitively against source-derived text." }, "qualifiers": { "$ref": "#/components/schemas/AlertQualifiers" } } }, "Alert": { "type": "object", "required": [ "id", "status", "trigger", "selector", "cadence", "destinationIds", "createdAt", "updatedAt" ], "properties": { "id": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "paused" ] }, "trigger": { "$ref": "#/components/schemas/AlertTrigger" }, "rankThreshold": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Top-N boundary; present only with `rank.entered`." }, "ranking": { "type": "string", "enum": [ "trend" ], "default": "trend", "description": "Ranking watched by `rank.entered`; omitted stored rows mean Trend." }, "selector": { "$ref": "#/components/schemas/AlertSelector" }, "cadence": { "$ref": "#/components/schemas/AlertCadence" }, "destinationIds": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "AlertCreate": { "type": "object", "required": [ "trigger", "selector", "destinationIds" ], "properties": { "trigger": { "$ref": "#/components/schemas/AlertTrigger" }, "rankThreshold": { "type": "integer", "minimum": 1, "maximum": 100, "description": "Required when `trigger` is `rank.entered`." }, "ranking": { "type": "string", "enum": [ "trend" ], "default": "trend", "description": "Ranking watched by `rank.entered`." }, "selector": { "$ref": "#/components/schemas/AlertSelector" }, "cadence": { "allOf": [ { "$ref": "#/components/schemas/AlertCadence" } ], "default": "hourly" }, "destinationIds": { "type": "array", "items": { "type": "string" }, "minItems": 1 } } }, "AlertUpdate": { "type": "object", "description": "Partial update; omitted fields are unchanged.", "properties": { "status": { "type": "string", "enum": [ "active", "paused" ] }, "rankThreshold": { "type": "integer", "minimum": 1, "maximum": 100 }, "ranking": { "type": "string", "enum": [ "trend" ] }, "selector": { "$ref": "#/components/schemas/AlertSelector" }, "cadence": { "$ref": "#/components/schemas/AlertCadence" }, "destinationIds": { "type": "array", "items": { "type": "string" }, "minItems": 1 } } }, "AlertDestination": { "type": "object", "required": [ "id", "kind", "label", "status" ], "properties": { "id": { "type": "string" }, "kind": { "type": "string", "enum": [ "telegram", "discord", "webhook" ] }, "label": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "active", "failing", "disabled" ] } } }, "Cluster": { "type": "object", "required": [ "id", "name", "description" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "universe": { "type": "string", "enum": [ "crypto", "tradfi" ] } } }, "Vocabulary": { "type": "object", "required": [ "grades", "sentiments", "stances", "assetTypes", "marketCapBands", "projectSort", "intelSort", "activityModes", "projectRankings", "universes", "seriesMeasures", "alertTriggers", "alertCadences", "projectCategories", "intelCategories", "chains" ], "properties": { "grades": { "type": "array", "items": { "$ref": "#/components/schemas/Grade" } }, "sentiments": { "type": "array", "items": { "type": "string" } }, "stances": { "type": "array", "items": { "$ref": "#/components/schemas/Stance" } }, "assetTypes": { "type": "array", "items": { "type": "string" } }, "marketCapBands": { "type": "array", "items": { "type": "string" } }, "projectSort": { "type": "array", "items": { "type": "string" } }, "intelSort": { "type": "array", "items": { "type": "string" } }, "activityModes": { "type": "array", "items": { "type": "string" } }, "projectRankings": { "type": "array", "items": { "type": "string" } }, "universes": { "type": "array", "items": { "type": "string" } }, "seriesMeasures": { "type": "array", "items": { "type": "string" } }, "alertTriggers": { "type": "array", "items": { "$ref": "#/components/schemas/AlertTrigger" } }, "alertCadences": { "type": "array", "items": { "$ref": "#/components/schemas/AlertCadence" } }, "projectCategories": { "type": "array", "items": { "type": "object", "required": [ "slug", "name" ], "properties": { "slug": { "type": "string" }, "name": { "type": "string" } } } }, "intelCategories": { "type": "array", "items": { "type": "object", "required": [ "slug", "name" ], "properties": { "slug": { "type": "string" }, "name": { "type": "string" } } } }, "chains": { "type": "array", "items": { "type": "string" } } } }, "Me": { "type": "object", "required": [ "account", "rateLimit", "history" ], "properties": { "account": { "type": "object", "required": [ "id", "plan", "wallet" ], "properties": { "id": { "type": "string" }, "plan": { "description": "The account's plan. Null for x402 keys, which pay per request.", "oneOf": [ { "type": "object", "required": [ "name", "via", "status", "periodStart", "renewsAt", "endsAt" ], "properties": { "name": { "type": "string" }, "via": { "type": "string", "enum": [ "subscription", "holding", "grant" ], "description": "A paid subscription, holding 600k+ AIXBT, or a manual grant." }, "status": { "type": "string", "enum": [ "active", "trialing", "past_due" ] }, "periodStart": { "description": "Start of the current billing period.", "oneOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "renewsAt": { "description": "When the plan renews. Null when it will not renew.", "oneOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "endsAt": { "description": "When access ends if the plan does not renew.", "oneOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] } } }, { "type": "null" } ] }, "wallet": { "description": "The account's wallet, identified by its last four characters only.", "oneOf": [ { "type": "object", "required": [ "chain", "last4" ], "properties": { "chain": { "type": "string", "enum": [ "eip155", "solana" ] }, "last4": { "type": "string", "minLength": 4, "maxLength": 4 } } }, { "type": "null" } ] } } }, "rateLimit": { "type": "object", "required": [ "perMinute", "perDay" ], "properties": { "perMinute": { "type": "integer" }, "perDay": { "type": "integer" } } }, "history": { "type": "object", "required": [ "lookbackDays" ], "properties": { "lookbackDays": { "description": "Days of history available. Null means no limit.", "oneOf": [ { "type": "integer" }, { "type": "null" } ] } } } } } } ``` --- # OpenAPI component schemas — API v2 (deprecated) Shared schemas referenced by the endpoint contracts above. ```json { "ApiError": { "type": "object", "required": [ "error" ], "description": "Error response. Middleware may include additional rate-limit or access metadata.", "properties": { "error": { "type": "string" }, "message": { "type": "string" }, "code": { "type": "string" }, "status": { "type": "integer" }, "data": { "nullable": true }, "meta": { "type": "object", "additionalProperties": true }, "details": { "type": "object", "additionalProperties": true }, "pagination": { "$ref": "#/components/schemas/Pagination" }, "limitType": { "type": "string", "enum": [ "minute", "day" ], "description": "Rate-limit window that was exhausted." }, "retryAfterMs": { "type": "integer", "minimum": 0, "description": "Milliseconds until the exhausted window resets." }, "limits": { "type": "object", "required": [ "minute", "day" ], "properties": { "minute": { "$ref": "#/components/schemas/RateLimitWindow" }, "day": { "$ref": "#/components/schemas/RateLimitWindow" } } }, "issues": { "type": "array", "items": { "type": "object", "required": [ "path", "message" ], "properties": { "path": { "type": "string" }, "message": { "type": "string" } } } } }, "additionalProperties": true }, "RateLimitWindow": { "type": "object", "required": [ "limit", "remaining", "resetAt" ], "properties": { "limit": { "type": "integer", "minimum": 0 }, "remaining": { "type": "integer", "minimum": 0 }, "resetAt": { "type": "string", "format": "date-time" } } }, "Pagination": { "type": "object", "required": [ "page", "limit", "totalCount", "hasMore" ], "properties": { "page": { "type": "integer", "minimum": 1 }, "limit": { "type": "integer", "minimum": 1 }, "totalCount": { "type": "integer", "minimum": 0 }, "hasMore": { "type": "boolean" } } }, "HistoryAccessMeta": { "type": "object", "required": [ "lookbackDays", "earliestAvailableAt" ], "properties": { "lookbackDays": { "type": [ "integer", "null" ], "examples": [ 90 ] }, "earliestAvailableAt": { "type": [ "string", "null" ], "format": "date-time" } } }, "HistoryResponseMeta": { "type": "object", "required": [ "history" ], "properties": { "history": { "$ref": "#/components/schemas/HistoryAccessMeta" } } }, "TopicIndexTopic": { "type": "object", "required": [ "id", "rank", "name", "summary", "score", "tweetCount", "authorCount", "lastSeenAt" ], "properties": { "id": { "type": "string" }, "rank": { "type": "integer", "minimum": 1 }, "name": { "type": "string" }, "summary": { "type": "string" }, "score": { "type": "number" }, "tweetCount": { "type": "integer", "minimum": 0 }, "authorCount": { "type": "integer", "minimum": 0 }, "lastSeenAt": { "type": "string", "format": "date-time" } } }, "TopicIndexSnapshot": { "type": "object", "required": [ "completedAt", "latestEvidenceAt", "windowStartedAt", "topics" ], "properties": { "completedAt": { "type": "string", "format": "date-time" }, "latestEvidenceAt": { "type": [ "string", "null" ], "format": "date-time" }, "windowStartedAt": { "type": "string", "format": "date-time" }, "topics": { "type": "array", "maxItems": 10, "items": { "$ref": "#/components/schemas/TopicIndexTopic" } } } }, "RecipeSummary": { "type": "object", "required": [ "name", "version", "description", "paramCount", "estimatedTokens" ], "properties": { "name": { "type": "string" }, "version": { "type": "string" }, "description": { "type": "string" }, "paramCount": { "type": "integer", "minimum": 0 }, "estimatedTokens": { "type": [ "integer", "null" ], "minimum": 0 } } }, "RecipeDetail": { "type": "object", "required": [ "name", "updatedAt", "yaml" ], "properties": { "name": { "type": "string" }, "updatedAt": { "type": "string", "format": "date-time" }, "yaml": { "type": "string" } } }, "RecipeExecutionResult": { "oneOf": [ { "type": "object", "required": [ "status", "recipe", "version", "step", "instructions", "returns", "data", "tokenCount", "progress", "remaining" ], "properties": { "status": { "type": "string", "enum": [ "awaiting_agent" ] }, "recipe": { "type": "string" }, "version": { "type": "string" }, "step": { "type": "string" }, "instructions": { "type": "string" }, "returns": { "type": "object", "additionalProperties": true }, "data": { "type": "object", "additionalProperties": true }, "tokenCount": { "type": "integer", "minimum": 0 }, "progress": { "type": "object", "required": [ "stepsCompleted", "stepsTotal", "segmentIndex", "segmentsTotal" ], "properties": { "stepsCompleted": { "type": "integer", "minimum": 0 }, "stepsTotal": { "type": "integer", "minimum": 0 }, "segmentIndex": { "type": "integer", "minimum": 0 }, "segmentsTotal": { "type": "integer", "minimum": 0 } } }, "remaining": { "type": "string" }, "parallel": { "type": "object", "required": [ "items", "itemKey", "concurrency", "perItemContext", "sharedContext" ], "properties": { "items": { "type": "array", "items": {} }, "itemKey": { "type": "string" }, "concurrency": { "type": "integer", "minimum": 1 }, "perItemContext": { "type": "array", "items": { "type": "string" } }, "sharedContext": { "type": "array", "items": { "type": "string" } } } }, "parallelExecution": { "type": "string" }, "contextHints": { "type": "array", "items": { "type": "string" } }, "carryForward": { "type": "object", "additionalProperties": true }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" } }, "additionalProperties": true }, { "type": "object", "required": [ "status", "recipe", "version", "timestamp", "data", "tokenCount" ], "properties": { "status": { "type": "string", "enum": [ "complete" ] }, "recipe": { "type": "string" }, "version": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" }, "data": { "type": "object", "additionalProperties": true }, "tokenCount": { "type": "integer", "minimum": 0 }, "hints": { "type": "object", "properties": { "combine": { "type": "array", "items": { "type": "string" } }, "key": { "type": "string" }, "include": { "type": "array", "items": { "type": "string" } } } }, "analysis": { "type": "object", "required": [ "instructions" ], "properties": { "instructions": { "type": "string" }, "output": { "type": "string" }, "context": { "type": "array", "items": { "type": "string" } } } }, "contextHints": { "type": "array", "items": { "type": "string" } }, "meta": { "$ref": "#/components/schemas/HistoryResponseMeta" } }, "additionalProperties": true } ] }, "UpgradeMeta": { "type": "object", "description": "Present on supported unauthenticated responses with an account access link.", "properties": { "upgrade": { "type": "object", "properties": { "description": { "type": "string" }, "url": { "type": "string", "format": "uri", "examples": [ "https://aixbt.tech/subscribe" ] } } } } }, "ActivityMode": { "type": "string", "enum": [ "all", "observations", "none" ], "default": "all", "description": "Controls what activity data is included in the response.\n- `all` — full activity timeline (default)\n- `observations` — only observation entries (ingestion rows)\n- `none` — omit the activity array entirely\n" }, "SignalCluster": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "SignalActivity": { "type": "object", "description": "Sanitized activity timeline entry for an intel item", "properties": { "id": { "type": "string", "description": "Stable activity row ID" }, "date": { "type": "string", "format": "date-time", "description": "Activity timestamp" }, "action": { "type": "string", "description": "Canonical action: INITIAL_DETECTION, REFINED, NEW_DETAIL, TENSE_UPDATE, NO_CHANGE, PARSE_ERROR" }, "source": { "type": "string", "description": "Platform source name (e.g. twitter, discord, telegram)" }, "actor": { "type": "object", "description": "Agent actor metadata (present on agent-originated rows)", "properties": { "type": { "type": "string" } } }, "officialSourceUrl": { "type": "string", "format": "uri", "description": "Canonical URL for the official source when available" }, "clusters": { "type": "array", "items": { "$ref": "#/components/schemas/SignalCluster" } }, "incoming": { "type": "string", "description": "Description extracted from new content" }, "result": { "type": "string", "description": "Description after merge" }, "headline": { "type": "string", "description": "Plain-language summary up to 10 words" }, "sentiment": { "type": [ "number", "null" ], "minimum": -1, "maximum": 1, "description": "Sentiment value for this activity entry" }, "citationEvidence": { "type": "array", "description": "Structured citation evidence (agent rows)", "items": { "type": "object", "properties": { "id": { "type": "string" }, "url": { "type": "string" }, "targetActivityIds": { "type": "array", "items": { "type": "string" } } } } }, "fromSignal": { "type": "object", "description": "Present for project-merge events", "properties": { "signalId": { "type": "string" }, "projectId": { "type": "string" }, "projectName": { "type": "string" } } }, "isOfficial": { "type": "boolean", "description": "Whether this activity came from an official project source" }, "changelog": { "type": "string", "description": "Terse noun-phrase describing what changed" } } }, "TopListContext": { "type": "object", "properties": { "enteredAt": { "type": [ "string", "null" ], "format": "date-time" }, "currentHours": { "type": [ "integer", "null" ] }, "wasYesterday": { "type": [ "boolean", "null" ] }, "entryCount24h": { "type": [ "integer", "null" ], "description": "Entries into this band in the last 24h (>1 = volatile)" }, "stabilityLabel": { "type": [ "string", "null" ], "enum": [ "flash", "fresh", "persistent", "durable" ], "description": "flash (<2h), fresh (2-6h), persistent (6-24h), durable (>=24h)" } } }, "MomentumContext": { "type": [ "object", "null" ], "description": "Momentum and leaderboard stability context. Present when project insights are available.", "properties": { "trendTrajectory": { "type": [ "string", "null" ], "enum": [ "rising", "decaying", "stable", "new" ], "description": "24h canonical trend-score direction" }, "distinctClusters": { "type": [ "integer", "null" ] }, "peakRank48h": { "type": [ "integer", "null" ] }, "bestRank14d": { "type": [ "integer", "null" ] }, "rankedSince": { "type": [ "string", "null" ], "format": "date-time" }, "leaderboard": { "type": "object", "properties": { "top10": { "$ref": "#/components/schemas/TopListContext" }, "top25": { "$ref": "#/components/schemas/TopListContext" } } } } }, "SignalResponse": { "type": "object", "required": [ "id", "detectedAt", "reinforcedAt", "description", "citations", "projectName", "projectId", "category", "observationCount", "hasOfficialSource", "clusters" ], "properties": { "id": { "type": "string" }, "detectedAt": { "type": "string", "format": "date-time", "description": "Date when this intel was first detected" }, "reinforcedAt": { "type": [ "string", "null" ], "format": "date-time", "description": "Date when this intel was last reinforced with independent supporting evidence; null for research-only intel" }, "description": { "type": "string" }, "headline": { "type": "string", "description": "Plain-language summary up to 10 words" }, "citations": { "type": "array", "description": "Vetted non-X citations supporting this intel", "items": { "type": "string" } }, "projectName": { "type": "string" }, "projectId": { "type": "string" }, "category": { "type": "string" }, "observationCount": { "type": "integer", "minimum": 0, "description": "Number of observation-type activity entries on this intel" }, "hasOfficialSource": { "type": "boolean", "description": "Whether any observation on this intel came from an official project source" }, "officialSourceUrl": { "type": "string", "format": "uri", "description": "Canonical official X provenance retained when the source observation is omitted from public activity" }, "sentiment": { "type": [ "number", "null" ], "minimum": -1, "maximum": 1, "description": "Aggregate sentiment, averaged across all activity entries.\nBucket thresholds: positive >= 0.25, neutral in (-0.25, 0.25), negative <= -0.25.\n`null` when no sentiment has been classified.\n" }, "referencesMetrics": { "type": [ "boolean", "null" ], "description": "Whether this intel description references market metrics. `null` when not classified." }, "metrics": { "type": [ "object", "null" ], "description": "Project market metrics attached when `referencesMetrics` is true and metrics are available.", "properties": { "usd": { "type": [ "number", "null" ] }, "usdMarketCap": { "type": [ "number", "null" ] }, "usd24hVol": { "type": [ "number", "null" ] }, "usd24hChange": { "type": [ "number", "null" ] }, "lastUpdatedAt": { "type": [ "number", "null" ] } } }, "clusters": { "type": "array", "items": { "$ref": "#/components/schemas/SignalCluster" } }, "activity": { "type": "array", "description": "Activity timeline. Present unless `activity=none`.", "items": { "$ref": "#/components/schemas/SignalActivity" } } } } } ```