Pomo · OpenAPI Overlay 1.0.0

API Evangelist enrichment overlay — Pomo Platform API

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

What the actions change

descriptiontitlesummarytermsOfServicecontactx-legal-entityx-api-evangelist-noteservers

Targets 4

$.info
$
$.components.securitySchemes
$.components.securitySchemes.HTTPBearer

OpenAPI Overlay

Raw ↑
# API Evangelist enrichment overlay for the Pomo Platform API.
# generated: '2026-08-13'
# method: generated
# source: openapi/pomo-openapi.yml (harvested verbatim from https://api.usepomo.ai/openapi.json)
#
# This overlay carries OUR enhancements. It never mutates the harvested spec.
# Every action below records something we established by probing the live API or
# reading the provider's own published surface — nothing is invented.
overlay: 1.0.0
info:
  title: API Evangelist enrichment overlay — Pomo Platform API
  version: 1.0.0
extends: ../openapi/pomo-openapi.yml
actions:
  - target: $.info
    description: >-
      The harvested contract carries the FastAPI scaffold identity ("GPT Backend API", version 0.1.0)
      with no contact, terms or description. Name the product, point at the provider's own published
      legal and support surfaces, and record the legal entity named in the Terms of Use.
    update:
      title: Pomo Platform API
      summary: The FastAPI backend behind the Pomo AI marketing platform.
      description: >-
        Publicly readable OpenAPI 3.1 contract for the Pomo application backend: 924 paths and 994
        operations across campaigns, online ad campaigns, agentic teams, brand workflow, competitor
        tracking, market intelligence, earned media, influencer discovery, a unified data model, and
        connectors to sixteen external ad and commerce platforms. Pomo publishes no developer portal,
        no API documentation and no access programme; this contract is the application's own backend,
        readable rather than offered.
      termsOfService: https://usepomo.ai/pages/terms-of-service.html
      contact:
        name: Pomo (MachFlow, Inc. dba Pomo)
        url: https://usepomo.ai/contact
      x-legal-entity: MachFlow, Inc. dba Pomo
      x-api-evangelist-note: >-
        info.version 0.1.0 is the FastAPI default and carries no release meaning; see
        lifecycle/pomo-lifecycle.yml.
  - target: $
    description: >-
      The harvested contract declares no servers block. api.usepomo.ai is the host the spec is served
      from and the host every probe in this profile was run against.
    update:
      servers:
        - url: https://api.usepomo.ai
          description: Production (the only host; observed serving /openapi.json, /docs and /redoc)
  - target: $.components.securitySchemes
    description: >-
      The contract declares only HTTPBearer. Live probing shows a second, undeclared credential family
      on the programmatic tier — GET /api/programmatic/v1/hello answers 401 {"detail":"API key required"}
      while bearer-protected paths answer 401 {"detail":"Missing authorization token"} with
      WWW-Authenticate: Bearer. The key is minted at POST /api/programmatic-keys. The transport location
      of the key (header name) is NOT published, so it is recorded as unknown rather than guessed.
    update:
      ProgrammaticApiKey:
        type: apiKey
        in: header
        name: UNPUBLISHED-see-x-api-evangelist-note
        description: >-
          API key for the /api/programmatic/v1 tier, created at POST /api/programmatic-keys with an
          optional scopes array and optional expires_at. Observed only through its 401 behaviour.
        x-api-evangelist-note: >-
          Transport location unverified — Pomo publishes no authentication documentation. Do not treat
          the `name` value above as a real header name.
        x-status: observed-not-declared
  - target: $.components.securitySchemes.HTTPBearer
    description: Record the token issuer established from the provider's own unauthenticated health endpoint.
    update:
      description: >-
        Session bearer token. GET /api/auth/health returns {"clerk_configured":true}, so tokens are
        issued by Clerk; no OpenID Connect discovery document is served
        (/.well-known/openid-configuration is 404 on both hosts).
      bearerFormat: JWT (Clerk-issued)
      x-issuer: Clerk
  - target: $.info
    description: >-
      Runtime signals every response carries but the contract never declares: rate-limit headers, request
      tracing headers, and the undeclared 401/429 failure modes. Recorded at the document level because
      they apply uniformly across all 994 operations.
    update:
      x-runtime-headers:
        rate_limit:
          X-RateLimit-Limit: observed 60
          X-RateLimit-Remaining: remaining requests in the current window
          X-RateLimit-Reset: unix epoch seconds
          note: >-
            Returned on every response including 401 and 404. Window length is not published, 429 is not
            declared on any operation, and no Retry-After is sent. See rate-limits/pomo-rate-limits.yml.
        tracing:
          X-Request-ID: per-request UUID
          X-Trace-ID: same UUID as X-Request-ID on every response observed
      x-undeclared-responses:
        '401':
          description: >-
            Missing or invalid credentials. {"detail":"Missing authorization token"} with
            WWW-Authenticate: Bearer on the application surface; {"detail":"API key required"} on
            /api/programmatic/v1. Declared on zero of 994 operations.
        '429':
          description: >-
            Rate limit exhaustion. Implied by the X-RateLimit-* headers; declared nowhere and not
            observed (probing to exhaustion was not attempted).
      x-error-envelope:
        handled: '{"detail": "<message>"}'
        validation: '{"detail": [{"loc": [...], "msg": "...", "type": "..."}]}'
        rfc9457: false
  - target: $.info
    description: >-
      Flag the streaming operations. Twelve operations return Server-Sent Events but none declares
      text/event-stream in the contract, so a generated client will treat them as ordinary JSON GETs.
    update:
      x-streaming-operations:
        transport: Server-Sent Events over Redis pub/sub
        resume_header: Last-Event-ID
        content_type_declared_in_contract: false
        catalog: asyncapi/pomo-event-surface.yml