Counter · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Counter stats API

6 actions 6 updates update extends openapi/counter-dev-stats-api-openapi.yml
Derived by API Evangelist Built from the contracts Counter publishes. Counter did not publish this file.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-observed-behaviorx-verifiedx-apievangelist-provenancex-conventionsx-error-catalogx-lifecyclex-sandboxx-data-model

Targets 6

$.info
$
$.components.securitySchemes.sessionCookie
$.components.securitySchemes.apiToken
$.paths['/query'].get
$.paths['/dump'].get

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Counter stats API
  version: 1.0.0
  x-description: Non-destructive enhancements captured by the API Evangelist enrichment pipeline on 2026-08-13.
    Derived from live probes of https://counter.dev and https://t.counter.dev and from the AGPL-3.0 server
    source at https://github.com/ihucos/counter.dev. Applying this overlay adds provenance, cross-cutting
    convention/error/lifecycle pointers, and per-operation runtime notes. It never mutates the original
    document.
extends: openapi/counter-dev-stats-api-openapi.yml
actions:
- target: $.info
  description: Record that this specification is derived by API Evangelist from the AGPL-3.0 source, not
    published by Counter.
  update:
    x-apievangelist-provenance:
      derived-by: API Evangelist
      derived-from: https://github.com/ihucos/counter.dev
      provider-publishes-spec: false
      date: '2026-08-13'
- target: $
  description: Attach the cross-cutting runtime semantics observed on the live service. None of this is
    published by Counter.
  update:
    x-conventions:
      artifact: conventions/counter-dev-conventions.yml
      idempotency: false
      pagination: none
      versioning: none
      request-id: false
      rate-limit-headers: false
      error-format: plain-text
      rfc9457: false
    x-error-catalog:
      artifact: errors/counter-dev-problem-types.yml
      note: Errors are bare plain-text strings; a 403 body is literally "Forbidden" whether the credential
        was missing or invalid.
    x-lifecycle:
      artifact: lifecycle/counter-dev-lifecycle.yml
      versioning-policy: false
      deprecation-policy: false
      status-page: false
      changelog: false
      sla: false
    x-sandbox:
      artifact: sandbox/counter-dev-sandbox.yml
      public-demo: true
      activation: demo=1 on /query, any non-empty demo on /dump
      credential-required: false
    x-data-model:
      artifact: data-model/counter-dev-data-model.yml
      per-visitor-entity: false
- target: $.components.securitySchemes.sessionCookie
  description: 'Correct the session cookie name: the source names it "swa" (backend/lib/ctx.go), not "session".'
  update:
    x-actual-cookie-name: swa
    x-source: https://github.com/ihucos/counter.dev/blob/master/backend/lib/ctx.go
- target: $.components.securitySchemes.apiToken
  description: Record the real properties and risks of the read-only token.
  update:
    x-token-properties:
      scope: read-only
      per-account: true
      count-per-account: 1
      transport: query-string
      rotation-endpoint: POST /resettoken
      caveat: Travels in the URL, so it lands in browser history, proxy logs and Referer headers. There
        is no header-based alternative.
- target: $.paths['/query'].get
  description: Attach observed runtime behaviour for query.
  update:
    x-observed-behavior: Returns a JSON document but labels it 'text/plain; charset=utf-8' - Ctx.Return
      never sets a Content-Type. Parse as JSON regardless. An unparseable 'from'/'to' returns 500 with
      the raw Go time-parsing error rather than a 400. Verified live 2026-08-13.
    x-verified: '2026-08-13'
- target: $.paths['/dump'].get
  description: Attach observed runtime behaviour for dump.
  update:
    x-observed-behavior: 'Frames are ''data: <json>'' only - the SSE ''event:'' and ''id:'' fields are
      not used, so the frame kind must be read from the JSON ''type'' key and Last-Event-ID resumption
      is unavailable. The ''nouser'' frame is delivered inside a 200 response, so an unauthenticated caller
      must detect failure from the frame type, not the status code. Dumps are throttled to at most one
      per second. See asyncapi/counter-dev-stats-asyncapi.yml.'
    x-verified: '2026-08-13'

Work with this as data

Every overlay 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 openapi overlays

4 MCP tools reach this
  • find_overlaysBrowse and filter every overlay in the catalog.
  • 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 overlay
curl "https://apis.io/api/v1/overlays/counter-dev-stats-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?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.