openapi: 3.1.0
info:
  title: OneHazel API
  version: 2.0.0
  summary: Every public operator, platform partner and supplier endpoint of the OneHazel platform.
  description: 'Generated from the route inventory of the OneHazel Edge Functions. Every path is relative to `https://api.onehazel.com`; the first path segment is the function that serves it. Responses use a `{ "success": true, "data": ... }` envelope unless an operation says otherwise; errors use `{ "success": false, "error": { "code", "message" } }`.'
  contact:
    name: OneHazel Support
    url: https://onehazel.com
  license:
    name: Proprietary
    identifier: LicenseRef-OneHazel-Proprietary
servers:
  - url: https://api.onehazel.com
    description: Production
tags:
  - name: Health and discovery
    description: Liveness checks and machine-readable descriptions of the API.
  - name: Account
    description: The calling operator account, its settings and its usage.
  - name: Team
    description: Members and invitations for a multi-user operator account.
  - name: API keys
    description: Create, list, rename and revoke operator API keys.
  - name: Onboarding
    description: Guided setup state and the casino connection marker.
  - name: Connectors
    description: The connector catalogue, connector versions, private builds and subscriptions.
  - name: Connections
    description: Credentialed instances of a connector owned by an operator.
  - name: Gateway
    description: Execute connector operations through the OneHazel gateway.
  - name: Webhooks
    description: Outbound webhook subscriptions, deliveries and replay, plus inbound workflow webhooks.
  - name: Events
    description: The operator event stream.
  - name: Workflows
    description: Build, version, run and approve workflows.
  - name: Jobs
    description: Background jobs and their status.
  - name: AI integration
    description: Requests that ask OneHazel to integrate an API on your behalf, and the assistant that answers their questions.
  - name: AI
    description: AI completions used by OneHazel features, billed to the calling operator.
  - name: MCP
    description: The Model Context Protocol server, its prompts and its activity log.
  - name: Billing
    description: Checkout and the billing portal.
  - name: Feature requests
    description: Submit and vote on feature requests.
  - name: Data ingestion
    description: Push entities, events and states into OneHazel.
  - name: Analytics
    description: Read KPIs and per-entity analytics, and ask questions of your data.
  - name: Affiliate tag
    description: Endpoints called by the browser affiliate tag.
  - name: Platform partners
    description: Manage operators, catalogue visibility and metrics as a platform partner.
  - name: Suppliers
    description: Manage your connectors, adoption and promotions as a supplier.
