CharacterQuilt · OpenAPI Overlay 1.0.0

API Evangelist enhancements — CharacterQuilt Branding API

5 actions 5 updates security extends openapi/characterquilt-branding-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for CharacterQuilt's API. It is a proposal applied on top of the contract, not a document CharacterQuilt publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-provenancex-artifactssecurityx-authenticationx-corsx-cachingx-response-headersx-rate-limit

Targets 5

$.info
$
$.paths['/branding/{slug}.json'].get
$.paths['/branding/{slug}.json'].get.responses['404']
$.paths['/branding/{slug}']

OpenAPI Overlay

Raw ↑
# generated: '2026-08-13'
# method: generated
# source: openapi/characterquilt-branding-api-openapi.yml + live probes 2026-08-13
# note: >-
#   OpenAPI Overlay 1.0.0 capturing API Evangelist enhancements to the brand-profiles
#   Branding API description. Applied on top of the original; the original is never
#   mutated. Every value added here was observed on the wire (response headers, CORS,
#   404 body) or is a pointer to an artifact in this repo.
overlay: 1.0.0
info:
  title: API Evangelist enhancements — CharacterQuilt Branding API
  version: 1.0.0
extends: openapi/characterquilt-branding-api-openapi.yml
actions:
- target: $.info
  description: Record provenance and the absence of a provider-published contract.
  update:
    x-provenance:
      authored-by: API Evangelist
      method: generated
      basis: live responses observed from https://www.characterquilt.com/branding/{slug}.json
      note: >-
        CharacterQuilt publishes no OpenAPI. Probed /openapi.json, /openapi.yaml,
        /swagger.json, /v1/openapi.json, /api-docs, /docs, /redoc and
        /api/openapi.json on www.characterquilt.com and characterquilt.com — all
        404. api./app./docs./developer. subdomains do not resolve.
    x-artifacts:
      conventions: conventions/characterquilt-conventions.yml
      errors: errors/characterquilt-problem-types.yml
      lifecycle: lifecycle/characterquilt-lifecycle.yml
      rate-limits: rate-limits/characterquilt-rate-limits.yml
      authentication: authentication/characterquilt-authentication.yml
      data-model: data-model/characterquilt-data-model.yml
- target: $
  description: State the security posture explicitly — this surface takes no credential.
  update:
    security: []
    x-authentication: none
    x-cors:
      access-control-allow-origin: '*'
      observed: '2026-08-13'
- target: $.paths['/branding/{slug}.json'].get
  description: Add the observed caching and tracing semantics, and the real response
    headers.
  update:
    x-caching:
      etag: true
      last-modified: true
      cache-control: public, max-age=0, must-revalidate
      note: Conditional requests are supported and are the only way to avoid refetching
        a ~26 KB document.
    x-response-headers:
    - name: etag
      description: Strong entity tag; use with If-None-Match.
    - name: last-modified
      description: Use with If-Modified-Since.
    - name: content-disposition
      description: 'inline; filename="{slug}.json" — the surface is served as a static
        file.'
    - name: x-vercel-id
      description: Platform trace identifier. Not a CharacterQuilt request id and has
        no documented support path.
    x-rate-limit:
      documented: false
      headers: []
      note: No rate-limit headers are returned. See rate-limits/characterquilt-rate-limits.yml.
- target: $.paths['/branding/{slug}.json'].get.responses['404']
  description: Record the real 404 body shape — it is plain text, not JSON.
  update:
    content:
      text/plain:
        schema:
          type: string
        example: 'The page could not be found  NOT_FOUND  iad1::xxxxx-0000000000'
    x-note: >-
      Not RFC 9457 problem+json. A client cannot distinguish an unknown slug from a
      withdrawn one.
- target: $.paths['/branding/{slug}']
  description: Note that format selection is by path extension, not content negotiation.
  update:
    x-content-negotiation: >-
      The .json extension selects the machine-readable representation; the
      extensionless path returns HTML. The Accept header is not honoured.