CHAOSS · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the CollectOSS REST API

8 actions 8 updates update extends ../openapi/chaoss-collectoss-openapi.yml
Derived by API Evangelist Built from the contracts CHAOSS publishes. CHAOSS did not publish this file.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-oauth-rolex-grant-typex-not-replay-safex-notecontactlicensex-providerx-provider-id

Targets 5

$.info
$
$.paths['/user/session/generate'].post
$.paths['/user/session/refresh'].post
$.paths['/dei/repo/add'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the CollectOSS REST API
  version: 1.0.0
extends: ../openapi/chaoss-collectoss-openapi.yml
x-provenance:
  generated: '2026-09-05'
  method: generated
  provider: CHAOSS
  providerId: chaoss
  source: >-
    Authored by API Evangelist against the verbatim provider contract harvested from
    https://github.com/chaoss/CollectOSS/blob/main/docs/source/rest-api/spec.yml on 2026-09-05.
  note: >-
    This overlay records OUR annotations. It does not repair the contract and it must never be
    merged back as if CHAOSS published it. In particular it deliberately does NOT invent a
    servers[] host: CollectOSS is self-hosted and the provider's own documentation uses the
    placeholder https://collectoss.example.com/api/unstable/. Supplying a concrete host here would
    manufacture a callable endpoint that does not exist.
actions:
  - target: $.info
    description: Record who publishes this contract, where it lives, and its licence.
    update:
      contact:
        name: CHAOSS CollectOSS maintainers
        url: https://github.com/chaoss/CollectOSS/issues
      license:
        name: MIT
        identifier: MIT
      x-provider: CHAOSS
      x-provider-id: chaoss
      x-source-repository: https://github.com/chaoss/CollectOSS
      x-source-spec: https://github.com/chaoss/CollectOSS/blob/main/docs/source/rest-api/spec.yml
      x-rendered-reference: https://docs.collectoss.org/en/latest/rest-api/api.html
      x-parent-organization: Linux Foundation
      x-successor-to: >-
        Augur. github.com/chaoss/augur was archived 2026-07-23 with the notice "The Augur project is
        no longer part of CHAOSS. Use CollectOSS instead!"
  - target: $
    description: >-
      Flag the deployment model at document level. The document declares openapi 3.1.0 but carries
      the Swagger 2.0 host/basePath keys and no servers[] block, so it names no callable host.
    update:
      x-deployment-model: self-hosted
      x-base-path: /api/unstable/
      x-documented-base-url-template: https://collectoss.example.com/api/unstable/
      x-servers-absent: true
      x-servers-absent-note: >-
        No servers[] block exists. host: example.com and basePath: /api/unstable/ are Swagger 2.0
        keys and are ignored by OpenAPI 3 tooling.
  - target: $
    description: Record the contract-quality defects an integrator hits before their first call.
    update:
      x-contract-defects:
        - id: flask-path-templating
          detail: >-
            249 path parameters are written Flask-style (/repos/:repo_id) instead of OpenAPI-style
            (/repos/{repo_id}). No OpenAPI tool will bind them; generators emit a literal ":repo_id"
            segment.
        - id: swagger2-response-schema
          detail: >-
            Responses use responses.<code>.schema rather than responses.<code>.content.<media>.schema.
            Strict OpenAPI 3 tooling reads all 137 operations as returning no body.
        - id: duplicate-operation-ids
          detail: >-
            134 unique operationIds across 137 operations. "Number of Releases (Repo)", "Open Issues
            Count (Repo Group)" and "New Contributor Counts Stacked Bar Chart (shows actions)" each
            appear twice.
        - id: operation-ids-are-sentences
          detail: >-
            operationIds contain spaces and parentheses ("Average Issue Resolution Time (Repo Group)").
            Most generators will mangle them into method names.
        - id: prefix-parameter-mismatch
          detail: >-
            Twelve operations sit under a prefix that contradicts their path parameter — eleven
            repo-scoped metrics under /repo-groups/:repo_id/ plus /repos/:repo_group_id/releases.
        - id: query-params-typed-as-path
          detail: >-
            Date and period parameters are declared in: path when they are query parameters. On
            GET /repos/:repo_id/code-changes all four of repo_id, period, begin_date and end_date are
            typed as path parameters while only repo_id appears in the path template.
        - id: no-security-schemes
          detail: >-
            components.securitySchemes is absent although the API implements OAuth 2.0 and four
            operations require an Authorization header. An agent reading only the contract concludes
            the API is anonymous.
        - id: no-reusable-schemas
          detail: >-
            No components/schemas and no $ref anywhere. Every response shape is inlined per
            operation, so there is no authoritative definition of a repository or a contributor.
  - target: $
    description: >-
      Bind the contract to the CHAOSS metric vocabulary it implements. The tag names ARE the CHAOSS
      focus areas, and CHAOSS is the body that defines them.
    update:
      x-domain-standard:
        id: chaoss-metrics
        name: CHAOSS Metrics and Metrics Models
        url: https://www.chaoss.community/kb-metrics-and-metrics-models/
        role: publisher-and-implementer
      x-focus-area-operation-counts:
        evolution: 52
        experimental: 26
        risk: 21
        visualizations: 12
        utility: 8
        value: 8
        complexity: 6
        login: 2
        DEI Badging: 2
  - target: $
    description: Record the runtime semantics an agent needs and the contract does not carry.
    update:
      x-runtime-semantics:
        pagination: none
        idempotency: none
        reversibility: none
        dry_run: false
        rate_limit_headers: none
        request_id_header: none
        error_format: 'bespoke {"status": string}'
        error_warning: >-
          Seven of the nine catalogued failure modes are returned as HTTP 200 with a status string in
          the body. Branching on the status code alone reads authentication failure as success.
        identifier_portability: >-
          repo_id and repo_group_id are assigned by the local instance and are not stable across
          deployments. Resolve via GET /owner/:owner/repo/:repo first.
  - target: $.paths['/user/session/generate'].post
    description: Mark the token endpoint so tooling does not treat it as an ordinary business operation.
    update:
      x-oauth-role: token-endpoint
      x-grant-type: authorization_code
      x-not-replay-safe: true
      x-note: >-
        The temporary authorization code is one-time use and valid for seconds. Never retry this
        call with the same code.
  - target: $.paths['/user/session/refresh'].post
    description: Mark the refresh endpoint as destructive.
    update:
      x-oauth-role: refresh-endpoint
      x-grant-type: refresh_token
      x-not-replay-safe: true
      x-destructive: true
      x-note: >-
        On rotation the previous bearer token AND the previous refresh token are invalidated. A
        client that loses this response has lost the session; there is no revoke or recovery endpoint.
  - target: $.paths['/dei/repo/add'].post
    description: Mark the only state-changing business write and its missing undo.
    update:
      x-write: true
      x-reversal-operation: null
      x-reversal-note: >-
        No remove, untrack, cancel or delete operation exists in the contract or the documentation.
        An agent that registers the wrong repository cannot undo it through the API.
      x-quasi-idempotent: >-
        A repeat call returns the body value "Repo already exists" rather than duplicating the row.
        This is an observed response enum, not a documented idempotency guarantee, and it arrives
        inside an HTTP 200.

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/chaoss-collectoss-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.