Chartlink Account API

The Account API from Chartlink — 6 operation(s) for account.

Operations 7

GET /api/account The signed-in person, their workspaces and the sign-in methods this server… #
POST /api/account/workspaces Create a workspace; you become its owner #
POST /api/account/claim Connect a workspace you already have (made with an API key) to your login; you… #
GET /api/account/connector Connecting an AI app: which app asks, and the workspaces it can work in #
POST /api/account/connector Connecting an AI app: the workspace it works in (before allowing it) #
GET /api/account/connectors AI apps you connected (Claude and others), each with the workspace it works in #
DELETE /api/account/connectors/{clientId} Disconnect an AI app: it stops working at once and must be connected again #

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/chartlink-app:chartlink-app-account-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

chartlink-app-account-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: chartlink Account API
  version: 0.1.0
  description: 'chartlink — a platform for charts and maps, made in your brand, with live-updating embed links. NOT CONNECTED YET? In an AI app that takes MCP connectors (Claude and others): your human adds https://chartlink.app/mcp as a

    connector, signs in and picks a workspace — no key, nothing pasted into the chat. In Claude Code or a script:

    an API key from their studio (Workspace → API keys for Claude Code and scripts), sent as Authorization: Bearer. Either way you work in their workspace — their brands and charts. Every chart carries urls.studio, where they

    fine-tune it. A share URL is one published chart. Credits are GET

    /api/billing-info and a checkout link from POST /api/checkout-link, which you hand to your human. WHAT AN ASSET IS

    CHART TYPES: line, bar, area, scatter, dumbbell, slope, heatmap, choropleth, symbol-map, pie, treemap, waterfall, candlestick

    (GET /api/asset-types describes each; GET /api/asset-types/{type}/schema is the contract — read it before the first create.)

    An asset = type + data + config (+ brand). data holds typed columns and row-arrays; config holds

    everything about presentation (title and the other text elements, encoding, chart options). They are updated independently:

    PUT /assets/{id}/data replaces the numbers; PATCH /assets/{id} deep-merges config. Never resend

    what you are not changing. There is no table type (removed): a ranking is a sorted "bar" chart with

    value labels, a row-by-row comparison a "dumbbell" (one point per row = a dot plot) with row labels. KICKER AND TITLE MARKER: kicker {text, font, align, box} is a short line above the title (a section or topic

    that ties charts together; default a small bold line in the emphasis colour). title.marker {position: "top" |

    "left" | "end" | "none", shape: "bar" | "dot" | "square", hang, color, length, thickness, gap} draws one mark

    above the title, beside it (a bar spans the title, a dot or square sits at its first line; hang: true puts it

    in the margin instead of pushing the text right) or after the last word ("end"; skipped when the title already

    ends in . ? ! … : ; so never type a mark into the title). gap is the space to the text everywhere. Both are

    brand-settable (kicker''s style, the marker); the kicker''s words are per chart. kicker.show: false (usually on

    a brand) hides kickers whatever their text; description.show: false does the same for descriptions. POINTS (line, area): chart.points is the one way to put dots on series — a list of rules {series?, at, label?,

    labelPosition?, align?, font?, fill?, ring?, radius?}. A label uses the brand''s data-label style; font overrides it

    key by key, and font.color "series" (here or in the brand''s data-label colour) takes the series'' colour. A note in

    words with the annotation look is an annotation, not a point label. at: "all" | "first" | "last" | "max" | "min" | [x values]. label fills in

    {value}, {series}, {x}: [{at: "max", label: "Peak {value}"}], [{at: [2008, 2020], label: "{x}"}]. markers

    ("none" | "end" | "all") is the end dot, the brand''s house style (default "end"): a chart''s own points are added to it,

    so set markers "none" to drop it; points: [] draws no points at all. LINE BREAKS: "

    " breaks a line in the words you write — title, kicker, description, source, annotations,

    reference-line and highlight labels, point labels, and series names in line/area end labels (which then take

    the room of their lines). A multi-line point label aligns by its side (centred above/below) unless

    points[].align says "left" | "center" | "right"; annotations and free text have align too. Legends and

    tooltips show a series name on one line. AXES: a value axis takes min/max, ticks {count | values: [0, 50, 100] — ticks and gridlines exactly there}, ticks.format,

    ticks.labels.text: the words at those values, one per value (["", "50", "100%"]; "" leaves a tick unlabelled, its

    gridline stays) — omit it for each value formatted.'
servers:
- url: https://chartlink.app
tags:
- name: Account
paths:
  /api/account:
    get:
      operationId: getAccount
      summary: The signed-in person, their workspaces and the sign-in methods this server…
      responses:
        '200':
          description: Account
      tags:
      - Account
  /api/account/workspaces:
    post:
      operationId: createWorkspace
      summary: Create a workspace; you become its owner
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 80
              required:
              - name
      responses:
        '201':
          description: Created
      tags:
      - Account
  /api/account/claim:
    post:
      operationId: claimWorkspace
      summary: Connect a workspace you already have (made with an API key) to your login; you…
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                key:
                  type: string
                  minLength: 8
              required:
              - key
      responses:
        '200':
          description: Connected
      tags:
      - Account
  /api/account/connector:
    get:
      operationId: getConnectorRequest
      summary: 'Connecting an AI app: which app asks, and the workspaces it can work in'
      parameters:
      - schema:
          type: string
        required: true
        name: oauth_query
        in: query
      responses:
        '200':
          description: The app and your workspaces
      tags:
      - Account
    post:
      operationId: chooseConnectorWorkspace
      summary: 'Connecting an AI app: the workspace it works in (before allowing it)'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                oauth_query:
                  type: string
                workspaceId:
                  type: string
              required:
              - oauth_query
              - workspaceId
      responses:
        '200':
          description: Chosen
      tags:
      - Account
  /api/account/connectors:
    get:
      operationId: listConnectors
      summary: AI apps you connected (Claude and others), each with the workspace it works in
      responses:
        '200':
          description: Connected apps
      tags:
      - Account
  /api/account/connectors/{clientId}:
    delete:
      operationId: disconnectConnector
      summary: 'Disconnect an AI app: it stops working at once and must be connected again'
      parameters:
      - schema:
          type: string
        required: true
        name: clientId
        in: path
      responses:
        '200':
          description: Disconnected
      tags:
      - Account