Freshpaint · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Freshpaint HTTP Events API

7 actions 7 updates update extends openapi/freshpaint-events-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Freshpaint's API. It is a proposal applied on top of the contract, not a document Freshpaint publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-notetermsOfServicex-apievangelist-terms-correctionx-apievangelist-contract-provenancex-apievangelist-docs-statusx-status-pagex-status-apix-idempotency

Targets 7

$.info
$.info.contact
$.paths['/track'].post
$.components.schemas.EventProperties.properties['$insert_id']
$.components.schemas.EventProperties.properties.token
$.components.schemas.EventProperties.properties['$options']
$.components.securitySchemes.EnvironmentToken

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Freshpaint HTTP Events API
  version: 1.0.0
extends: openapi/freshpaint-events-api-openapi.yml
x-generated: '2026-08-13'
x-method: generated
x-source: >-
  Derived from the artifacts in this repo (conventions/, errors/, lifecycle/,
  rate-limits/, authentication/, data-model/) plus live probes performed
  2026-08-13. Applies API Evangelist annotations without mutating the harvested
  contract.
actions:
- target: $.info
  description: >-
    Correct the broken termsOfService link and record contract provenance and
    the docs-gating finding.
  update:
    termsOfService: https://www.freshpaint.io/terms
    x-apievangelist-terms-correction: >-
      The upstream contract points termsOfService at
      https://www.freshpaint.io/legal/terms-of-service, which returned HTTP 404
      when probed 2026-08-13. The live terms are at
      https://www.freshpaint.io/terms (HTTP 200).
    x-apievangelist-contract-provenance: >-
      Freshpaint publishes no machine-readable specification at any public URL.
      /openapi.json, /openapi.yaml, /swagger.json, /v1/openapi.json, /api-docs
      and /redoc were probed on api.perfalytics.com (403, AWS API Gateway),
      www.freshpaint.io (404), documentation.freshpaint.io and
      app.freshpaint.io (200 SPA shell, not a spec). This document was authored
      from the developer reference.
    x-apievangelist-docs-status: >-
      As of 2026-08-13 documentation.freshpaint.io 307-redirects to
      app.freshpaint.io/docs-login. The developer reference this contract was
      built from is no longer publicly readable.
- target: $.info.contact
  description: Add the machine-readable status endpoint alongside the support contact.
  update:
    x-status-page: https://status.freshpaint.io
    x-status-api: https://status.freshpaint.io/api/v2/summary.json
- target: $.paths['/track'].post
  description: >-
    Record the runtime semantics an agent needs but the contract does not
    state — idempotency, rate-limit behavior, and the missing auth-failure
    status.
  update:
    x-idempotency:
      supported: true
      field: properties.$insert_id
      header: null
      default: computed from properties.time and properties.$device_id when omitted
      returns_cached_response: false
      window: not published
      note: >-
        Deduplication key, not an Idempotency-Key header. Reuse the same
        $insert_id on a retry so the event does not double-count downstream.
    x-rate-limit:
      limit: 5000
      window: 1s
      scope: burst
      exhaustion_status: 429
      response_headers: []
      retry_after: not published
    x-undeclared-responses:
      note: >-
        No 401/403 or 5xx is declared even though the operation is
        authenticated. The contract does not state what an invalid or missing
        environment token returns.
    x-agentic-access-ref: agentic-access/freshpaint-agentic-access.yml
- target: $.components.schemas.EventProperties.properties['$insert_id']
  description: Mark the deduplication field as the idempotency key for this operation.
  update:
    x-idempotency-key: true
- target: $.components.schemas.EventProperties.properties.token
  description: Flag that the credential travels in the request body.
  update:
    x-credential: true
    x-apievangelist-note: >-
      The credential is carried in the JSON body rather than a header. It will
      appear in any request-body logging, and it cannot be scoped, rotated per
      caller, or expressed as a standard OpenAPI header/query security scheme.
- target: $.components.schemas.EventProperties.properties['$options']
  description: Document the per-event destination routing control.
  update:
    x-routing-control: true
    x-apievangelist-note: >-
      Accepts either an allow-list of destinations the event may go to, or a
      deny-list of destinations it must be withheld from. This is the
      API-level expression of Freshpaint's per-event governance model.
- target: $.components.securitySchemes.EnvironmentToken
  description: Record that the apiKey modeling is an approximation.
  update:
    x-actual-location: request body (properties.token)
    x-apievangelist-note: >-
      Modeled as apiKey/in:query only because OpenAPI 3.0 cannot express a
      body-borne credential. Do not send the token as a query parameter.