AIXBT Alerts API

Owner-scoped alert subscriptions over the shipped alert system.

Operations 6

GET /v3/alerts List my alert subscriptions #
POST /v3/alerts Create an alert subscription #
GET /v3/alerts/{id} Get an alert subscription #
PATCH /v3/alerts/{id} Update an alert subscription #
DELETE /v3/alerts/{id} Delete an alert subscription #
GET /v3/alerts/destinations List my delivery destinations #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/aixbt-tech:aixbt-tech-alerts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

aixbt-tech-alerts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: AIXBT API v3 Alerts API
  version: 3.0.0-draft.1
  summary: Crypto intelligence API for Projects, Topics, Intel, Reports, and Clusters.
  description: 'The AIXBT API v3 contract. The implementation conforms to this document,

    the reference docs generate from it, and automated tests keep the served

    API and this document in sync. Interactive docs are served at `/v3/docs`;

    this document is served verbatim at `/v3/openapi.yaml`.


    ## Conventions


    - **Envelope**: every JSON success body is `{data, meta}`. There is no

    body-level `status` integer; the HTTP status code is the status.

    - **Errors**: every 4xx/5xx body is a single typed `Error` with a stable

    machine `code`. `401` means the credential is missing or invalid; `403`

    means the credential lacks an entitlement or crossed the history

    boundary.

    - **Pagination**: collections use opaque cursors: request `cursor` +

    `limit`, read `meta.nextCursor` (`null` on the last page). There are no

    page numbers and no total counts.

    - **Measurements**: v3 publishes AIXBT-owned measurements: `trend` for

    continued attention, `rank`, and attention counts,

    together with canonical identity. It does not redistribute third-party market

    data: no prices, market caps, volumes, or candles anywhere in this

    contract. Composition happens through `identifiers`: stable external

    join keys (CoinGecko id, X handle; additively extensible per universe)

    that let a consumer fetch market data under their own license. The one

    bounded exception is the publication-time evidence block inside an

    entitled Report, which quotes attributed observations as part of the

    research artifact. Intel lists accept a coarse `marketCap` band as a

    filter; the band selects results and is never returned as data.

    - **Access tiers**: Current Topic list, detail, and association routes are

    free and served under unauthenticated IP rate limits. Topic measurement

    history and everything else require an API key, and Report detail

    additionally requires the `topic-reports` entitlement. Alert management

    is owner-scoped to the calling credential; destination provisioning (chat

    connections) stays in product Settings and the API references

    destinations by id.

    - **Naming**: `trend` is the public attention measurement; `rank` is its

    position within the relevant Project or Topic cohort.

    Enumerated values are lowercase. Timestamps are ISO 8601 UTC and semantic

    (`detectedAt`, `reinforcedAt`, `observedAt`, never processing time).

    Intel activity keeps claimed `eventTime` separate from detection time;

    legacy `occurredAt` remains a deprecated provider-publication/detection

    fallback; it is never claimed event time.

    - **Locators**: Project path params accept the canonical id or the

    immutable public slug; responses always carry both. Merged or re-slugged

    Projects keep old locators resolving to the canonical resource.

    - **Universe**: every Project and Cluster belongs to the `crypto`

    universe.

    - **Assets**: a Project''s instrument identity is a typed `assets` array

    (`token`, `stablecoin`, `nft-collection` today). New asset types are

    added additively; the array shape never changes.

    - **History**: measurement series endpoints serve recorded history

    through their `from`/`to` windows, subject to the credential''s history

    window (`meta.history`).

    - **Subject misses**: a 404 body distinguishes `not_found` (never

    existed / bad locator) and `not_current` (exists, no longer current).

    - **Stability**: while `x-status` is `draft`, routes, fields, and values may

    change before stabilization. After stabilization, retiring routes first

    serve RFC 9745 `Deprecation` and RFC 8288

    `Link: rel="successor-version"` headers and are marked `deprecated: true`

    here with an `x-successor` pointer.

    - **Caching**: every response is `Cache-Control: private, no-store`.

    Rate limits are surfaced via `X-RateLimit-*` headers; breaches return

    `429` with `Retry-After`.'
  x-status: draft
servers:
- url: https://api.aixbt.tech
  description: Production
security:
- ApiKeyAuth: []
tags:
- name: Alerts
  description: Owner-scoped alert subscriptions over the shipped alert system.
