Ceros · OpenAPI Overlay 1.0.0

API Evangelist enhancements — Ceros Public API

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

What the actions change

x-returns-idx-next-calltermsOfServicex-documentationx-getting-startedx-versioning-policyx-version-headerx-status-page

Targets 8

$.info
$
$.components
$.paths['/accounts/current-account'].get
$.paths['/accounts/{accountResourceId}/folder-tree'].get
$.paths['/folder/{folderResourceId}/experiences'].get
$.paths['/experiences/{experienceResourceId}/embed-codes'].get
$.components.securitySchemes.bearerAuth

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements — Ceros Public API
  version: 1.0.0
extends: ../openapi/ceros-public-api-openapi.yml
x-generated: '2026-08-09'
x-method: generated
x-source: >-
  API Evangelist enrichment pass. Captures what Ceros documents in prose at
  developers.ceros.com but does not express in the OpenAPI document itself. The original
  openapi/ file is left verbatim.
actions:
- target: $.info
  description: Record the documented base URL, docs and the version-selection header.
  update:
    termsOfService: https://www.ceros.com/terms-and-conditions/
    x-documentation: https://developers.ceros.com/api/public/ceros-public-api
    x-getting-started: https://developers.ceros.com/guides/getting-started
    x-versioning-policy: https://developers.ceros.com/guides/versioning
    x-version-header: x-ceros-api-version
    x-status-page: https://status.ceros.com/
    x-sla: https://www.ceros.com/service-level-agreement/
- target: $
  description: >-
    Declare the x-ceros-api-version header that the getting-started guide requires on every
    request but that the published spec omits entirely.
  update:
    x-required-headers:
    - name: x-ceros-api-version
      in: header
      required: false
      recommended: true
      schema:
        type: string
        pattern: '^\d{4}-\d{2}-\d{2}-\d{2}-\d{2}$'
        default: 2026-05-28-09-00
      description: >-
        Pins the dated API version. Omitting it floats the integration onto the latest version.
        Ceros documents this in the getting-started guide but does not declare it as a parameter
        on any operation.
- target: $.components
  description: Name the entities the spec inlines anonymously, so generated clients get real types.
  update:
    x-entities:
      Account: {id: accountResourceId, source: getCurrentAccount}
      Folder: {id: resourceId, source: getFolderTree, self_referential: true}
      Experience: {id: resourceId, source: listFolderExperiences}
      EmbedCodes: {source: getEmbedCodes, addressable: false}
    x-entity-note: >-
      The published spec has no components.schemas at all — every response inlines a full JSON
      Schema draft 2020-12 document, so identical entities are redefined per operation.
- target: $.paths['/accounts/current-account'].get
  description: Mark the discovery entry point of the resource graph.
  update:
    x-entry-point: true
    x-returns-id: accountResourceId
    x-next-call: getFolderTree
- target: $.paths['/accounts/{accountResourceId}/folder-tree'].get
  update:
    x-returns-id: resourceId (folder)
    x-next-call: listFolderExperiences
    x-expensive-expansions: [experiences, members]
- target: $.paths['/folder/{folderResourceId}/experiences'].get
  update:
    x-pagination:
      style: page-number
      params: [page, pageSize]
      max_page_size: 50
      response_links: [paging.next, paging.previous]
    x-returns-id: resourceId (experience)
    x-next-call: getEmbedCodes
- target: $.paths['/experiences/{experienceResourceId}/embed-codes'].get
  update:
    x-terminal: true
    x-experience-kinds:
      Flex: Always returns full-height, scrollable and inline snippets; available before publishing.
      Legacy: Must be published; returns only the snippet variants the layout supports.
- target: $.components.securitySchemes.bearerAuth
  description: Record what the key actually grants — there is no scope model.
  update:
    x-key-issuance: Ceros account settings
    x-scopes: none
    x-blast-radius: >-
      A single long-lived account-scoped key. Any holder can read the entire account's folder tree
      and every experience in it. There is no per-key permission, no scope, and no published
      rotation or revocation procedure.
- target: $
  description: Record what the surface does not publish, so consumers plan for it.
  update:
    x-gaps:
      rate_limits: No limit, quota or 429 response is documented.
      idempotency: No idempotency key mechanism.
      request_id: No correlation header documented or observed.
      spec_file: 'No downloadable OpenAPI at any URL; probes of /openapi.json, /openapi.yaml and /swagger.json on developers.ceros.com and rest.ceros.com all 404.'
      error_format: 'Ceros-specific errors[] envelope, not RFC 9457 problem+json.'
      runtime_divergence: 'Spec documents 401 with the errors[] envelope; the live host returns {"message":"UNAUTHORIZED"}.'