Connections Sites API

The Sites API from Connections — 5 operation(s) for sites.

GitHub OpenAPI

Operations 9

GET /api/sites/{siteId}/exports The latest full raw-data export of a site #
POST /api/sites/{siteId}/exports Start a full raw-data export of a site #
GET /api/sites/{siteId}/exports/{runId} Download a raw-data export #
GET /api/sites/{siteId}/verdicts Themis verdicts for a site #
POST /api/sites/{siteId}/verdicts/judge Judge a site now (Themis) #
GET /sites List tracked sites #
POST /sites Create a tracked site #
PATCH /sites Rename a tracked site #
DELETE /sites Stop tracking a site #

Specifications

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/connections-icu:connections-icu-sites-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

connections-icu-sites-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Connections Icu Sites API
  version: 1.0.0
  description: 'Operations tagged Sites across 2 of this provider''s published API definitions: connections-icu-analytics-openapi-original.json, connections-icu-analytics-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://analytics.connectionsapi.com
tags:
- name: Sites
paths:
  /api/sites/{siteId}/exports:
    get:
      summary: The latest full raw-data export of a site
      description: 'The site''s latest bulk raw export run (or null), and `tier_allows`: whether the site owner''s plan may start one. Poll this, or the run''s path, while `status` is running.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: siteId
        in: path
        required: true
        schema:
          type: string
        description: The tracked site's id (or domain).
      responses:
        '200':
          description: '{ site_id, tier, tier_allows, run }'
          content:
            application/json:
              schema:
                type: object
                properties:
                  site_id:
                    type: string
                  tier:
                    type: string
                  tier_allows:
                    type: boolean
                  run:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                      site_id:
                        type: string
                      status:
                        type: string
                        enum:
                        - running
                        - done
                        - failed
                      started_at:
                        type: string
                        format: date-time
                      finished_at:
                        type: string
                        format: date-time
                        nullable: true
                      months:
                        type: array
                        nullable: true
                        items:
                          type: string
                        description: The months the site holds events in, once planned.
                      months_done:
                        type: integer
                      expires_at:
                        type: string
                        format: date-time
                        nullable: true
                      error:
                        type: string
                        nullable: true
                    nullable: true
        '401':
          description: Auth required.
        '404':
          description: No such site visible to this credential.
      tags:
      - Sites
      operationId: getApiSitesBySiteIdExports
      x-operation-id-source: derived
    post:
      summary: Start a full raw-data export of a site
      description: 'Exports the site''s WHOLE raw event history as gzipped JSON lines, one set of files per calendar month, plus a manifest.json with every file''s sha256 and bytes. Runs in the background: answers 202 with a run id to poll. Files are kept 7 days after the export finishes. One export per site runs at a time. Needs analytics:write and the argusRawExport plan floor; below it the answer is 403 { error: ''upgrade_required'', feature: ''argusRawExport'', upgrade: true } and nothing is started.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: siteId
        in: path
        required: true
        schema:
          type: string
        description: The tracked site's id (or domain).
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties: {}
              description: No fields. The path id and the resolved site are the entire input.
      responses:
        '202':
          description: '{ site_id, accepted: true, run_id, poll }'
        '401':
          description: Auth required.
        '403':
          description: upgrade_required (below the plan floor), or the key lacks analytics:write.
        '404':
          description: No such site visible to this credential.
        '409':
          description: '{ error: ''EXPORT_RUNNING'', blocking_run } - an export of this site is already running; poll that run.'
        '503':
          description: The export job could not be queued; nothing is running.
      tags:
      - Sites
      operationId: postApiSitesBySiteIdExports
      x-operation-id-source: derived
    servers:
    - url: https://analytics.connectionsapi.com
  /api/sites/{siteId}/exports/{runId}:
    get:
      summary: Download a raw-data export
      description: 'One export run. For a finished run: `manifest_url` and one download `url` per file, each short-lived (`link_expires_in_seconds`) and re-issued on every read. A running or failed run answers with `state` and no files.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: siteId
        in: path
        required: true
        schema:
          type: string
        description: The tracked site's id (or domain).
      - name: runId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: '{ site_id, run, state, expires_at, link_expires_in_seconds, manifest_url, files }'
          content:
            application/json:
              schema:
                type: object
                properties:
                  site_id:
                    type: string
                  run:
                    type: object
                    properties:
                      id:
                        type: string
                        format: uuid
                      site_id:
                        type: string
                      status:
                        type: string
                        enum:
                        - running
                        - done
                        - failed
                      started_at:
                        type: string
                        format: date-time
                      finished_at:
                        type: string
                        format: date-time
                        nullable: true
                      months:
                        type: array
                        nullable: true
                        items:
                          type: string
                        description: The months the site holds events in, once planned.
                      months_done:
                        type: integer
                      expires_at:
                        type: string
                        format: date-time
                        nullable: true
                      error:
                        type: string
                        nullable: true
                  state:
                    type: string
                    enum:
                    - running
                    - failed
                    - ready
                  expires_at:
                    type: string
                    format: date-time
                  link_expires_in_seconds:
                    type: integer
                  manifest_url:
                    type: string
                  files:
                    type: array
                    items:
                      type: object
                      properties:
                        name:
                          type: string
                          description: events-YYYY-MM-partNNN.ndjson.gz
                        month:
                          type: string
                          description: YYYY-MM
                        bytes:
                          type: integer
                        sha256:
                          type: string
                        url:
                          type: string
        '401':
          description: Auth required.
        '404':
          description: No such site, or no such export for it.
        '410':
          description: '{ error: ''EXPORT_EXPIRED'', expired_at } - the files were deleted 7 days after the export finished.'
      tags:
      - Sites
      operationId: getApiSitesBySiteIdExportsByRunId
      x-operation-id-source: derived
    servers:
    - url: https://analytics.connectionsapi.com
  /api/sites/{siteId}/verdicts:
    get:
      summary: Themis verdicts for a site
      description: The AI verdict engine's latest GOOD (do nothing) / BAD (fix now) judgment per ARGUS matrix entry for one site you own - the error burst of the last 24h and the latest AI Visibility run. Each row carries the human TLDR, the playbook for the next agent, every vote, and whether the entry has anything to judge right now (`unjudgeable`). `tier_allows` says whether this site's owner may ask for a fresh judgment (Pass Pro and above); reading past verdicts is always allowed.
      security:
      - ApiKeyAuth: []
      parameters:
      - name: siteId
        in: path
        required: true
        schema:
          type: string
        description: The tracked site's id (or domain).
      responses:
        '200':
          description: '{ site_id, tier_allows, tier, decisions: [{ entry: { id, title, what }, unjudgeable, actor, decision | null }] }'
        '401':
          description: Auth required.
        '404':
          description: No such site visible to this credential.
      tags:
      - Sites
      operationId: getApiSitesBySiteIdVerdicts
      x-operation-id-source: derived
    servers:
    - url: https://analytics.connectionsapi.com
  /api/sites/{siteId}/verdicts/judge:
    post:
      summary: Judge a site now (Themis)
      description: 'Runs the AI verdict engine over every ARGUS matrix entry that has something to observe for this site - three independent votes per entry, thinking on - and returns the fresh rows. Charged in credits to the site owner at the decision_judgment door, so the caller must BE the owner (a key needs analytics:write) and the owner''s tier must clear the argusVerdicts floor (Pass Pro and above); below it the answer is 403 { error: ''upgrade_required'', feature: ''argusVerdicts'' } and nothing is charged. An entry whose observation is unchanged and under a day old is skipped, not re-billed.'
      security:
      - ApiKeyAuth: []
      parameters:
      - name: siteId
        in: path
        required: true
        schema:
          type: string
        description: The tracked site's id (or domain).
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties: {}
              description: No fields. The path id and the resolved site are the entire input.
      responses:
        '200':
          description: '{ site_id, tier_allows: true, tier, decisions, judged, skipped, unjudgeable, refused, failed, deferred }'
        '401':
          description: Auth required.
        '403':
          description: upgrade_required (below the tier floor), the key lacks analytics:write, or the caller is not the site's owner.
        '404':
          description: No such site visible to this credential.
      tags:
      - Sites
      operationId: postApiSitesBySiteIdVerdictsJudge
      x-operation-id-source: derived
    servers:
    - url: https://analytics.connectionsapi.com
  /sites:
    get:
      summary: List tracked sites
      description: The owner's tracked properties (the dashboard company switcher), each with a 24h event pulse.
      security:
      - ApiKeyAuth: []
      responses:
        '200':
          description: '{ count, sites: [...] }'
        '401':
          description: Auth required.
      tags:
      - Sites
      operationId: getSites
      x-operation-id-source: derived
    post:
      summary: Create a tracked site
      description: Provision a new tracked property (tenant). Returns its public ingest key (ak_…).
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - domain
              properties:
                domain:
                  type: string
                name:
                  type: string
                companyId:
                  type: string
                  description: The company the site lives in. Required for an API key (400 without it); a dashboard session may omit it.
                retention_days:
                  type: integer
                  default: 180
                timezone:
                  type: string
                  example: America/New_York
                  description: The IANA timezone the site's days are counted in. Omitted, the site counts UTC days until one is chosen.
      responses:
        '200':
          description: '{ id, domain, ingest_key }'
        '401':
          description: Auth required.
      tags:
      - Sites
      operationId: postSites
      x-operation-id-source: derived
    patch:
      summary: Rename a tracked site
      description: Renames a site you own. `name` is the only mutable field; `domain` keys the pixel, so it is immutable.
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - id
              - name
              properties:
                id:
                  type: string
                name:
                  type: string
      responses:
        '200':
          description: '{ id, name, domain }'
        '401':
          description: Auth required.
        '404':
          description: Not found, or not yours to rename.
      tags:
      - Sites
      operationId: patchSites
      x-operation-id-source: derived
    delete:
      summary: Stop tracking a site
      description: 'Removes a site you own: it stops accepting events and no longer appears in any list or read. Its history (events, sessions, errors, entities, rollups, revenue, SEO and alert state) is kept, and POST /sites with the same domain restores it with its existing ingest key. Scoped to the caller: a constellation admin who can merely SEE a first-party property cannot remove it.'
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - id
              properties:
                id:
                  type: string
      responses:
        '200':
          description: '{ id, name, domain, removed: true, history_kept: true }'
        '400':
          description: id missing, or the id names a company placeholder rather than a website.
        '401':
          description: Auth required.
        '404':
          description: Not found, or not yours to remove.
      tags:
      - Sites
      operationId: deleteSites
      x-operation-id-source: derived
    servers:
    - url: https://analytics.connectionsapi.com
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: 'A Studio-minted cnx_live_ key carrying analytics:read (analytics:write to provision sites). The SAME key is also accepted as Authorization: Bearer (see BearerAuth). Studio is the sole key issuer. The legacy per-plane argus_live_ key class was retired 2026-06-21.'
    memberSession:
      type: http
      scheme: bearer
      description: The member's Connections session access token, exactly as this product's app sends it. Only operations that declare this scheme accept one.
      x-connections-credential: member-session
    cnxKey:
      type: http
      scheme: bearer
      description: A cnx_live_ key minted in Studio. It acts as the member who minted it, within its scopes.
      x-connections-credential: connections-key
    BearerAuth:
      type: http
      scheme: bearer
      description: A cnx_live_ key carrying analytics:read, sent as a bearer token.
x-refined-from:
- connections-icu-analytics-openapi-original.json
- connections-icu-analytics-openapi.yml