paths:
  /v3/alerts:
    get:
      operationId: listAlerts
      tags:
      - Alerts
      summary: List my alert subscriptions
      description: '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.'
      x-collection: true
      parameters:
      - $ref: '#/components/parameters/Cursor'
      - $ref: '#/components/parameters/Limit'
      responses:
        '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'
    post:
      operationId: createAlert
      tags:
      - Alerts
      summary: Create an alert subscription
      description: '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. 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`.'
      requestBody:
        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:
        '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'
  /v3/alerts/{id}:
    get:
      operationId: getAlert
      tags:
      - Alerts
      summary: Get an alert subscription
      description: Owner-scoped read; another owner's id behaves as `not_found`.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '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'
    patch:
      operationId: updateAlert
      tags:
      - Alerts
      summary: Update an alert subscription
      description: 'Partial update: pause/resume, rename, change cadence, selector,

        threshold, or destinations. Semantics are identical to creation.'
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AlertUpdate'
            examples:
              pause:
                summary: Pause delivery
                value:
                  status: paused
      responses:
        '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'
    delete:
      operationId: deleteAlert
      tags:
      - Alerts
      summary: Delete an alert subscription
      description: Removes the subscription; delivery history retention is unaffected.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/SubjectMiss'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/Internal'
  /v3/alerts/destinations:
    get:
      operationId: listAlertDestinations
      tags:
      - Alerts
      summary: List my delivery destinations
      description: 'Read-only list of destinations connected in product Settings

        (Telegram and Discord). Connections and repair stay in Settings;

        subscriptions reference these ids.'
      responses:
        '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: discord
                      label: Research channel
                      status: active
                    meta: {}
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/Internal'
components:
  schemas:
    AlertQualifiers:
      type: object
      description: 'Filter qualifiers; each list holds at most 20 values.

        `grades`, `sentiments`, `clusterIds`, `maxRank`, and

        `hasOfficialSource` qualify `intelligence.material` subscriptions;

        `chains` qualifies `rank.entered`; `categories` and `assetTypes`

        qualify both.

        '
      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
    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'
    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).
    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.
    AlertTrigger:
      type: string
      enum:
      - intelligence.material
      - rank.entered
      description: The set of launch triggers.
    Grade:
      type: string
      enum:
      - chipped
      - flawed
      - cut
      - polished
      - flawless
      description: 'Evidence grade of an Intel item, lowest to highest. Grades describe

        the shape of the evidence, never the truth of the claim.

        '
    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.
    AlertCadence:
      type: string
      enum:
      - instant
      - hourly
      - every_12h
      - daily
      description: 'Chat delivery cadence. First event in a window delivers immediately;

        the window bundles the rest. `instant` is subject to a per-day

        platform safety ceiling.

        '
    AlertSelector:
      type: object
      additionalProperties: false
      description: 'What the subscription watches: the owner''s followed Projects, the

        currently ranked cohort, a normalized keyword, or a qualifier-only cohort.

        Explicit per-Project and per-Topic id lists are not yet supported

        and will join additively.

        '
      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'
    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
        label:
          type: string
        status:
          type: string
          enum:
          - pending
          - active
          - failing
          - disabled
    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
    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
  responses:
    Unauthorized:
      description: The credential is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            credentialRequired:
              value:
                code: credential_required
                message: Provide an API key via the x-api-key header.
            invalidCredential:
              value:
                code: invalid_credential
                message: The API key is expired or unknown.
    Forbidden:
      description: The credential lacks an entitlement or crossed the history boundary.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            entitlementRequired:
              value:
                code: entitlement_required
                message: This resource requires the topic-reports entitlement.
                details:
                  entitlement: topic-reports
            historyWindow:
              value:
                code: history_window_exceeded
                message: Requested instant is outside the 90-day history window.
                details:
                  earliestAvailableAt: '2026-05-07T00:00:00Z'
    SubjectMiss:
      description: The subject was not found or is not current.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            notFound:
              value:
                code: not_found
                message: No Project matches that locator.
                details:
                  subject:
                    type: project
                    locator: examplechain
            notCurrent:
              value:
                code: not_current
                message: The Topic exists but is no longer current.
                details:
                  subject:
                    type: topic
                    locator: topic_a1b2c3d4e5f601234567
    Internal:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            internal:
              value:
                code: internal_error
                message: Unexpected error.
    BadRequest:
      description: The request is invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            invalidRequest:
              value:
                code: invalid_request
                message: minTrend must be numeric
                details:
                  fields:
                  - minTrend
    RateLimited:
      description: Rate limit exceeded; retry after the indicated delay.
      headers:
        Retry-After:
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            rateLimited:
              value:
                code: rate_limited
                message: Minute limit reached.
                details:
                  limit: 100
                  window: minute
  parameters:
    Limit:
      name: limit
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 50
        default: 50
    Cursor:
      name: cursor
      in: query
      description: Opaque cursor from `meta.nextCursor`.
      schema:
        type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: 'API key. The `Authorization` header is accepted as an equivalent

        carrier. Responses echo the credential class in `X-API-Key-Type`.

        '