tickerbot-io Devices API

Phone registrations backing the mobile_push webhook channel.

Operations 3

POST /v2/devices/register Record a phone/tablet push token; returns a stable device_id #
GET /v2/devices List registered devices, newest first #
DELETE /v2/devices/{device_id} Remove a device registration #

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/tickerbot-io:tickerbot-io-devices-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

tickerbot-io-devices-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Tickerbot Devices API
  version: 2.69.6
  summary: The stock market API designed for agents.
  description: 'Tickerbot is the stock market API designed for agents. We serve real-time and historical market data as one queryable table. You and your agents can ask it anything, without building anything custom. Every ticker is a row. Every data point is a column. 23,000+ tickers, covering US stocks and ETFs, FX, crypto, rates and metals. 452+ columns, covering raw data, calculations and conditions: price, volume, price action, technicals, fundamentals, events, profile, analyst ratings and news. Refreshed every minute, historized back to 2003. The table is the API: /v2/tickers/ returns one ticker''s whole row, /v2/signals/ returns every ticker that matches one column, /v2/scan returns every ticker that matches a SQL WHERE clause. Every read runs live or as of any date. The power is in the columns: every ticker gets the same columns, query any of them, in any combination. Ask any question: anything you want to know about the market is a query over the table. Build any trading tool: anything you want to build is a few queries in sequence. Get a free API key, or paste our setup prompt and your agent connects over MCP. Free plan: 10,000 calls a month, no card required.


    All responses carry a top-level `as_of` ISO timestamp indicating data vintage. List and history responses use opaque cursor pagination — treat `next_cursor` as a black-box token and pass it back via `?cursor=` on the next request.'
  contact:
    name: Tickerbot Support
    url: https://tickerbot.io/support
    email: support@tickerbot.io
  license:
    name: Proprietary
    url: https://tickerbot.io/terms
servers:
- url: https://api.tickerbot.io
  description: Production
security:
- apiBearer: []
tags:
- name: Devices
  description: Phone registrations backing the mobile_push webhook channel.
paths:
  /v2/devices/register:
    post:
      tags:
      - Devices
      summary: Record a phone/tablet push token; returns a stable device_id
      operationId: register_device
      description: 'Record a phone or tablet push token; returns a stable `device_id`.


        Notes:

        - For the `mobile_push` webhook delivery channel. The Tickerbot mobile app calls this automatically on sign-in and foreground — you only call it directly when wiring push delivery yourself.

        - Idempotent on the Expo push token: re-registering the same token returns the existing `device_id` rather than minting a new one, so an OS-side token refresh never breaks webhooks pointed at that device. An app reinstall mints a new token and therefore a new `device_id` — re-pick the device on your webhooks.'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                expo_push_token:
                  type: string
                  example: ExponentPushToken[xxxxxxxxxxxxxxxxxxxxxx]
                  description: Expo push token in `ExponentPushToken[...]` form.
                platform:
                  type: string
                  enum:
                  - ios
                  - android
                  description: Device platform.
                device_name:
                  type: string
                  example: David's iPhone
                  description: Display name for the device picker. Max 60 characters. Set at first registration only — re-registering the same token keeps the existing name (and platform), and there is no rename endpoint.
              required:
              - expo_push_token
              - platform
      responses:
        '201':
          description: 'The device record: `device_id`, `device_name`, `platform`, `created_at`, `last_seen`. Same shape and same 201 when the token was already registered — only `last_seen` refreshes.'
        '400':
          description: Missing/malformed `expo_push_token`, invalid `platform`, or `device_name` too long.
        '401':
          description: Missing or invalid API key.
        '402':
          description: No active plan on the account (rare — new signups land on the Free plan automatically).
        '429':
          description: Rate limit exceeded for your plan.
  /v2/devices:
    get:
      tags:
      - Devices
      summary: List registered devices, newest first
      operationId: list_devices
      description: 'Every device registered on the account, newest first.


        Notes:

        - Use the `device_id` values from this list as `channel_config.device_id` when subscribing a `mobile_push` webhook.'
      responses:
        '200':
          description: Success.
          content:
            application/json:
              schema:
                type: object
                properties:
                  as_of:
                    description: Server time this response was assembled (ISO 8601).
                  count:
                    description: Rows in this page.
                  next_cursor:
                    description: Always `null` — the device set is bounded and never pages.
                  devices:
                    description: Registered devices, newest `last_seen` first.
        '401':
          description: Missing or invalid API key.
        '402':
          description: No active plan on the account (rare — new signups land on the Free plan automatically).
        '429':
          description: Rate limit exceeded for your plan.
  /v2/devices/{device_id}:
    delete:
      tags:
      - Devices
      summary: Remove a device registration
      operationId: delete_device
      description: 'Unregister a device.


        Notes:

        - Webhooks still pointing at this `device_id` start failing on their next fire (`device not registered`) and flip to permanent failure; after 72 hours with no successful delivery the webhook auto-disables with `disabled_reason: "delivery_failure"`. Re-point or delete them first.'
      parameters:
      - name: device_id
        in: path
        required: true
        description: Device id from register/list.
        schema:
          type: string
          example: dev_aB3xY9kQpLmZ
      responses:
        '204':
          description: Unregistered.
        '400':
          description: Invalid device_id format.
        '401':
          description: Missing or invalid API key.
        '402':
          description: No active plan on the account (rare — new signups land on the Free plan automatically).
        '404':
          description: Device not found.
        '429':
          description: Rate limit exceeded for your plan.
components:
  securitySchemes:
    apiBearer:
      type: http
      scheme: bearer
      bearerFormat: API key (tb_live_… or tb_test_…)
      description: 'API keys are minted in the dashboard. Send as `Authorization: Bearer <key>`.'