paths:
  /ai-proxy:
    post:
      operationId: postAiProxy
      summary: Create an AI completion
      description: Returns an OpenAI-compatible chat completion. Usage counts toward the operator AI allowance.
      tags:
        - AI
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /ai-proxy/health:
    get:
      operationId: getAiProxyHealth
      summary: Check AI service health
      tags:
        - AI
      security: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/compliance/kyc:
    get:
      operationId: getAnalyticsApiAnalyticsComplianceKyc
      summary: Get KYC compliance summary
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/entities/{externalId}:
    get:
      operationId: getAnalyticsApiAnalyticsEntitiesByExternalId
      summary: Get an entity
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/entities/{externalId}/events:
    get:
      operationId: getAnalyticsApiAnalyticsEntitiesByExternalIdEvents
      summary: List events for an entity
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/entities/{externalId}/state/{key}:
    get:
      operationId: getAnalyticsApiAnalyticsEntitiesByExternalIdStateByKey
      summary: Get one state of an entity
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/games:
    get:
      operationId: getAnalyticsApiAnalyticsGames
      summary: Get game performance
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/kpis:
    get:
      operationId: getAnalyticsApiAnalyticsKpis
      summary: Get KPIs
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/players:
    get:
      operationId: getAnalyticsApiAnalyticsPlayers
      summary: List players
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      parameters:
        - name: entity_type
          in: query
          required: true
          description: Entity type to list.
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/players/{playerId}:
    get:
      operationId: getAnalyticsApiAnalyticsPlayersByPlayerId
      summary: Get a player
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      parameters:
        - name: playerId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/providers:
    get:
      operationId: getAnalyticsApiAnalyticsProviders
      summary: Get provider statistics
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/refresh:
    post:
      operationId: postAnalyticsApiAnalyticsRefresh
      summary: Refresh analytics views
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-api/analytics/revenue:
    get:
      operationId: getAnalyticsApiAnalyticsRevenue
      summary: Get revenue
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /analytics-copilot/copilot/chat:
    post:
      operationId: postAnalyticsCopilotCopilotChat
      summary: Ask a question about your data (switched off)
      description: Switched off. Every request returns `410` with code `COPILOT_DISABLED`. This endpoint is being removed.
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
      deprecated: true
  /analytics-copilot/copilot/insights:
    get:
      operationId: getAnalyticsCopilotCopilotInsights
      summary: Get suggested insights (switched off)
      description: Switched off. Every request returns `410` with code `COPILOT_DISABLED`. This endpoint is being removed.
      tags:
        - Analytics
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
      deprecated: true
  /api-keys:
    delete:
      operationId: revokeApiKeyStandalone
      summary: Revoke an API key
      description: The last active key cannot be revoked.
      tags:
        - API keys
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: id
          in: query
          required: true
          description: The API key id.
          schema:
            type: string
        - name: hard
          in: query
          required: false
          description: Delete instead of revoke.
          schema:
            type: boolean
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    get:
      operationId: listApiKeysStandalone
      summary: List API keys
      tags:
        - API keys
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    patch:
      operationId: renameApiKeyStandalone
      summary: Rename an API key
      description: The key id is sent in the body as `id`.
      tags:
        - API keys
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: createApiKeyStandalone
      summary: Create an API key (standalone)
      description: The plaintext key is returned once, in this response only.
      tags:
        - API keys
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /gateway:
    post:
      operationId: callConnectorOperation
      summary: Call a connector operation (standalone gateway)
      description: Resolves the operation against the connector specification, injects the connection credentials and proxies the call.
      tags:
        - Gateway
      security:
        - OperatorApiKey: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /integration-concierge:
    post:
      operationId: postIntegrationConcierge
      summary: Ask the integration assistant
      description: Helps answer one open question on an integration request.
      tags:
        - AI integration
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /mcp-server:
    post:
      operationId: postMcpServer
      summary: Send an MCP JSON-RPC request
      description: The canonical MCP endpoint. The operator is taken from the API key.
      tags:
        - MCP
      security:
        - OperatorApiKey: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /mcp-server/{operatorId}:
    post:
      operationId: postMcpServerByOperatorId
      summary: Send an MCP JSON-RPC request (per-operator URL)
      description: Legacy form. The operator id in the path must match the API key.
      tags:
        - MCP
      security:
        - OperatorApiKey: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
      deprecated: true
  /mcp-server/{operatorId}/events:
    get:
      operationId: getMcpServerByOperatorIdEvents
      summary: Open the MCP event stream (per-operator URL)
      tags:
        - MCP
      security:
        - OperatorApiKey: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
        - name: session
          in: query
          required: true
          description: Session id, matched against the `Mcp-Session-Id` header on requests.
          schema:
            type: string
      responses:
        "200":
          description: Server-sent event stream.
          content:
            text/event-stream:
              schema:
                type: string
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
      deprecated: true
  /mcp-server/events:
    get:
      operationId: getMcpServerEvents
      summary: Open the MCP event stream
      tags:
        - MCP
      security:
        - OperatorApiKey: []
      parameters:
        - name: session
          in: query
          required: true
          description: Session id, matched against the `Mcp-Session-Id` header on requests.
          schema:
            type: string
      responses:
        "200":
          description: Server-sent event stream.
          content:
            text/event-stream:
              schema:
                type: string
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/api-keys:
    post:
      operationId: postApiKeys
      summary: Create an API key
      description: The plaintext key is returned once, in this response only.
      tags:
        - API keys
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/approvals/{token}:
    get:
      operationId: getApprovalsByToken
      summary: Open an approval link
      description: The page behind an emailed approval link. Authorised by the token in the path.
      tags:
        - Workflows
      security: []
      parameters:
        - name: token
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: HTML page.
          content:
            text/html:
              schema:
                type: string
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postApprovalsByToken
      summary: Submit a decision from an approval link
      tags:
        - Workflows
      security: []
      parameters:
        - name: token
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connections:
    get:
      operationId: getConnections
      summary: List connections
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postConnections
      summary: Create a connection
      description: Credentials are encrypted at rest. Identical credentials for the same connector are rejected unless `upsert=true`.
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: upsert
          in: query
          required: false
          description: Update the existing identical connection instead of returning 409.
          schema:
            type: boolean
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connections/{connectionId}:
    delete:
      operationId: deleteConnectionsByConnectionId
      summary: Delete a connection
      description: Rejected with 409 while an active workflow uses the connection.
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    get:
      operationId: getConnectionsByConnectionId
      summary: Get a connection
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    patch:
      operationId: patchConnectionsByConnectionId
      summary: Update a connection
      description: Fields in `config` are merged into the stored configuration. List keys to remove in `config_delete`. Changing `auth_method` together with new config replaces the configuration.
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connections/{connectionId}/clone:
    post:
      operationId: postConnectionsByConnectionIdClone
      summary: Clone a connection
      description: The clone starts inactive.
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connections/{connectionId}/config-keys:
    get:
      operationId: getConnectionsByConnectionIdConfigKeys
      summary: List stored configuration keys
      description: Returns key names only, never values.
      tags:
        - Connections
      security:
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connections/{connectionId}/credentials:
    put:
      operationId: putConnectionsByConnectionIdCredentials
      summary: Rotate connection credentials
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connections/{connectionId}/pin:
    delete:
      operationId: deleteConnectionsByConnectionIdPin
      summary: Unpin a connection
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    patch:
      operationId: patchConnectionsByConnectionIdPin
      summary: Pin a connection to a connector version
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connections/{connectionId}/restore:
    post:
      operationId: postConnectionsByConnectionIdRestore
      summary: Restore a deleted connection
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connections/trash:
    get:
      operationId: getConnectionsTrash
      summary: List deleted connections that can be restored
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connectors:
    get:
      operationId: getConnectors
      summary: List connectors
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: trust
          in: query
          required: false
          description: Comma-separated trust tiers to filter by.
          schema:
            type: string
        - name: outcomes
          in: query
          required: false
          description: Comma-separated outcome slugs to filter by.
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connectors/{connectorId}:
    get:
      operationId: getConnectorsByConnectorId
      summary: Get a connector
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectorId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connectors/{connectorKey}/versions:
    get:
      operationId: getConnectorsByConnectorKeyVersions
      summary: List versions of a connector
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectorKey
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connectors/{connectorKey}/versions/{versionId}:
    get:
      operationId: getConnectorsByConnectorKeyVersionsByVersionId
      summary: Get a connector version
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectorKey
          in: path
          required: true
          schema:
            type: string
        - name: versionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/connectors/build:
    post:
      operationId: postConnectorsBuild
      summary: Build a private connector
      description: Queues a build from an API documentation or specification URL. When a close match already exists the response asks you to confirm reuse or force a new build.
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/events:
    get:
      operationId: getEvents
      summary: List events
      tags:
        - Events
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/feature-flags:
    get:
      operationId: getFeatureFlags
      summary: List feature flags
      description: Site, page and feature flags the client uses to show maintenance banners and gate features.
      tags:
        - Health and discovery
      security:
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/gateway/batch:
    post:
      operationId: postGatewayBatch
      summary: Execute a batch of connector operations
      tags:
        - Gateway
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/gateway/execute:
    post:
      operationId: postGatewayExecute
      summary: Execute a connector operation
      tags:
        - Gateway
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/gateway/test:
    post:
      operationId: postGatewayTest
      summary: Test a connector operation
      tags:
        - Gateway
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/health:
    get:
      operationId: getHealth
      summary: Check API health
      tags:
        - Health and discovery
      security: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/invites/accept:
    post:
      operationId: postInvitesAccept
      summary: Accept an invitation
      description: Creates the invited member login. Authorised by the invitation token in the body.
      tags:
        - Team
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/invites/lookup:
    get:
      operationId: getInvitesLookup
      summary: Look up an invitation by token
      tags:
        - Team
      security: []
      parameters:
        - name: token
          in: query
          required: true
          description: The invitation token from the invite email.
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/jobs:
    get:
      operationId: getJobs
      summary: List jobs
      tags:
        - Jobs
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postJobs
      summary: Create a job
      tags:
        - Jobs
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/jobs/{jobId}:
    get:
      operationId: getJobsByJobId
      summary: Get a job
      tags:
        - Jobs
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/logs/{connectionId}:
    get:
      operationId: getLogsByConnectionId
      summary: List gateway logs for a connection
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: connectionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/monitoring/metrics:
    get:
      operationId: getMonitoringMetrics
      summary: Get monitoring metrics
      tags:
        - Jobs
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/openapi.json:
    get:
      operationId: getOpenapiJson
      summary: Redirect to the OpenAPI document (JSON)
      tags:
        - Health and discovery
      security: []
      responses:
        "302":
          description: Redirect to the published document.
          headers:
            Location:
              schema:
                type: string
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/openapi.yaml:
    get:
      operationId: getOpenapiYaml
      summary: Redirect to the OpenAPI document
      tags:
        - Health and discovery
      security: []
      responses:
        "302":
          description: Redirect to the published document.
          headers:
            Location:
              schema:
                type: string
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me:
    delete:
      operationId: deleteOperatorsMe
      summary: Delete the calling operator account
      description: Erases the operator account and its data (right to erasure).
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    get:
      operationId: getOperatorsMe
      summary: Get the calling operator profile
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/ai-usage:
    get:
      operationId: getOperatorsMeAiUsage
      summary: Get AI usage
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: days
          in: query
          required: false
          description: Look-back window in days.
          schema:
            type: integer
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/approvals:
    get:
      operationId: getOperatorsMeApprovals
      summary: List pending approvals
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/approvals/{waitId}:
    get:
      operationId: getOperatorsMeApprovalsByWaitId
      summary: Get an approval request
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: waitId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/audit-log:
    get:
      operationId: getOperatorsMeAuditLog
      summary: List audit log entries
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/billing/checkout:
    post:
      operationId: postOperatorsMeBillingCheckout
      summary: Start a checkout session
      tags:
        - Billing
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/billing/portal:
    post:
      operationId: postOperatorsMeBillingPortal
      summary: Open the billing portal
      tags:
        - Billing
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/build-history:
    get:
      operationId: getOperatorsMeBuildHistory
      summary: List connector build history
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/casino-connection:
    delete:
      operationId: deleteOperatorsMeCasinoConnection
      summary: Clear the casino connection marker
      description: Clears the connected marker only. Keys and data are kept.
      tags:
        - Onboarding
      security:
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    get:
      operationId: getOperatorsMeCasinoConnection
      summary: Get casino connection status
      tags:
        - Onboarding
      security:
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postOperatorsMeCasinoConnection
      summary: Mark the casino as connected
      tags:
        - Onboarding
      security:
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/conformance:
    post:
      operationId: postOperatorsMeConnectConformance
      summary: Run conformance for a connect module
      description: 'Queues a conformance run against the endpoint registered for one module (wallet, player, webhook.receive or payments.intent). Body: `{ "module": "wallet" }`. Returns the run id; read the verdict and per-scenario evidence from GET /operators/me/connect/conformance/{runId}. At most 10 runs per operator per hour. A module with no registered endpoint returns CONNECT_MODULE_NOT_REGISTERED.'
      tags:
        - Onboarding
      security:
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/conformance/{runId}:
    get:
      operationId: getOperatorsMeConnectConformanceByRunId
      summary: Get a conformance run
      description: Status, verdict and per-scenario request and response evidence for one of your conformance runs, with secrets masked. A run that has not finished reports its verdict as not yet verified.
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: runId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/endpoints:
    post:
      operationId: postOperatorsMeConnectEndpoints
      summary: Register a connect module endpoint
      description: "Registers the public https base URL OneHazel calls for one Operator Contract v1 module (wallet, player, webhook.receive or payments.intent). A first registration returns the signing secret and the callback key; both are shown once. Registering a module that already exists keeps its signing secret and callback key: only the base URLs, `testPlayerId`, `restrictedPlayerId` and `testGame` change, the response carries `secretUnchanged: true` and no `secret`, and the audit log records `connect.endpoint.updated`. So an address or test-game fix needs no adapter restart; rotation is `POST .../endpoints/{module}/rotate`. A `callbackKey` that differs from the stored one replaces it and keeps the previous key valid for one hour (`callbackKeyRotated`, `previousCallbackKeyValidUntil` and `notice` in the response); it never mints a signing secret. For `player`, also send `testPlayerId` and `restrictedPlayerId` (a test player with an active restriction, at most 128 characters); a player conformance run cannot reach a verdict without both, and registering again without them clears them. For `wallet`, also send `testPlayerId` and `testGame: { provider_slug, game_code }`, one active game in your own catalogue that may be used for test rounds, as your PAM knows it; conformance and connect_simulate start every test session with it, and a wallet registration without it is refused with 400 VALIDATION_ERROR."
      tags:
        - Onboarding
      security:
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/endpoints/{module}:
    delete:
      operationId: deleteOperatorsMeConnectEndpointsByModule
      summary: Unregister a connect module endpoint
      description: Removes the registered base URL, signing secret and callback key for one module (wallet, player, webhook.receive or payments.intent). Conformance run history is kept and the module reads not_started until it is registered again. Refused with 409 CONNECT_MODULE_IN_USE while an active connection requires the module; nothing is removed.
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: module
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/endpoints/{module}/rotate:
    post:
      operationId: postOperatorsMeConnectEndpointsByModuleRotate
      summary: Rotate a connect module signing secret and callback key
      description: 'Rotates the signing secret, the callback key, or both for a registered module. Optional JSON body `{ "what": "signing_secret" | "callback_key" | "both" }`, default `both` (an empty body means both). Each new value is shown once, with a `save_as` block naming the adapter and sample environment variables to write it to. The previous value of each rotated one stays accepted for one hour: OneHazel retries a call your endpoint refuses with 401 once with the previous values, so you can update the adapter after the call. A rotated callback key is minted by OneHazel; to use your own, register again with `callbackKey`. An unknown `what` answers 400 VALIDATION_ERROR and changes nothing.'
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: module
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/marketplace:
    get:
      operationId: getOperatorsMeConnectMarketplace
      summary: List marketplace connectors with missing modules
      description: Public marketplace connectors, each with the Operator Contract v1 modules it requires and which of those this operator has not yet made conformant. requirements_unknown is true when a connector has not declared its modules; that is not the same as ready.
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: category
          in: query
          required: false
          description: Only connectors in this category.
          schema:
            type: string
        - name: outcome
          in: query
          required: false
          description: Only connectors tagged with this outcome slug.
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/marketplace/{key}/activate:
    post:
      operationId: postOperatorsMeConnectMarketplaceByKeyActivate
      summary: Activate a marketplace connector (inactive)
      description: Creates an inactive connection for the connector when every required module is conformant, through the same path as creating a connection in the app. When modules are missing nothing is created and the list is returned. Calling it again returns the existing connection. Going live stays a separate click in the app.
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/marketplace/{key}/credentials:
    put:
      operationId: putOperatorsMeConnectMarketplaceByKeyCredentials
      summary: Set vendor credentials on an inactive connection
      description: "Sets the vendor credential fields of a marketplace connector on your inactive connection for it (create it first with the activate route). Body: `{ \"credentials\": { \"<field>\": \"<value>\" }, \"partial\": false }`. Field names are the `vendorCredentials` of the requirements route; an unknown name answers 400 with the allowed names, and every required field must be present after the write unless `partial` is true. Values are stored encrypted and never returned: the response lists the field names set, the required names still missing and the connection status. An active connection answers 409; change a live connector's credentials on its connection page in the app."
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/marketplace/{key}/request-go-live:
    post:
      operationId: postOperatorsMeConnectMarketplaceByKeyRequestGoLive
      summary: Request a go-live review for a connector
      description: Notifies the operator team about an activated connector and returns the review URL. The response carries `ready` and `missing`. `missing` lists each required module that is not conformant and each vendor credential the connection does not hold yet, as `credential:<field>`. When anything is missing it still notifies, but `ready` is false and the notification says the connection needs values. It never changes a connection status.
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/marketplace/{key}/requirements:
    get:
      operationId: getOperatorsMeConnectMarketplaceByKeyRequirements
      summary: Get what activating a connector needs
      description: "Missing modules, widget snippets and the credential fields the operator must obtain from the vendor for one marketplace connector. `requiredInputs` lists, per missing module, the endpoint registration fields still unset (wallet: `testGame`; player: `testPlayerId`, `restrictedPlayerId`)."
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/simulate:
    post:
      operationId: postOperatorsMeConnectSimulate
      summary: Simulate a round against your wallet endpoint
      description: 'OneHazel plays a game studio through one round against your registered wallet endpoint, signed and sent with `X-OneHazel-Env: test` to your test player. Body: `{ "scenario": "round" | "rollback" | "freeround" }`. Returns each step with its HTTP status and the balance after it, plus an overall `ok`. Simulated money is never billed. At most 10 runs per operator per hour. Returns `CONNECT_MODULE_NOT_REGISTERED` (409) when no wallet endpoint with a test player is registered.'
      tags:
        - Onboarding
      security:
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connect/status:
    get:
      operationId: getOperatorsMeConnectStatus
      summary: Get Operator Contract v1 module status
      description: Per-module state for the Integrate with AI door, plus inactive connections ready for go-live review, and a journey block (goal, current_stage, next_step, remaining_steps, blocked_on) computed from current state alone. The same implementation serves the connect_status MCP tool.
      tags:
        - Onboarding
      security:
        - SessionToken: []
      parameters:
        - name: key
          in: query
          required: false
          description: Optional marketplace connector key; the journey then plans to that connector going live.
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/connectors/{blueprintId}/dump:
    get:
      operationId: getOperatorsMeConnectorsByBlueprintIdDump
      summary: Export a connector artefact
      description: Returns the connector definition and its active version, for connectors you own, subscribe to, or that are public.
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: blueprintId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/export:
    get:
      operationId: getOperatorsMeExport
      summary: Export the calling operator data
      description: Returns a portable export of the operator account data (right of access).
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/integration-requests:
    get:
      operationId: getOperatorsMeIntegrationRequests
      summary: List integration requests
      tags:
        - AI integration
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postOperatorsMeIntegrationRequests
      summary: Create an integration request
      tags:
        - AI integration
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/integration-requests/{requestId}:
    get:
      operationId: getOperatorsMeIntegrationRequestsByRequestId
      summary: Get an integration request
      tags:
        - AI integration
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: requestId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/integration-requests/{requestId}/approve:
    post:
      operationId: postOperatorsMeIntegrationRequestsByRequestIdApprove
      summary: Approve an integration and go live
      tags:
        - AI integration
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: requestId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/integration-requests/{requestId}/cancel:
    post:
      operationId: postOperatorsMeIntegrationRequestsByRequestIdCancel
      summary: Cancel an integration request
      tags:
        - AI integration
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: requestId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/integration-requests/{requestId}/questions/{questionId}/answer:
    post:
      operationId: postOperatorsMeIntegrationRequestsByRequestIdQuestionsByQuestionIdAnswer
      summary: Answer a question on an integration request
      tags:
        - AI integration
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: requestId
          in: path
          required: true
          schema:
            type: string
        - name: questionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/integration-requests/{requestId}/request-changes:
    post:
      operationId: postOperatorsMeIntegrationRequestsByRequestIdRequestChanges
      summary: Request changes to an integration
      tags:
        - AI integration
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: requestId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/invites:
    get:
      operationId: getOperatorsMeInvites
      summary: List pending invitations
      tags:
        - Team
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postOperatorsMeInvites
      summary: Invite a team member
      tags:
        - Team
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/invites/{inviteId}:
    delete:
      operationId: deleteOperatorsMeInvitesByInviteId
      summary: Revoke an invitation
      tags:
        - Team
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: inviteId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/invites/{inviteId}/resend:
    post:
      operationId: postOperatorsMeInvitesByInviteIdResend
      summary: Resend an invitation
      tags:
        - Team
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: inviteId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/mcp-activity:
    get:
      operationId: getOperatorsMeMcpActivity
      summary: List MCP activity
      tags:
        - MCP
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/mcp-prompts:
    get:
      operationId: getOperatorsMeMcpPrompts
      summary: List MCP prompts
      tags:
        - MCP
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postOperatorsMeMcpPrompts
      summary: Create an MCP prompt
      tags:
        - MCP
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/mcp-prompts/{promptId}:
    delete:
      operationId: deleteOperatorsMeMcpPromptsByPromptId
      summary: Delete an MCP prompt
      tags:
        - MCP
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: promptId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putOperatorsMeMcpPromptsByPromptId
      summary: Update an MCP prompt
      tags:
        - MCP
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: promptId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/members:
    get:
      operationId: getOperatorsMeMembers
      summary: List team members
      tags:
        - Team
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/members/{memberId}:
    delete:
      operationId: deleteOperatorsMeMembersByMemberId
      summary: Remove a team member
      tags:
        - Team
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: memberId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    patch:
      operationId: patchOperatorsMeMembersByMemberId
      summary: Update a team member
      description: Change a member role or status.
      tags:
        - Team
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: memberId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/onboarding:
    get:
      operationId: getOperatorsMeOnboarding
      summary: Get onboarding state
      tags:
        - Onboarding
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putOperatorsMeOnboarding
      summary: Update onboarding state
      tags:
        - Onboarding
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/onboarding/verify:
    post:
      operationId: postOperatorsMeOnboardingVerify
      summary: Run onboarding verification checks
      tags:
        - Onboarding
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/picker-favorites:
    get:
      operationId: getOperatorsMePickerFavorites
      summary: List picker favourites
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postOperatorsMePickerFavorites
      summary: Save picker favourites
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/quota:
    get:
      operationId: getOperatorsMeQuota
      summary: Get quota limits and consumption
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/settings/analytics:
    get:
      operationId: getOperatorsMeSettingsAnalytics
      summary: Get analytics settings
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putOperatorsMeSettingsAnalytics
      summary: Update analytics settings
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/settings/analytics/wipe:
    post:
      operationId: postOperatorsMeSettingsAnalyticsWipe
      summary: Wipe analytics data
      description: Deletes the analytics data held for the calling operator. Ingestion is not affected.
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/settings/notifications:
    get:
      operationId: getOperatorsMeSettingsNotifications
      summary: Get notification preferences
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putOperatorsMeSettingsNotifications
      summary: Update notification preferences
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/settings/template:
    get:
      operationId: getOperatorsMeSettingsTemplate
      summary: Get the data template
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putOperatorsMeSettingsTemplate
      summary: Set the data template (once, when unset)
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/subscriptions:
    get:
      operationId: getOperatorsMeSubscriptions
      summary: List connector subscriptions
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postOperatorsMeSubscriptions
      summary: Subscribe to a connector
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/subscriptions/{subscriptionId}:
    delete:
      operationId: deleteOperatorsMeSubscriptionsBySubscriptionId
      summary: Unsubscribe from a connector
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: subscriptionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/subscriptions/{subscriptionId}/rebuild:
    post:
      operationId: postOperatorsMeSubscriptionsBySubscriptionIdRebuild
      summary: Rebuild a subscribed connector
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: subscriptionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/subscriptions/{subscriptionId}/request-update:
    post:
      operationId: postOperatorsMeSubscriptionsBySubscriptionIdRequestUpdate
      summary: Request an update to a subscribed connector
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: subscriptionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/subscriptions/{subscriptionId}/restore:
    post:
      operationId: postOperatorsMeSubscriptionsBySubscriptionIdRestore
      summary: Restore a removed subscription
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: subscriptionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/subscriptions/{subscriptionId}/upgrade:
    post:
      operationId: postOperatorsMeSubscriptionsBySubscriptionIdUpgrade
      summary: Upgrade a subscription to the latest version
      tags:
        - Connectors
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: subscriptionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/usage:
    get:
      operationId: getOperatorsMeUsage
      summary: Get usage for the current period
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/operators/me/usage-banner-dismissals:
    get:
      operationId: getOperatorsMeUsageBannerDismissals
      summary: List dismissed usage banners
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postOperatorsMeUsageBannerDismissals
      summary: Dismiss a usage banner
      tags:
        - Account
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/public/connectors:
    get:
      operationId: getPublicConnectors
      summary: List public catalogue connectors
      description: Unauthenticated list of the public connector catalogue (key, name, category, domain). Rate limited per client IP.
      tags:
        - Health and discovery
      security: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/resources/{resourceType}/{resourceId}/dependencies:
    get:
      operationId: getResourcesByResourceTypeByResourceIdDependencies
      summary: List what depends on a resource
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: resourceType
          in: path
          required: true
          schema:
            type: string
        - name: resourceId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/roadmap:
    get:
      operationId: getRoadmap
      summary: List feature requests
      tags:
        - Feature requests
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postRoadmap
      summary: Submit a feature request
      tags:
        - Feature requests
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/roadmap/{requestId}/vote:
    post:
      operationId: postRoadmapByRequestIdVote
      summary: Vote for a feature request
      tags:
        - Feature requests
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: requestId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/users/me:
    get:
      operationId: getUsersMe
      summary: Get the signed-in user profile
      tags:
        - Account
      security:
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/users/register:
    post:
      operationId: postUsersRegister
      summary: Complete registration for the signed-in user
      description: Creates the operator account and profile for a newly verified user.
      tags:
        - Account
      security:
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/webhooks:
    get:
      operationId: getWebhooks
      summary: List webhook subscriptions
      tags:
        - Webhooks
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postWebhooks
      summary: Create a webhook subscription
      tags:
        - Webhooks
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/webhooks/{webhookId}:
    delete:
      operationId: deleteWebhooksByWebhookId
      summary: Delete a webhook subscription
      tags:
        - Webhooks
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: webhookId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    patch:
      operationId: patchWebhooksByWebhookId
      summary: Update a webhook subscription
      description: Includes the per-subscription retry policy.
      tags:
        - Webhooks
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: webhookId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/webhooks/{webhookId}/deliveries:
    get:
      operationId: getWebhooksByWebhookIdDeliveries
      summary: List webhook deliveries
      tags:
        - Webhooks
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: webhookId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/webhooks/{webhookId}/replay:
    post:
      operationId: postWebhooksByWebhookIdReplay
      summary: Replay webhook deliveries
      tags:
        - Webhooks
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: webhookId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflow-templates:
    get:
      operationId: getWorkflowTemplates
      summary: List workflow templates
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows:
    get:
      operationId: getWorkflows
      summary: List workflows
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postWorkflows
      summary: Create a workflow
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows/{workflowId}:
    delete:
      operationId: deleteWorkflowsByWorkflowId
      summary: Delete a workflow
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    get:
      operationId: getWorkflowsByWorkflowId
      summary: Get a workflow
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putWorkflowsByWorkflowId
      summary: Update a workflow
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows/{workflowId}/clone:
    post:
      operationId: postWorkflowsByWorkflowIdClone
      summary: Clone a workflow
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows/{workflowId}/executions:
    get:
      operationId: getWorkflowsByWorkflowIdExecutions
      summary: List workflow executions
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows/{workflowId}/executions/{executionId}/resume:
    post:
      operationId: postWorkflowsByWorkflowIdExecutionsByExecutionIdResume
      summary: Resume a paused execution
      description: Approves or rejects a workflow waiting for a decision.
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
        - name: executionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows/{workflowId}/executions/{executionId}/steps:
    get:
      operationId: getWorkflowsByWorkflowIdExecutionsByExecutionIdSteps
      summary: List the steps of an execution
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
        - name: executionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows/{workflowId}/versions:
    get:
      operationId: getWorkflowsByWorkflowIdVersions
      summary: List workflow versions
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows/{workflowId}/versions/{versionId}:
    get:
      operationId: getWorkflowsByWorkflowIdVersionsByVersionId
      summary: Get a workflow version
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: workflowId
          in: path
          required: true
          schema:
            type: string
        - name: versionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /onehazel-api/workflows/check-mcp-tool-name:
    get:
      operationId: getWorkflowsCheckMcpToolName
      summary: Check an MCP tool name is available
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      parameters:
        - name: name
          in: query
          required: true
          description: Proposed tool name.
          schema:
            type: string
        - name: exclude
          in: query
          required: false
          description: Workflow id to ignore, so a workflow can keep its own name.
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/batch/entities:
    post:
      operationId: postOperatorDataApiBatchEntities
      summary: Upsert entities in bulk
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/batch/events:
    post:
      operationId: postOperatorDataApiBatchEvents
      summary: Record events in bulk
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/batch/jobs/{jobId}:
    get:
      operationId: getOperatorDataApiBatchJobsByJobId
      summary: Get a batch job
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      parameters:
        - name: jobId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/batch/states:
    post:
      operationId: postOperatorDataApiBatchStates
      summary: Set states in bulk
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/entities:
    post:
      operationId: postOperatorDataApiEntities
      summary: Create or update an entity
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/entities/{externalId}:
    delete:
      operationId: deleteOperatorDataApiEntitiesByExternalId
      summary: Delete an entity
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    get:
      operationId: getOperatorDataApiEntitiesByExternalId
      summary: Get an entity
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/entities/{externalId}/events:
    get:
      operationId: getOperatorDataApiEntitiesByExternalIdEvents
      summary: List events for an entity
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postOperatorDataApiEntitiesByExternalIdEvents
      summary: Record an event for an entity
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/entities/{externalId}/state:
    get:
      operationId: getOperatorDataApiEntitiesByExternalIdState
      summary: List states for an entity
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/entities/{externalId}/state/{key}:
    get:
      operationId: getOperatorDataApiEntitiesByExternalIdStateByKey
      summary: Get one state of an entity
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
        - name: key
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putOperatorDataApiEntitiesByExternalIdStateByKey
      summary: Set one state of an entity
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      parameters:
        - name: externalId
          in: path
          required: true
          schema:
            type: string
        - name: key
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/settings:
    get:
      operationId: getOperatorDataApiSettings
      summary: Get ingestion settings
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putOperatorDataApiSettings
      summary: Update ingestion settings
      description: Selects the data template for the operator.
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /operator-data-api/templates:
    get:
      operationId: getOperatorDataApiTemplates
      summary: List data templates
      tags:
        - Data ingestion
      security:
        - OperatorApiKey: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/catalog:
    get:
      operationId: getPlatformApiCatalog
      summary: List the catalogue
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/catalog/visibility:
    get:
      operationId: getPlatformApiCatalogVisibility
      summary: Get catalogue visibility
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putPlatformApiCatalogVisibility
      summary: Update catalogue visibility
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/integration-requests:
    post:
      operationId: postPlatformApiIntegrationRequests
      summary: Create an integration request
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/metrics/connectors:
    get:
      operationId: getPlatformApiMetricsConnectors
      summary: Get metrics per connector
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/metrics/operators:
    get:
      operationId: getPlatformApiMetricsOperators
      summary: Get metrics per operator
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/metrics/summary:
    get:
      operationId: getPlatformApiMetricsSummary
      summary: Get a metrics summary
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/operators:
    get:
      operationId: getPlatformApiOperators
      summary: List your operators
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postPlatformApiOperators
      summary: Create an operator
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/operators/{operatorId}:
    delete:
      operationId: deletePlatformApiOperatorsByOperatorId
      summary: Delete an operator
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    get:
      operationId: getPlatformApiOperatorsByOperatorId
      summary: Get an operator
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putPlatformApiOperatorsByOperatorId
      summary: Update an operator
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/operators/{operatorId}/api-keys:
    get:
      operationId: getPlatformApiOperatorsByOperatorIdApiKeys
      summary: List an operator API keys
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postPlatformApiOperatorsByOperatorIdApiKeys
      summary: Create an API key for an operator
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/operators/{operatorId}/api-keys/{keyId}:
    delete:
      operationId: deletePlatformApiOperatorsByOperatorIdApiKeysByKeyId
      summary: Revoke an operator API key
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
        - name: keyId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/operators/{operatorId}/instantiate-integration:
    post:
      operationId: postPlatformApiOperatorsByOperatorIdInstantiateIntegration
      summary: Install an integration for an operator
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      parameters:
        - name: operatorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/settings:
    get:
      operationId: getPlatformApiSettings
      summary: Get platform settings
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putPlatformApiSettings
      summary: Update platform settings
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /platform-api/usage/report:
    get:
      operationId: getPlatformApiUsageReport
      summary: Get a usage report
      tags:
        - Platform partners
      security:
        - PlatformApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /stripe/checkout-session:
    post:
      operationId: postStripeCheckoutSession
      summary: Create a checkout session
      tags:
        - Billing
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /stripe/portal:
    post:
      operationId: postStripePortal
      summary: Create a billing portal session
      tags:
        - Billing
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/adoption:
    get:
      operationId: getSupplierApiAdoption
      summary: Get adoption across your connectors
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/adoption/{connectorId}:
    get:
      operationId: getSupplierApiAdoptionByConnectorId
      summary: Get adoption for one connector
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      parameters:
        - name: connectorId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/connectors:
    get:
      operationId: getSupplierApiConnectors
      summary: List your connectors
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/connectors/{connectorId}:
    put:
      operationId: putSupplierApiConnectorsByConnectorId
      summary: Update a connector
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      parameters:
        - name: connectorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/connectors/{connectorId}/request-review:
    post:
      operationId: postSupplierApiConnectorsByConnectorIdRequestReview
      summary: Request a review of a connector
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      parameters:
        - name: connectorId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/promotions:
    get:
      operationId: getSupplierApiPromotions
      summary: List promotions
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    post:
      operationId: postSupplierApiPromotions
      summary: Create a promotion
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/promotions/{promotionId}:
    delete:
      operationId: deleteSupplierApiPromotionsByPromotionId
      summary: Delete a promotion
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      parameters:
        - name: promotionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putSupplierApiPromotionsByPromotionId
      summary: Update a promotion
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      parameters:
        - name: promotionId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/promotions/{promotionId}/metrics:
    get:
      operationId: getSupplierApiPromotionsByPromotionIdMetrics
      summary: Get promotion metrics
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      parameters:
        - name: promotionId
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/referrals:
    get:
      operationId: getSupplierApiReferrals
      summary: List referrals
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /supplier-api/settings:
    get:
      operationId: getSupplierApiSettings
      summary: Get supplier settings
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
    put:
      operationId: putSupplierApiSettings
      summary: Update supplier settings
      tags:
        - Suppliers
      security:
        - SupplierApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /test-connection:
    post:
      operationId: postTestConnection
      summary: Test connection credentials
      description: Probes an endpoint that requires authentication and confirms the submitted credentials are accepted.
      tags:
        - Connections
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /track-event/event:
    post:
      operationId: postTrackEventEvent
      summary: Record a landing click (unversioned alias)
      tags:
        - Affiliate tag
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /track-event/v1/event:
    post:
      operationId: postTrackEventV1Event
      summary: Record a landing click
      description: Called by the browser tag when server sync is enabled.
      tags:
        - Affiliate tag
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /track-event/v1/verify:
    get:
      operationId: getTrackEventV1Verify
      summary: Verify the tag installation
      tags:
        - Affiliate tag
      security: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /track-event/verify:
    get:
      operationId: getTrackEventVerify
      summary: Verify the tag installation (unversioned alias)
      tags:
        - Affiliate tag
      security: []
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /webhook-receiver/{webhookId}:
    post:
      operationId: postWebhookReceiverByWebhookId
      summary: Trigger a workflow from an inbound webhook
      description: The address shown on a workflow webhook trigger. Ids start with `wh_`.
      tags:
        - Webhooks
      security: []
      parameters:
        - name: webhookId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /workflow-ai:
    post:
      operationId: postWorkflowAi
      summary: Ask the workflow assistant to edit a graph
      tags:
        - Workflows
      security:
        - OperatorApiKey: []
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
  /workflow-engine:
    post:
      operationId: postWorkflowEngine
      summary: Run a workflow test
      description: Runs a workflow with `mode` set to `test`, optionally against an unsaved graph supplied in the body. Test runs make real API calls.
      tags:
        - Workflows
      security:
        - SessionToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "200":
          $ref: "#/components/responses/Success"
        "401":
          $ref: "#/components/responses/Error"
        "403":
          $ref: "#/components/responses/Error"
        4XX:
          $ref: "#/components/responses/Error"
        5XX:
          $ref: "#/components/responses/Error"
components:
  securitySchemes:
    OperatorApiKey:
      type: http
      scheme: bearer
      bearerFormat: oh_live_*
      description: Operator API key.
    PlatformApiKey:
      type: http
      scheme: bearer
      bearerFormat: oh_platform_*
      description: Platform partner key.
    SupplierApiKey:
      type: http
      scheme: bearer
      bearerFormat: oh_supplier_*
      description: Supplier key.
    SessionToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Signed-in session token from the OneHazel app.
  schemas:
    SuccessEnvelope:
      type: object
      required:
        - success
      properties:
        success:
          const: true
        data: {}
    ErrorEnvelope:
      type: object
      required:
        - success
        - error
      properties:
        success:
          const: false
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
            message:
              type: string
  responses:
    Success:
      description: Success.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/SuccessEnvelope"
    Error:
      description: Error.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorEnvelope"
