AsoBeast Charts API

The charts API from AsoBeast — 5 operation(s) for charts.

Operations 6

GET /charts Read a top chart for one day #
GET /charts/genres List the chart categories of a store #
POST /charts/capture Capture a top chart today #
GET /charts/follows List the top charts this workspace follows #
POST /charts/follows Follow a top chart #
DELETE /charts/follows/{id} Stop following a top chart #

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/asobeast-com:asobeast-com-charts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

asobeast-com-charts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: asobeast Charts API
  description: 'Self hosted ASO toolkit API.


    A metered instance carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset on every response, for the tightest limit the request touched. A self hosted instance has no request rate limits and sends no such header. Limits are per workspace, so minting more tokens does not buy more capacity, and they are sized per plan across three classes: read for stored data, write for configuration changes and store for the endpoints that reach the App Store or Google Play.


    A 429 carries Retry-After and a rateLimit object naming the window that closed, or an aiAllowance object when the workspace has spent the AI calls its plan includes this month. A 403 with a quota object means a plan capacity limit such as apps or tracked keyword markets, which is a different problem from a rate limit. A 402 with an entitlement object means the workspace needs a plan.


    Positions are 1-based and null means checked but not found within the captured depth, never zero. Daily granularity uses UTC dates.'
  version: 1.15.0
  contact: {}
servers:
- url: http://localhost:3000/api/backend
  description: Web origin proxy
- url: http://localhost:4000
  description: Direct API
security:
- personalApiToken: []
tags:
- name: Charts
paths:
  /charts:
    get:
      description: 'One day of a free, paid or grossing chart of one store, country, category and device: every row with its position, its position on the comparison day and the movement between them, the climbers, fallers, new entries and exits, the days a capture exists for, whether this workspace follows the chart, and which rows are its own apps or competitors. Reads what the daily run or a capture stored; never reaches the store.'
      operationId: ChartsController_page
      parameters:
      - name: store
        required: true
        in: query
        schema:
          type: string
          enum:
          - APP_STORE
          - GOOGLE_PLAY
      - name: country
        required: true
        in: query
        schema:
          pattern: ^[a-z]{2}$
          example: us
          type: string
      - name: collection
        required: true
        in: query
        schema:
          type: string
          enum:
          - free
          - paid
          - grossing
      - name: genre
        required: true
        in: query
        description: A chart genre of the store, or overall
        schema:
          maxLength: 32
          example: '6014'
          type: string
      - name: device
        required: true
        in: query
        schema:
          type: string
          enum:
          - iphone
          - android
      - name: date
        required: false
        in: query
        description: The UTC day to read. Omitted reads the newest capture.
        schema:
          pattern: ^\d{4}-\d{2}-\d{2}$
          example: '2026-10-13'
          type: string
      - name: compare
        required: false
        in: query
        schema:
          default: 1d
          type: string
          enum:
          - 1d
          - 7d
          - 30d
      - name: dates
        required: false
        in: query
        description: How many captured days to list, newest first.
        schema:
          minimum: 1
          maximum: 365
          default: 90
          type: integer
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
      summary: Read a top chart for one day
      tags:
      - Charts
  /charts/genres:
    get:
      operationId: ChartsController_genres
      parameters:
      - name: store
        required: true
        in: query
        schema:
          type: string
          enum:
          - APP_STORE
          - GOOGLE_PLAY
      responses:
        '200':
          description: ''
      summary: List the chart categories of a store
      tags:
      - Charts
  /charts/capture:
    post:
      description: Fetches today's chart from the store while you wait and stores it for every workspace, then answers the page for today. A chart already captured today is answered without a store request. Reaches the store, so it answers within the store deadline and spends one chart capture of the daily allowance only when a request is made; a refused key spends nothing. A chart the store answers with no apps is stored as empty when it was empty before; a first empty answer is not stored and comes back with answeredNoApps, and the daily run stores it after retrying.
      operationId: ChartsController_capture
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChartCaptureDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: object
      summary: Capture a top chart today
      tags:
      - Charts
  /charts/follows:
    get:
      operationId: ChartsController_listFollows
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
      summary: List the top charts this workspace follows
      tags:
      - Charts
    post:
      description: Asks the daily run to capture this chart every day. The plan's follow limit counts categories, so the free, paid and grossing charts of one store, country, category and device cost one follow together. Answers 201 for a new follow and 200 with the existing one when the workspace already follows the chart. Writes nothing to the store; capture today separately.
      operationId: ChartsController_follow
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ChartFollowDto'
      responses:
        '200':
          description: The workspace already follows the chart; the existing follow
          content:
            application/json:
              schema:
                type: object
        '201':
          description: The chart is now followed; the new follow
          content:
            application/json:
              schema:
                type: object
      summary: Follow a top chart
      tags:
      - Charts
  /charts/follows/{id}:
    delete:
      operationId: ChartsController_forget
      parameters:
      - name: id
        required: true
        in: path
        schema:
          type: string
      responses:
        '204':
          description: ''
      summary: Stop following a top chart
      tags:
      - Charts
components:
  schemas:
    ChartCaptureDto:
      type: object
      properties:
        store:
          enum:
          - APP_STORE
          - GOOGLE_PLAY
          type: string
        country:
          type: string
          example: us
          pattern: ^[a-z]{2}$
        collection:
          enum:
          - free
          - paid
          - grossing
          type: string
        genre:
          type: string
          maxLength: 32
          example: '6014'
          description: A chart genre of the store, or overall
        device:
          enum:
          - iphone
          - android
          type: string
      required:
      - store
      - country
      - collection
      - genre
      - device
    ChartFollowDto:
      type: object
      properties:
        store:
          enum:
          - APP_STORE
          - GOOGLE_PLAY
          type: string
        country:
          type: string
          example: us
          pattern: ^[a-z]{2}$
        collection:
          enum:
          - free
          - paid
          - grossing
          type: string
        genre:
          type: string
          maxLength: 32
          example: '6014'
          description: A chart genre of the store, or overall
        device:
          enum:
          - iphone
          - android
          type: string
      required:
      - store
      - country
      - collection
      - genre
      - device
  securitySchemes:
    personalApiToken:
      scheme: bearer
      bearerFormat: asob
      type: http