Credo AI · OpenAPI Overlay 1.0.0

API Evangelist enhancements — Credo AI Audit Logs & Shadow AI API

5 actions 5 updates update
Generated by API Evangelist Written by API Evangelist tooling for Credo AI's API. It is a proposal applied on top of the contract, not a document Credo AI publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-source-urlx-harvestedx-scope-notex-server-notesx-observed-401x-token-exchangex-conventionsx-artifacts

Targets 5

$.info
$.servers
$.paths[*][*].responses
$.components.securitySchemes.BearerAuth
$

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements — Credo AI Audit Logs & Shadow AI API
  version: 1.0.0
x-provenance:
  generated: '2026-08-11'
  method: generated
  source: openapi/credo-ai-audit-logs-shadow-ai-openapi.json
  extends: openapi/credo-ai-audit-logs-shadow-ai-openapi.json
  note: >-
    Non-destructive enhancement layer over the OpenAPI 3.0.0 document served at
    https://api.credo.ai/openapi. The harvested original is never mutated.
actions:
- target: $.info
  description: Record provenance of the harvest.
  update:
    x-source-url: https://api.credo.ai/openapi
    x-harvested: '2026-08-11'
    x-scope-note: >-
      This document covers only the Audit Logs and Shadow AI slice — 10 paths, 11
      operations. The other 300 operations of the same /api/v2/{tenant} API are
      described in a separate Swagger 2.0 document at
      https://api.credo.ai/swagger.json. Two contracts, one API, no cross-reference
      between them in either document.
- target: $.servers
  description: >-
    Flag which declared servers are actually usable by a third party, without
    removing any (the templated production server is correct as written).
  update:
    x-server-notes:
    - url: https://api.credo.ai/api/v2/{tenant}
      usable: true
      note: 'Production. {tenant} must be issued by support@credo.ai.'
    - url: https://api.credo-qa.com/api/v2/{tenant}
      usable: false
      note: >-
        Credo AI's own QA environment, published in a public contract with a
        preconfigured tenant of 'credoai'. Not a customer sandbox.
    - url: http://localhost:4000/api/v2/{tenant}
      usable: false
      note: Developer loopback left in the published contract.
    - url: '{custom_base_url}/api/v2/{tenant}'
      usable: conditional
      note: Self-hosted / on-premise deployments only.
- target: $.paths[*][*].responses
  description: >-
    The contract declares 403 on every operation but never 401, while the live API
    returns HTTP 401 with body {"errors":[{"code":1000,"title":"Unauthenticated"}]}
    to an unauthenticated caller. Recording the observed response so generated
    clients can type it.
  update:
    x-observed-401:
      status: 401
      content_type: application/json; charset=utf-8
      body: >-
        {"errors":[{"code":1000,"title":"Unauthenticated","detail":"User is not
        authenticated, maybe invalid or expired token."}]}
      observed_at: https://api.credo.ai/api/v2/credoai/industries
      observed_on: '2026-08-11'
- target: $.components.securitySchemes.BearerAuth
  description: Make the token-exchange flow explicit and machine-readable.
  update:
    x-token-exchange:
      operation: POST /auth/exchange
      operationId: CredoAIWeb.Auth.TokenController.exchange
      input: tenant API token + tenant identifier
      output: JWT access token
      note: >-
        The referenced operation is NOT present in this document — the
        description links to an anchor for an Auth tag that this contract does not
        define. A reader of this spec alone cannot obtain a token.
- target: $
  description: Runtime semantics and cross-links to the rest of this profile.
  update:
    x-conventions:
      media_type: application/json
      json_api_hybrid: >-
        POST /shadow_ai/ai_events/bulk accepts EITHER a JSON:API 'data' array or a
        plain 'events' array, while the sibling Swagger contract for the same API
        mandates application/vnd.api+json throughout.
      idempotency:
        supported: false
        note: >-
          /shadow_ai/ai_events/bulk is a bulk ingest endpoint with no idempotency
          key — the operation most likely to be retried is the one least safe to
          retry.
      rate_limits:
        published: false
        headers: none
      request_tracing:
        header: x-request-id
        observed: '2026-08-11'
      errors:
        schema: '#/components/schemas/Error'
        code_ranges:
          '404': not-found
          1000-1999: auth
          2000-2999: validation
          9000-9999: internal
      responses:
        five_xx_declared: 0
    x-artifacts:
      authentication: authentication/credo-ai-authentication.yml
      conventions: conventions/credo-ai-conventions.yml
      errors: errors/credo-ai-problem-types.yml
      lifecycle: lifecycle/credo-ai-lifecycle.yml
      rate_limits: rate-limits/credo-ai-rate-limits.yml