OwnLocal · OpenAPI Overlay 1.0.0

API Evangelist enhancements — OwnLocal API — Reports Data API

9 actions 9 updates servers extends ../openapi/ownlocal-reports-data-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for OwnLocal's API. It is a proposal applied on top of the contract, not a document OwnLocal publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

descriptionoperationIdserversexternalDocscontacttags

Targets 7

$
$.info
$.paths['/api/v1/reports/ads'].get
$.paths['/api/v1/reports/business'].get
$.components.securitySchemes.apiKey
$.components.schemas.ads_report
$.components.schemas.business_report

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements — OwnLocal API — Reports Data API
  version: 1.0.0
extends: ../openapi/ownlocal-reports-data-api-openapi.yml
x-generated: '2026-08-12'
x-method: generated
x-source: openapi/_original/ownlocal-swagger.json (verbatim from https://admin.austin.ownlocal.com/api-docs/v1/swagger.json)
  cross-read against https://api.docs.ownlocal.com/
x-note: 'Records what API Evangelist added on top of OwnLocal''s own contract during the Swagger 2.0 -> OpenAPI
  3.1.0 conversion. Nothing here changes OwnLocal''s described behaviour: every added value is either a restatement
  of something OwnLocal publishes in prose (the server host, the auth mechanics, support contact) or a structural
  identifier the source omitted (operationIds, tag declarations). No endpoint, parameter, field or schema is invented.
  The original is preserved byte-for-byte at openapi/_original/ownlocal-swagger.json and is never mutated.'
actions:
- target: $
  description: Add servers[]. OwnLocal's published Swagger 2.0 declares no host, basePath or schemes, so the source
    contract never names the server it describes. The host is taken verbatim from the published API reference
    at https://api.docs.ownlocal.com/, where every curl example calls https://admin.austin.ownlocal.com/api/v1/...
  update:
    servers:
    - url: https://admin.austin.ownlocal.com
      description: OwnLocal production API host (per the published API reference)
- target: $
  description: Link the machine contract back to the human reference it was cross-read against.
  update:
    externalDocs:
      description: OwnLocal API Docs
      url: https://api.docs.ownlocal.com/
- target: $.info
  description: Add contact (support@ownlocal.com / the support page, both published by OwnLocal) and a tag-scoped
    description. The source info block carries only title and version.
  update:
    description: Performance reporting for ads and businesses — impressions, interaction breakdowns, leads, digital
      lift and search-rank history.
    contact:
      name: OwnLocal Support
      email: support@ownlocal.com
      url: https://www.ownlocal.com/support/
- target: $
  description: Declare the tag. The source Swagger uses tags on operations but never declares them at the root,
    so no tag carries a description.
  update:
    tags:
    - name: Reports Data API
      description: Performance reporting for ads and businesses — impressions, interaction breakdowns, leads,
        digital lift and search-rank history.
- target: $.paths['/api/v1/reports/ads'].get
  description: Add operationId 'getAdsReport'. None of OwnLocal's 13 operations declares an operationId, which
    blocks code generation and leaves agent tooling with no stable handle. Assigned deterministically from the
    HTTP method and resource path.
  update:
    operationId: getAdsReport
- target: $.paths['/api/v1/reports/business'].get
  description: Add operationId 'getBusinessReport'. None of OwnLocal's 13 operations declares an operationId,
    which blocks code generation and leaves agent tooling with no stable handle. Assigned deterministically from
    the HTTP method and resource path.
  update:
    operationId: getBusinessReport
- target: $.components.securitySchemes.apiKey
  description: 'Describe the apiKey scheme. The source declares type/name/in with no description, which omits
    the single most error-prone fact about this API: the key is sent RAW in the Authorization header with no Bearer
    prefix, and is issued manually by OwnLocal support. Stated in the published reference.'
  update:
    description: Organization API key sent raw (no scheme prefix) in the Authorization header. Keys are issued
      by OwnLocal support; there is no self-serve key provisioning.
- target: $.components.schemas.ads_report
  description: Resolve a dangling $ref. The source Swagger's 'ads_report.ads' references '#/definitions/ad_reach',
    which the document never defines, leaving the spec unresolvable. The missing schema is NOT invented here —
    the $ref is replaced with an unconstrained object carrying x-ownlocal-unresolved-ref, so the contract resolves
    while the provider's defect stays visible and attributable.
  update: {}
  x-ownlocal-unresolved-ref: '#/definitions/ad_reach'
- target: $.components.schemas.business_report
  description: Resolve a dangling $ref. The source Swagger's 'business_report.reach_report' references '#/definitions/business_reach',
    which the document never defines, leaving the spec unresolvable. The missing schema is NOT invented here —
    the $ref is replaced with an unconstrained object carrying x-ownlocal-unresolved-ref, so the contract resolves
    while the provider's defect stays visible and attributable.
  update: {}
  x-ownlocal-unresolved-ref: '#/definitions/business_reach'