HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/agentcloud/airbyte/docs/reference/api/config.yaml
openapi: 3.0.0
info:
  description: |
    Airbyte Configuration API
    [https://airbyte.io](https://airbyte.io).

    The Configuration API is an internal Airbyte API that is designed for communications between different Airbyte components.
    * Its main purpose is to enable the Airbyte Engineering team to configure the internal state of [Airbyte Cloud](https://airbyte.com/airbyte-cloud)
    * It is also sometimes used by OSS users to configure their own Self-Hosted Airbyte deployment (internal state, etc)

    WARNING
    * Airbyte does NOT have active commitments to support this API long-term.
    * OSS users can utilize the Configuration API, but at their own risk.
    * This API is utilized internally by the Airbyte Engineering team and may be modified in the future if the need arises.
    * Modifications by the Airbyte Engineering team could create breaking changes and OSS users would need to update their code to catch up to any backwards incompatible changes in the API.

    This API is a collection of HTTP RPC-style methods. While it is not a REST API, those familiar with REST should find the conventions of this API recognizable.

    Here are some conventions that this API follows:
    * All endpoints are http POST methods.
    * All endpoints accept data via `application/json` request bodies. The API does not accept any data via query params.
    * The naming convention for endpoints is: localhost:8000/api/{VERSION}/{METHOD_FAMILY}/{METHOD_NAME} e.g. `localhost:8000/api/v1/connections/create`.
    * For all `update` methods, the whole object must be passed in, even the fields that did not change.

    Authentication (OSS):
    * When authenticating to the Configuration API, you must use Basic Authentication by setting the Authentication Header to Basic and base64 encoding the username and password (which are `airbyte` and `password` by default - so base64 encoding `airbyte:password` results in `YWlyYnl0ZTpwYXNzd29yZA==`). So the full header reads `'Authorization': "Basic YWlyYnl0ZTpwYXNzd29yZA=="`

  version: "1.0.0"
  title: Airbyte Configuration API
  contact:
    email: contact@airbyte.io
  license:
    name: MIT
    url: "https://opensource.org/licenses/MIT"
externalDocs:
  description: Find out more about Airbyte
  url: "https://airbyte.io"
servers:
  - url: "http://localhost:8000/api"
tags:
  - name: workspace
    description: Workspace related resources.
  - name: source_definition
    description: SourceDefinition related resources.
  - name: source_definition_specification
    description: SourceDefinition specification related resources.
  - name: source
    description: Source related resources.
  - name: destination_definition
    description: DestinationDefinition related resources.
  - name: destination_definition_specification
    description: DestinationDefinitionSpecification related resources.
  - name: destination
    description: Destination related resources.
  - name: connection
    description: Connection between sources and destinations.
  - name: destination_oauth
    description: Source OAuth related resources to delegate access from user.
  - name: source_oauth
    description: Source OAuth related resources to delegate access from user.
  - name: web_backend
    description: |
      Endpoints for the Airbyte web application. Those APIs should not be called outside the web application implementation and are not
      guaranteeing any backwards compatibility.
  - name: health
    description: Healthchecks
  - name: deployment
    description: Export/Import Airbyte Configuration and Database resources.
  - name: attempt
    description: Interactions with attempt related resources.
  - name: state
    description: Interactions with state related resources.

paths:
  /v1/workspaces/create:
    post:
      tags:
        - workspace
      summary: Creates a workspace
      operationId: createWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceCreate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WorkspaceRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/workspaces/delete:
    post:
      tags:
        - workspace
      summary: Deletes a workspace
      operationId: deleteWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/workspaces/list:
    post:
      tags:
        - workspace
      summary: List all workspaces registered in the current Airbyte deployment
      operationId: listWorkspaces
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WorkspaceReadList"
  /v1/workspaces/get:
    post:
      tags:
        - workspace
      summary: Find workspace by ID
      operationId: getWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WorkspaceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/workspaces/get_by_slug:
    post:
      tags:
        - workspace
      summary: Find workspace by slug
      operationId: getWorkspaceBySlug
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SlugRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WorkspaceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/workspaces/get_by_connection_id:
    post:
      tags:
        - workspace
      summary: Find workspace by connection id
      operationId: getWorkspaceByConnectionId
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WorkspaceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/workspaces/update:
    post:
      tags:
        - workspace
      summary: Update workspace state
      operationId: updateWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WorkspaceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/workspaces/update_name:
    post:
      tags:
        - workspace
      summary: Update workspace name
      operationId: updateWorkspaceName
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceUpdateName"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WorkspaceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/workspaces/tag_feedback_status_as_done:
    post:
      tags:
        - workspace
      summary: Update workspace feedback state
      operationId: updateWorkspaceFeedback
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceGiveFeedback"
        required: true
      responses:
        "204":
          description: The feedback state has been properly updated
        "404":
          $ref: "#/components/responses/NotFoundResponse"
  /v1/notifications/try:
    post:
      tags:
        - notifications
      summary: Try sending a notifications
      operationId: tryNotificationConfig
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Notification"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/NotificationRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"

  /v1/source_definitions/update:
    post:
      tags:
        - source_definition
      summary: Update a sourceDefinition
      operationId: updateSourceDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDefinitionUpdate"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_definitions/list:
    post:
      tags:
        - source_definition
      summary: List all the sourceDefinitions the current Airbyte deployment is configured to use
      operationId: listSourceDefinitions
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionReadList"
  /v1/source_definitions/list_latest:
    post:
      tags:
        - source_definition
      summary: List the latest sourceDefinitions Airbyte supports
      description: Guaranteed to retrieve the latest information on supported sources.
      operationId: listLatestSourceDefinitions
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionReadList"
  /v1/source_definitions/get:
    post:
      tags:
        - source_definition
      summary: Get source
      operationId: getSourceDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDefinitionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_definitions/delete:
    post:
      tags:
        - source_definition
      summary: Delete a source definition
      operationId: deleteSourceDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDefinitionIdRequestBody"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_definitions/list_private:
    post:
      tags:
        - source_definition
      summary:
        List all private, non-custom sourceDefinitions, and for each indicate whether the given workspace has a grant for using the definition. Used
        by admins to view and modify a given workspace's grants.
      operationId: listPrivateSourceDefinitions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PrivateSourceDefinitionReadList"
  /v1/source_definitions/list_for_workspace:
    post:
      tags:
        - source_definition
      summary: List all the sourceDefinitions the given workspace is configured to use
      operationId: listSourceDefinitionsForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionReadList"
  /v1/source_definitions/create_custom:
    post:
      tags:
        - source_definition
      summary: Creates a custom sourceDefinition for the given workspace
      operationId: createCustomSourceDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomSourceDefinitionCreate"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_definitions/get_for_workspace:
    post:
      tags:
        - source_definition
      summary: Get a sourceDefinition that is configured for the given workspace
      operationId: getSourceDefinitionForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDefinitionIdWithWorkspaceId"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_definitions/grant_definition:
    post:
      tags:
        - source_definition
      summary: grant a private, non-custom sourceDefinition to a given workspace
      operationId: grantSourceDefinitionToWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDefinitionIdWithWorkspaceId"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PrivateSourceDefinitionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_definitions/revoke_definition:
    post:
      tags:
        - source_definition
      summary: revoke a grant to a private, non-custom sourceDefinition from a given workspace
      operationId: revokeSourceDefinitionFromWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDefinitionIdWithWorkspaceId"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_definition_specifications/get:
    post:
      tags:
        - source_definition_specification
      summary: Get specification for a SourceDefinition.
      operationId: getSourceDefinitionSpecification
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDefinitionIdWithWorkspaceId"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionSpecificationRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_definition_specifications/get_for_source:
    post:
      tags:
        - source_definition_specification
      summary: Get specification for a source.
      operationId: getSpecificationForSourceId
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionSpecificationRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/declarative_source_definitions/create_manifest:
    post:
      tags:
        - declarative_source_definitions
      summary: Create a declarative manifest to be used by the specified source definition
      operationId: createDeclarativeSourceDefinitionManifest
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DeclarativeSourceDefinitionCreateManifestRequestBody"
        required: true
      responses:
        "201":
          description: Successful operation
        "400":
          description: Definition is not declarative source
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "409":
          description: Version already exists for definition id
  /v1/declarative_source_definitions/update_active_manifest:
    post:
      tags:
        - declarative_source_definitions
      summary: Update the declarative manifest version for a source
      operationId: updateDeclarativeManifestVersion
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateActiveManifestRequestBody"
        required: true
      responses:
        "204":
          description: Successful operation
        "404":
          $ref: "#/components/responses/NotFoundResponse"
  /v1/declarative_source_definitions/list_manifests:
    post:
      tags:
        - declarative_source_definitions
      summary: List all available declarative manifest versions of a declarative source definition
      operationId: listDeclarativeManifests
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ListDeclarativeManifestsRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DeclarativeManifestsReadList"
        "400":
          description: Definition is not declarative source
        "404":
          $ref: "#/components/responses/NotFoundResponse"
  /v1/connector_builder_projects/create:
    post:
      tags:
        - connector_builder_project
      summary: Create new connector builder project
      operationId: createConnectorBuilderProject
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectorBuilderProjectWithWorkspaceId"
        required: true
      responses:
        "201":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectorBuilderProjectIdWithWorkspaceId"
  /v1/connector_builder_projects/publish:
    post:
      tags:
        - connector_builder_project
      summary: Publish a connector to the workspace
      operationId: publishConnectorBuilderProject
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectorBuilderPublishRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDefinitionIdBody"
  /v1/connector_builder_projects/update:
    post:
      tags:
        - connector_builder_project
      summary: Update connector builder project
      operationId: updateConnectorBuilderProject
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExistingConnectorBuilderProjectWithWorkspaceId"
        required: true
      responses:
        "204":
          description: Successful operation
  /v1/connector_builder_projects/delete:
    post:
      tags:
        - connector_builder_project
      summary: Deletes connector builder project
      operationId: deleteConnectorBuilderProject
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectorBuilderProjectIdWithWorkspaceId"
        required: true
      responses:
        "204":
          description: Successful operation
  /v1/connector_builder_projects/list:
    post:
      tags:
        - connector_builder_project
      summary: List connector builder projects for workspace
      operationId: listConnectorBuilderProjects
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectorBuilderProjectReadList"
  /v1/connector_builder_projects/get_with_manifest:
    post:
      tags:
        - connector_builder_project
      summary: Get a connector builder project with draft manifest
      operationId: getConnectorBuilderProject
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectorBuilderProjectIdWithWorkspaceId"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectorBuilderProjectRead"
  /v1/sources/create:
    post:
      tags:
        - source
      summary: Create a source
      operationId: createSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceCreate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/update:
    post:
      tags:
        - source
      summary: Update a source
      operationId: updateSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/partial_update:
    post:
      tags:
        - source
      summary: Partially update a source
      operationId: partialUpdateSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PartialSourceUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/list:
    post:
      tags:
        - source
      summary: List sources for workspace
      description: List sources for workspace. Does not return deleted sources.
      operationId: listSourcesForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceReadList"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/get:
    post:
      tags:
        - source
      summary: Get source
      operationId: getSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/most_recent_source_actor_catalog:
    post:
      tags:
        - source
      summary: Get most recent ActorCatalog for source
      operationId: getMostRecentSourceActorCatalog
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ActorCatalogWithUpdatedAt"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/search:
    post:
      tags:
        - source
      summary: Search sources
      operationId: searchSources
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceSearch"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceReadList"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/clone:
    post:
      tags:
        - source
      summary: Clone source
      operationId: cloneSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceCloneRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/delete:
    post:
      tags:
        - source
      summary: Delete a source
      operationId: deleteSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceIdRequestBody"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/check_connection:
    post:
      tags:
        - source
      summary: Check connection to the source
      operationId: checkConnectionToSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckConnectionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/check_connection_for_update:
    post:
      tags:
        - source
      summary: Check connection for a proposed update to a source
      operationId: checkConnectionToSourceForUpdate
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckConnectionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/discover_schema:
    post:
      tags:
        - source
      summary: Discover the schema catalog of the source
      operationId: discoverSchemaForSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDiscoverSchemaRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDiscoverSchemaRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/apply_schema_changes:
    post:
      tags:
        - source
      summary:
        Auto propagate the change on a catalog to a catalog saved in the DB. It will fetch all the connections linked to
        a source id and apply the provided diff to their catalog.
      operationId: applySchemaChangeForSource
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceAutoPropagateChange"
        required: true
      responses:
        "204":
          description: The schema was properly auto propagate
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/sources/write_discover_catalog_result:
    post:
      tags:
        - source
        - internal
      summary: Should only called from worker, to write result from discover activity back to DB.
      operationId: writeDiscoverCatalogResult
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceDiscoverSchemaWriteRequestBody"
        required: true
      responses:
        "200":
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DiscoverCatalogResult"
  /v1/destination_definitions/update:
    post:
      tags:
        - destination_definition
      summary: Update destinationDefinition
      operationId: updateDestinationDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationDefinitionUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_definitions/list:
    post:
      tags:
        - destination_definition
      summary: List all the destinationDefinitions the current Airbyte deployment is configured to use
      operationId: listDestinationDefinitions
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionReadList"
  /v1/destination_definitions/list_latest:
    post:
      tags:
        - destination_definition
      summary: List the latest destinationDefinitions Airbyte supports
      description: Guaranteed to retrieve the latest information on supported destinations.
      operationId: listLatestDestinationDefinitions
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionReadList"
  /v1/destination_definitions/get:
    post:
      tags:
        - destination_definition
      summary: Get destinationDefinition
      operationId: getDestinationDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationDefinitionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_definitions/delete:
    post:
      tags:
        - destination_definition
      summary: Delete a destination definition
      operationId: deleteDestinationDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationDefinitionIdRequestBody"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_definitions/list_private:
    post:
      tags:
        - destination_definition
      summary:
        List all private, non-custom destinationDefinitions, and for each indicate whether the given workspace has a grant for using the
        definition. Used by admins to view and modify a given workspace's grants.
      operationId: listPrivateDestinationDefinitions
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PrivateDestinationDefinitionReadList"
  /v1/destination_definitions/list_for_workspace:
    post:
      tags:
        - destination_definition
      summary: List all the destinationDefinitions the given workspace is configured to use
      operationId: listDestinationDefinitionsForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionReadList"
  /v1/destination_definitions/create_custom:
    post:
      tags:
        - destination_definition
      summary: Creates a custom destinationDefinition for the given workspace
      operationId: createCustomDestinationDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CustomDestinationDefinitionCreate"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_definitions/get_for_workspace:
    post:
      tags:
        - destination_definition
      summary: Get a destinationDefinition that is configured for the given workspace
      operationId: getDestinationDefinitionForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationDefinitionIdWithWorkspaceId"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_definitions/grant_definition:
    post:
      tags:
        - destination_definition
      summary: grant a private, non-custom destinationDefinition to a given workspace
      operationId: grantDestinationDefinitionToWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationDefinitionIdWithWorkspaceId"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PrivateDestinationDefinitionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_definitions/revoke_definition:
    post:
      tags:
        - destination_definition
      summary: revoke a grant to a private, non-custom destinationDefinition from a given workspace
      operationId: revokeDestinationDefinitionFromWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationDefinitionIdWithWorkspaceId"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_definition_specifications/get:
    post:
      tags:
        - destination_definition_specification
      summary: Get specification for a destinationDefinition
      operationId: getDestinationDefinitionSpecification
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationDefinitionIdWithWorkspaceId"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionSpecificationRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_definition_specifications/get_for_destination:
    post:
      tags:
        - destination_definition_specification
      summary: Get specification for a destination
      operationId: getSpecificationForDestinationId
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationDefinitionSpecificationRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  # DESTINATIONS
  /v1/destinations/create:
    post:
      tags:
        - destination
      summary: Create a destination
      operationId: createDestination
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationCreate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/update:
    post:
      tags:
        - destination
      summary: Update a destination
      operationId: updateDestination
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/partial_update:
    post:
      tags:
        - destination
      summary: Update a destination partially
      operationId: partialUpdateDestination
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/PartialDestinationUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/list:
    post:
      tags:
        - destination
      summary: List configured destinations for a workspace
      operationId: listDestinationsForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationReadList"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/get:
    post:
      tags:
        - destination
      summary: Get configured destination
      operationId: getDestination
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/search:
    post:
      tags:
        - destination
      summary: Search destinations
      operationId: searchDestinations
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationSearch"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationReadList"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/check_connection:
    post:
      tags:
        - destination
      summary: Check connection to the destination
      operationId: checkConnectionToDestination
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckConnectionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/check_connection_for_update:
    post:
      tags:
        - destination
      summary: Check connection for a proposed update to a destination
      operationId: checkConnectionToDestinationForUpdate
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckConnectionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/delete:
    post:
      tags:
        - destination
      summary: Delete the destination
      operationId: deleteDestination
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationIdRequestBody"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destinations/clone:
    post:
      tags:
        - destination
      summary: Clone destination
      operationId: cloneDestination
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationCloneRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/DestinationRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/create:
    post:
      tags:
        - connection
      summary: Create a connection between a source and a destination
      operationId: createConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionCreate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/update:
    post:
      tags:
        - connection
      summary: Update a connection
      description: |
        Apply a patch-style update to a connection. Only fields present on the update request body will be updated.
        Note that if a catalog is present in the request body, the connection's entire catalog will be replaced
        with the catalog from the request. This means that to modify a single stream, the entire new catalog
        containing the updated stream needs to be sent.
      operationId: updateConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/list:
    post:
      tags:
        - connection
      summary: Returns all connections for a workspace.
      description: List connections for workspace. Does not return deleted connections.
      operationId: listConnectionsForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionReadList"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/list_all:
    post:
      tags:
        - connection
      summary: Returns all connections for a workspace, including deleted connections.
      description: List connections for workspace, including deleted connections.
      operationId: listAllConnectionsForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WorkspaceIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionReadList"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/get:
    post:
      tags:
        - connection
      summary: Get a connection
      operationId: getConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/list_by_actor_definition:
    post:
      tags:
        - connection
      summary: List all connections that use the provided actor definition
      operationId: listConnectionsByActorDefinition
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ActorDefinitionRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionReadList"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/state/get:
    post:
      tags:
        - state
      summary: Fetch the current state for a connection.
      operationId: getState
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionState"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/state/create_or_update:
    post:
      tags:
        - state
        - internal
      summary: Create or update the state for a connection.
      operationId: createOrUpdateState
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionStateCreateOrUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionState"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/search:
    post:
      tags:
        - connection
      summary: Search connections
      operationId: searchConnections
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionSearch"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionReadList"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/delete:
    post:
      tags:
        - connection
      summary: Delete a connection
      operationId: deleteConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/sync:
    post:
      tags:
        - connection
      summary: Trigger a manual sync of the connection
      operationId: syncConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobInfoRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/reset:
    post:
      tags:
        - connection
      summary: Reset the data for the connection. Deletes data generated by the connection in the destination. Resets any cursors back to initial state.
      operationId: resetConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobInfoRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/connections/reset/stream:
    post:
      tags:
        - connection
      summary: Reset the data for a specific stream in the connection. Deletes data generated by the stream in the destination. Resets any cursors back to initial state.
      operationId: resetConnectionStream
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionStreamRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobInfoRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/operations/check:
    post:
      tags:
        - operation
      summary: Check if an operation to be created is valid
      operationId: checkOperation
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OperatorConfiguration"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckOperationRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/operations/create:
    post:
      tags:
        - operation
      summary: Create an operation to be applied as part of a connection pipeline
      operationId: createOperation
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OperationCreate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OperationRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/operations/update:
    post:
      tags:
        - operation
      summary: Update an operation
      operationId: updateOperation
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OperationUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OperationRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/operations/list:
    post:
      tags:
        - operation
      summary: Returns all operations for a connection.
      description: List operations for connection.
      operationId: listOperationsForConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OperationReadList"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/operations/get:
    post:
      tags:
        - operation
      summary: Returns an operation
      operationId: getOperation
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OperationIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OperationRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/operations/delete:
    post:
      tags:
        - operation
      summary: Delete an operation
      operationId: deleteOperation
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/OperationIdRequestBody"
        required: true
      responses:
        "204":
          description: The resource was deleted successfully.
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/scheduler/sources/check_connection:
    post:
      tags:
        - scheduler
      summary: Run check connection for a given source configuration
      operationId: executeSourceCheckConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceCoreConfig"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckConnectionRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/scheduler/sources/discover_schema:
    post:
      tags:
        - scheduler
      summary: Run discover schema for a given source a source configuration
      operationId: executeSourceDiscoverSchema
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceCoreConfig"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SourceDiscoverSchemaRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/scheduler/destinations/check_connection:
    post:
      tags:
        - scheduler
      summary: Run check connection for a given destination configuration
      operationId: executeDestinationCheckConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationCoreConfig"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CheckConnectionRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_oauths/oauth_params/create:
    post:
      tags:
        - source_oauth
      summary: >
        Sets instancewide variables to be used for the oauth flow when creating this source. When set, these variables will be injected
        into a connector's configuration before any interaction with the connector image itself. This enables running oauth flows with
        consistent variables e.g: the company's Google Ads developer_token, client_id, and client_secret without the user having to know
        about these variables.
      operationId: setInstancewideSourceOauthParams
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SetInstancewideSourceOauthParamsRequestBody"
        required: true
      responses:
        "200":
          description: Successful
        "400":
          $ref: "#/components/responses/ExceptionResponse"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
  /v1/source_oauths/get_consent_url:
    post:
      tags:
        - source_oauth
      summary: Given a source connector definition ID, return the URL to the consent screen where to redirect the user to.
      operationId: getSourceOAuthConsent
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SourceOauthConsentRequest"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OAuthConsentRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_oauths/complete_oauth:
    post:
      tags:
        - source_oauth
      summary: Given a source def ID generate an access/refresh token etc.
      operationId: completeSourceOAuth
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CompleteSourceOauthRequest"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompleteOAuthResponse"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/source_oauths/revoke:
    post:
      tags:
        - source_oauth
      summary: Given a source definition ID and workspace ID revoke access/refresh token etc.
      operationId: revokeSourceOAuthTokens
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/RevokeSourceOauthTokensRequest"
        required: true
      responses:
        "200":
          description: Successful operation
        "400":
          $ref: "#/components/responses/ExceptionResponse"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
  /v1/destination_oauths/get_consent_url:
    post:
      tags:
        - destination_oauth
      summary: Given a destination connector definition ID, return the URL to the consent screen where to redirect the user to.
      operationId: getDestinationOAuthConsent
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/DestinationOauthConsentRequest"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/OAuthConsentRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_oauths/complete_oauth:
    post:
      tags:
        - destination_oauth
      summary: Given a destination def ID generate an access/refresh token etc.
      operationId: completeDestinationOAuth
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CompleteDestinationOAuthRequest"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CompleteOAuthResponse"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/destination_oauths/oauth_params/create:
    post:
      tags:
        - destination_oauth
      summary: >
        Sets instancewide variables to be used for the oauth flow when creating this destination. When set, these variables will be injected
        into a connector's configuration before any interaction with the connector image itself. This enables running oauth flows with
        consistent variables e.g: the company's Google Ads developer_token, client_id, and client_secret without the user having to know
        about these variables.
      operationId: setInstancewideDestinationOauthParams
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SetInstancewideDestinationOauthParamsRequestBody"
        required: true
      responses:
        "200":
          description: Successful
        "400":
          $ref: "#/components/responses/ExceptionResponse"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
  /v1/web_backend/check_updates:
    post:
      tags:
        - web_backend
      summary: Returns a summary of source and destination definitions that could be updated.
      operationId: webBackendCheckUpdates
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebBackendCheckUpdatesRead"
  /v1/web_backend/connections/list:
    post:
      tags:
        - web_backend
      summary: Returns all non-deleted connections for a workspace.
      operationId: webBackendListConnectionsForWorkspace
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebBackendConnectionListRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebBackendConnectionReadList"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/web_backend/connections/get:
    post:
      tags:
        - web_backend
      summary: Get a connection
      operationId: webBackendGetConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebBackendConnectionRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebBackendConnectionRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/web_backend/connections/create:
    post:
      tags:
        - web_backend
      summary: Create a connection
      operationId: webBackendCreateConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebBackendConnectionCreate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebBackendConnectionRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/web_backend/connections/update:
    post:
      tags:
        - web_backend
      summary: Update a connection
      description: |
        Apply a patch-style update to a connection. Only fields present on the update request body will be updated.
        Any operations that lack an ID will be created. Then, the newly created operationId will be applied to the
        connection along with the rest of the operationIds in the request body.
        Apply a patch-style update to a connection. Only fields present on the update request body will be updated.
        Note that if a catalog is present in the request body, the connection's entire catalog will be replaced
        with the catalog from the request. This means that to modify a single stream, the entire new catalog
        containing the updated stream needs to be sent.
      operationId: webBackendUpdateConnection
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebBackendConnectionUpdate"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebBackendConnectionRead"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/web_backend/state/get_type:
    post:
      tags:
        - web_backend
      summary: Fetch the current state type for a connection.
      operationId: getStateType
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ConnectionStateType"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/web_backend/workspace/state:
    post:
      tags:
        - web_backend
      summary: Returns the current state of a workspace
      operationId: webBackendGetWorkspaceState
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebBackendWorkspaceState"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebBackendWorkspaceStateResult"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/web_backend/geographies/list:
    post:
      tags:
        - web_backend
      description: Returns all available geographies in which a data sync can run.
      summary: |
        Returns available geographies can be selected to run data syncs in a particular geography.
        The 'auto' entry indicates that the sync will be automatically assigned to a geography according
        to the platform default behavior. Entries other than 'auto' are two-letter country codes that
        follow the ISO 3166-1 alpha-2 standard.
      operationId: webBackendListGeographies
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebBackendGeographiesListResult"
  /v1/jobs/list:
    post:
      tags:
        - jobs
      summary: Returns recent jobs for a connection. Jobs are returned in descending order by createdAt.
      operationId: listJobsFor
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobListRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobReadList"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/jobs/get:
    post:
      tags:
        - jobs
      summary: Get information about a job
      operationId: getJobInfo
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobInfoRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/jobs/get_last_replication_job:
    post:
      tags:
        - jobs
      operationId: getLastReplicationJob
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ConnectionIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobOptionalRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/jobs/get_without_logs:
    post:
      tags:
        - jobs
      summary: Get information about a job excluding logs
      operationId: getJobInfoWithoutLogs
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobInfoRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/jobs/get_light:
    post:
      tags:
        - jobs
      summary: Get information about a job excluding attempt info and logs
      operationId: getJobInfoLight
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobInfoLightRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/jobs/cancel:
    post:
      tags:
        - jobs
      summary: Cancels a job
      operationId: cancelJob
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobInfoRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/jobs/get_debug_info:
    post:
      tags:
        - jobs
      summary: Gets all information needed to debug this job
      operationId: getJobDebugInfo
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobIdRequestBody"
        required: true
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobDebugInfoRead"
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/jobs/get_normalization_status:
    post:
      tags:
        - jobs
        - internal
      summary: Get normalization status to determine if we can bypass normalization phase
      operationId: getAttemptNormalizationStatusesForJob
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobIdRequestBody"
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AttemptNormalizationStatusReadList"

  /v1/health:
    get:
      tags:
        - health
      summary: Health Check
      operationId: getHealthCheck
      responses:
        "200":
          description: Successful operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/HealthCheckRead"
      # This route is unsecured for external monitoring.
      security: []
  /v1/logs/get:
    post:
      tags:
        - logs
      summary: Get logs
      operationId: getLogs
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/LogsRequestBody"
        required: true
      responses:
        "200":
          description: Returns the log file
          content:
            text/plain:
              schema:
                type: string
                format: binary
        "404":
          $ref: "#/components/responses/NotFoundResponse"
        "422":
          $ref: "#/components/responses/InvalidInputResponse"
  /v1/openapi:
    get:
      tags:
        - openapi
      summary: Returns the openapi specification
      operationId: getOpenApiSpec
      responses:
        "200":
          description: Returns the openapi specification file
          content:
            text/plain:
              schema:
                type: string
                format: binary
  /v1/attempt/set_workflow_in_attempt:
    post:
      tags:
        - attempt
        - internal
      summary: For worker to register the workflow id in attempt.
      operationId: setWorkflowInAttempt
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SetWorkflowInAttemptRequestBody"
        required: true
      responses:
        "200":
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InternalOperationResult"
  /v1/attempt/save_stats:
    post:
      tags:
        - attempt
        - internal
      summary: For worker to set sync stats of a running attempt.
      operationId: saveStats
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SaveStatsRequestBody"
        required: true
      responses:
        "200":
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InternalOperationResult"
  /v1/attempt/save_sync_config:
    post:
      tags:
        - attempt
        - internal
      summary: For worker to save the AttemptSyncConfig for an attempt.
      operationId: saveSyncConfig
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SaveAttemptSyncConfigRequestBody"
        required: true
      responses:
        "200":
          description: Successful Operation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/InternalOperationResult"
  /v1/stream_statuses/list:
    post:
      summary: Gets a list of stream statuses filtered by parameters (with AND semantics).
      tags:
        - stream_statuses
        - streams
      operationId: getStreamStatuses
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StreamStatusListRequestBody"
      responses:
        "200":
          description: Successfully queried stream statuses.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StreamStatusReadList"
  /v1/stream_statuses/create:
    post:
      summary: Creates a stream status.
      tags:
        - stream_statuses
        - streams
      operationId: createStreamStatus
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StreamStatusCreateRequestBody"
      responses:
        "201":
          description: Successfully created stream status.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StreamStatusRead"
  /v1/stream_statuses/update:
    post:
      summary: Updates a stream status.
      tags:
        - stream_statuses
        - streams
      operationId: updateStreamStatus
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/StreamStatusUpdateRequestBody"
      responses:
        "201":
          description: Successfully created stream status.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StreamStatusRead"
        "200":
          description: Successfully updated stream status.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/StreamStatusRead"
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  schemas:
    # WORKSPACE
    WorkspaceId:
      type: string
      format: uuid
    CustomerId:
      type: string
      format: uuid
    WorkspaceCreate:
      type: object
      required:
        - name
      properties:
        email:
          type: string
          format: email
        anonymousDataCollection:
          type: boolean
        name:
          type: string
        news:
          type: boolean
        securityUpdates:
          type: boolean
        notifications:
          type: array
          items:
            $ref: "#/components/schemas/Notification"
        notificationSettings:
          $ref: "#/components/schemas/NotificationSettings"
        displaySetupWizard:
          type: boolean
        defaultGeography:
          $ref: "#/components/schemas/Geography"
        webhookConfigs:
          type: array
          items:
            $ref: "#/components/schemas/WebhookConfigWrite"
    WebhookConfigWrite:
      type: object
      properties:
        name:
          type: string
          description: human readable name for this webhook e.g. for UI display.
        authToken:
          type: string
          description: an auth token, to be passed as the value for an HTTP Authorization header.
        validationUrl:
          type: string
          description: if supplied, the webhook config will be validated by checking that this URL returns a 2xx response.
    NotificationItem:
      type: object
      properties:
        notificationType:
          type: array
          items:
            $ref: "#/components/schemas/NotificationType"
        slackConfiguration:
          $ref: "#/components/schemas/SlackNotificationConfiguration"
        customerioConfiguration:
          $ref: "#/components/schemas/CustomerioNotificationConfiguration"

    NotificationSettings:
      type: object
      properties:
        sendOnSuccess:
          $ref: "#/components/schemas/NotificationItem"
        sendOnFailure:
          $ref: "#/components/schemas/NotificationItem"
        sendOnSyncDisabled:
          $ref: "#/components/schemas/NotificationItem"
        sendOnSyncDisabledWarning:
          $ref: "#/components/schemas/NotificationItem"
        sendOnConnectionUpdate:
          $ref: "#/components/schemas/NotificationItem"
        sendOnConnectionUpdateActionRequired:
          $ref: "#/components/schemas/NotificationItem"

    Notification:
      type: object
      required:
        - notificationType
        - sendOnSuccess
        - sendOnFailure
      properties:
        # Instead of this type field, we would prefer a json schema "oneOf" but unfortunately,
        # the jsonschema2pojo does not seem to support it yet: https://github.com/joelittlejohn/jsonschema2pojo/issues/392
        notificationType:
          $ref: "#/components/schemas/NotificationType"
        sendOnSuccess:
          type: boolean
          default: false
        sendOnFailure:
          type: boolean
          default: true
        slackConfiguration:
          $ref: "#/components/schemas/SlackNotificationConfiguration"
        customerioConfiguration:
          $ref: "#/components/schemas/CustomerioNotificationConfiguration"
    SlackNotificationConfiguration:
      type: object
      required:
        - webhook
      properties:
        webhook:
          type: string
    CustomerioNotificationConfiguration:
      type: object
    NotificationType:
      type: string
      enum:
        - slack
        - customerio
        # - webhook
    NotificationRead:
      type: object
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - succeeded
            - failed
        message:
          type: string
    WorkspaceIdRequestBody:
      type: object
      required:
        - workspaceId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    ListConnectionsForWorkspacesRequestBody:
      type: object
      required:
        - workspaceIds
        - userId
      properties:
        workspaceIds:
          type: array
          items:
            $ref: "#/components/schemas/WorkspaceId"
        userId:
          type: string
          format: uuid
        pagination:
          $ref: "#/components/schemas/Pagination"
        includeDeleted:
          type: boolean
          default: false
    ListResourcesForWorkspacesRequestBody:
      type: object
      required:
        - workspaceIds
      properties:
        workspaceIds:
          type: array
          items:
            $ref: "#/components/schemas/WorkspaceId"
        includeDeleted:
          type: boolean
          default: false
        pagination:
          $ref: "#/components/schemas/Pagination"
    WorkspaceReadList:
      type: object
      required:
        - workspaces
      properties:
        workspaces:
          type: array
          items:
            $ref: "#/components/schemas/WorkspaceRead"
    WorkspaceRead:
      type: object
      required:
        - workspaceId
        - customerId
        - name
        - slug
        - initialSetupComplete
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        customerId:
          $ref: "#/components/schemas/CustomerId"
        email:
          type: string
          format: email
        name:
          type: string
        slug:
          type: string
        initialSetupComplete:
          type: boolean
        displaySetupWizard:
          type: boolean
        anonymousDataCollection:
          type: boolean
        news:
          type: boolean
        securityUpdates:
          type: boolean
        notifications:
          type: array
          items:
            $ref: "#/components/schemas/Notification"
        notificationSettings:
          $ref: "#/components/schemas/NotificationSettings"
        firstCompletedSync:
          type: boolean
        feedbackDone:
          type: boolean
        defaultGeography:
          $ref: "#/components/schemas/Geography"
        webhookConfigs:
          type: array
          items:
            # Note: this omits any sensitive info e.g. auth token
            $ref: "#/components/schemas/WebhookConfigRead"
    WebhookConfigRead:
      type: object
      description: the readable info for a webhook config; omits sensitive info e.g. auth token
      required:
        - id
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          description: human-readable name e.g. for display in UI
    WorkspaceUpdateName:
      type: object
      required:
        - workspaceId
        - name
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        name:
          type: string
    WorkspaceUpdate:
      type: object
      description: Used to apply a patch-style update to a workspace, which means that null properties remain unchanged
      required:
        - workspaceId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        email:
          type: string
          format: email
        initialSetupComplete:
          type: boolean
        displaySetupWizard:
          type: boolean
        anonymousDataCollection:
          type: boolean
        news:
          type: boolean
        securityUpdates:
          type: boolean
        notifications:
          type: array
          items:
            $ref: "#/components/schemas/Notification"
        notificationSettings:
          $ref: "#/components/schemas/NotificationSettings"
        defaultGeography:
          $ref: "#/components/schemas/Geography"
        webhookConfigs:
          type: array
          items:
            $ref: "#/components/schemas/WebhookConfigWrite"
    WorkspaceGiveFeedback:
      type: object
      required:
        - workspaceId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    WebBackendWorkspaceState:
      type: object
      required:
        - workspaceId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    WebBackendWorkspaceStateResult:
      type: object
      required:
        - hasConnections
        - hasSources
        - hasDestinations
      properties:
        hasConnections:
          type: boolean
        hasSources:
          type: boolean
        hasDestinations:
          type: boolean
    WebBackendGeographiesListResult:
      type: object
      required:
        - geographies
      properties:
        geographies:
          type: array
          items:
            $ref: "#/components/schemas/Geography"
    # SLUG
    SlugRequestBody:
      type: object
      required:
        - slug
      properties:
        slug:
          type: string
    # Geography
    Geography:
      type: string
      enum:
        - auto
        - us
        - eu
    # BuilderProject
    ConnectorBuilderProjectId:
      type: string
      format: uuid
    DeclarativeManifest:
      description: Low code CDK manifest JSON object
      type: object
    DeclarativeManifestRead:
      type: object
      properties:
        manifest:
          $ref: "#/components/schemas/DeclarativeManifest"
        isDraft:
          type: boolean
        version:
          $ref: "#/components/schemas/ManifestVersion"
        description:
          type: string
    ConnectorBuilderProjectDetails:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        draftManifest:
          $ref: "#/components/schemas/DeclarativeManifest"
    ConnectorBuilderProjectDetailsRead:
      type: object
      required:
        - name
        - builderProjectId
        - hasDraft
      properties:
        name:
          type: string
        builderProjectId:
          $ref: "#/components/schemas/ConnectorBuilderProjectId"
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        activeDeclarativeManifestVersion:
          $ref: "#/components/schemas/ManifestVersion"
        hasDraft:
          type: boolean
    ConnectorBuilderProjectIdWithWorkspaceId:
      type: object
      required:
        - workspaceId
        - builderProjectId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        builderProjectId:
          $ref: "#/components/schemas/ConnectorBuilderProjectId"
        version:
          $ref: "#/components/schemas/ManifestVersion"
    ExistingConnectorBuilderProjectWithWorkspaceId:
      type: object
      required:
        - workspaceId
        - builderProjectId
        - builderProject
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        builderProjectId:
          $ref: "#/components/schemas/ConnectorBuilderProjectId"
        builderProject:
          $ref: "#/components/schemas/ConnectorBuilderProjectDetails"
    ConnectorBuilderProjectWithWorkspaceId:
      type: object
      required:
        - workspaceId
        - builderProject
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        builderProject:
          $ref: "#/components/schemas/ConnectorBuilderProjectDetails"
    ConnectorBuilderProjectRead:
      type: object
      required:
        - builderProject
      properties:
        builderProject:
          $ref: "#/components/schemas/ConnectorBuilderProjectDetailsRead"
        declarativeManifest:
          $ref: "#/components/schemas/DeclarativeManifestRead"
    ConnectorBuilderProjectReadList:
      type: object
      required:
        - projects
      properties:
        projects:
          type: array
          items:
            $ref: "#/components/schemas/ConnectorBuilderProjectDetailsRead"
    ConnectorBuilderPublishRequestBody:
      type: object
      required:
        - workspaceId
        - builderProjectId
        - name
        - initialDeclarativeManifest
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        builderProjectId:
          $ref: "#/components/schemas/ConnectorBuilderProjectId"
        name:
          type: string
        initialDeclarativeManifest:
          $ref: "#/components/schemas/DeclarativeSourceManifest"
    ManifestVersion:
      type: integer
      format: int64
    DeclarativeSourceManifest:
      type: object
      required:
        - description
        - manifest
        - spec
        - version
      properties:
        description:
          type: string
        manifest:
          $ref: "#/components/schemas/DeclarativeManifest"
        spec:
          $ref: "#/components/schemas/SourceDefinitionSpecification"
        version:
          $ref: "#/components/schemas/ManifestVersion"
    SourceDefinitionIdBody:
      type: object
      required:
        - sourceDefinitionId
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
    # SourceDefinition
    SourceDefinitionId:
      type: string
      format: uuid
    SourceDefinitionIdRequestBody:
      type: object
      required:
        - sourceDefinitionId
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
    SourceDefinitionCreate:
      type: object
      required:
        - name
        - dockerRepository
        - dockerImageTag
        - documentationUrl
      properties:
        name:
          type: string
        dockerRepository:
          type: string
        dockerImageTag:
          type: string
        documentationUrl:
          type: string
          format: uri
        icon:
          type: string
        resourceRequirements:
          $ref: "#/components/schemas/ActorDefinitionResourceRequirements"
    SourceDefinitionUpdate:
      type: object
      description: Update the SourceDefinition. Currently, the only allowed attribute to update is the default docker image version.
      required:
        - sourceDefinitionId
        - dockerImageTag
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        dockerImageTag:
          type: string
        resourceRequirements:
          $ref: "#/components/schemas/ActorDefinitionResourceRequirements"
    SourceDefinitionRead:
      type: object
      required:
        - sourceDefinitionId
        - name
        - dockerRepository
        - dockerImageTag
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        name:
          type: string
        dockerRepository:
          type: string
        dockerImageTag:
          type: string
        documentationUrl:
          type: string
          format: uri
        icon:
          type: string
        protocolVersion:
          description: The Airbyte Protocol version supported by the connector
          type: string
        releaseStage:
          $ref: "#/components/schemas/ReleaseStage"
        releaseDate:
          description: The date when this connector was first released, in yyyy-mm-dd format.
          type: string
          format: date
        sourceType:
          type: string
          enum:
            - api
            - file
            - database
            - custom
        resourceRequirements:
          $ref: "#/components/schemas/ActorDefinitionResourceRequirements"
        maxSecondsBetweenMessages:
          description: Number of seconds allowed between 2 airbyte protocol messages. The source will timeout if this delay is reach
          type: integer
          format: int64
    SourceDefinitionReadList:
      type: object
      required:
        - sourceDefinitions
      properties:
        sourceDefinitions:
          type: array
          items:
            $ref: "#/components/schemas/SourceDefinitionRead"
    CustomSourceDefinitionCreate:
      type: object
      required:
        - workspaceId
        - sourceDefinition
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        sourceDefinition:
          $ref: "#/components/schemas/SourceDefinitionCreate"
    SourceDefinitionIdWithWorkspaceId:
      type: object
      required:
        - sourceDefinitionId
        - workspaceId
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    ListDeclarativeManifestsRequestBody:
      type: object
      required:
        - workspaceId
        - sourceDefinitionId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
    DeclarativeManifestsReadList:
      type: object
      required:
        - manifestVersions
      properties:
        manifestVersions:
          type: array
          items:
            $ref: "#/components/schemas/DeclarativeManifestVersionRead"
    DeclarativeManifestVersionRead:
      type: object
      required:
        - version
        - isActive
        - description
      properties:
        version:
          type: integer
          format: int64
        isActive:
          type: boolean
        description:
          type: string
    DeclarativeSourceDefinitionCreateManifestRequestBody:
      type: object
      required:
        - workspaceId
        - sourceDefinitionId
        - setAsActiveManifest
        - declarativeManifest
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        sourceDefinitionId:
          $ref: "#/components/schemas/ConnectorBuilderProjectId"
        setAsActiveManifest:
          type: boolean
        declarativeManifest:
          $ref: "#/components/schemas/DeclarativeSourceManifest"
    UpdateActiveManifestRequestBody:
      type: object
      required:
        - workspaceId
        - sourceDefinitionId
        - version
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        sourceDefinitionId:
          $ref: "#/components/schemas/ConnectorBuilderProjectId"
        version:
          $ref: "#/components/schemas/ManifestVersion"
    PrivateSourceDefinitionRead:
      type: object
      required:
        - sourceDefinition
        - granted
      properties:
        sourceDefinition:
          $ref: "#/components/schemas/SourceDefinitionRead"
        granted:
          type: boolean
    PrivateSourceDefinitionReadList:
      type: object
      required:
        - sourceDefinitions
      properties:
        sourceDefinitions:
          type: array
          items:
            $ref: "#/components/schemas/PrivateSourceDefinitionRead"
    # SOURCE SPECIFICATION
    SourceDefinitionSpecification:
      description: The specification for what values are required to configure the sourceDefinition.
      type: object
      example: { user: { type: string } }
    SourceDefinitionSpecificationRead:
      type: object
      required:
        - sourceDefinitionId
        - jobInfo
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        documentationUrl:
          type: string
        connectionSpecification:
          $ref: "#/components/schemas/SourceDefinitionSpecification"
        advancedAuth:
          $ref: "#/components/schemas/AdvancedAuth"
        jobInfo:
          $ref: "#/components/schemas/SynchronousJobRead"
    # SOURCE
    SourceId:
      type: string
      format: uuid
    SourceIdRequestBody:
      type: object
      required:
        - sourceId
      properties:
        sourceId:
          $ref: "#/components/schemas/SourceId"
    SourceCloneRequestBody:
      description: The values required to configure the source. The schema for this should have an id of the existing source along with the configuration you want to change in case.
      type: object
      required:
        - sourceCloneId
      properties:
        sourceCloneId:
          $ref: "#/components/schemas/SourceId"
        sourceConfiguration:
          $ref: "#/components/schemas/SourceCloneConfiguration"
    SourceCloneConfiguration:
      type: object
      properties:
        connectionConfiguration:
          $ref: "#/components/schemas/SourceConfiguration"
        name:
          type: string
    SourceConfiguration:
      description: The values required to configure the source. The schema for this must match the schema return by source_definition_specifications/get for the source.
      example: { user: "charles" }
    SourceCoreConfig:
      type: object
      required:
        - sourceDefinitionId
        - connectionConfiguration
        - workspaceId
      properties:
        sourceId:
          $ref: "#/components/schemas/SourceId"
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        connectionConfiguration:
          $ref: "#/components/schemas/SourceConfiguration"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    SourceCreate:
      type: object
      required:
        - workspaceId
        - name
        - sourceDefinitionId
        - connectionConfiguration
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        connectionConfiguration:
          $ref: "#/components/schemas/SourceConfiguration"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        name:
          type: string
        secretId:
          example: "airbyte_oauth_workspace_0509f049-d671-48cb-8105-0a23d47e6db6_secret_e0d38206-034e-4d75-9d21-da5a99b02826_v1"
          type: string
    SourceDiscoverSchemaRequestBody:
      type: object
      required:
        - sourceId
      properties:
        sourceId:
          $ref: "#/components/schemas/SourceId"
        connectionId:
          type: string
          format: uuid
        disable_cache:
          type: boolean
        notifySchemaChange:
          type: boolean
    PartialSourceUpdate:
      type: object
      required:
        - sourceId
      properties:
        sourceId:
          $ref: "#/components/schemas/SourceId"
        connectionConfiguration:
          $ref: "#/components/schemas/SourceConfiguration"
        name:
          type: string
        secretId:
          example: "airbyte_oauth_workspace_0509f049-d671-48cb-8105-0a23d47e6db6_secret_e0d38206-034e-4d75-9d21-da5a99b02826_v1"
          type: string
    SourceUpdate:
      type: object
      required:
        - sourceId
        - connectionConfiguration
        - name
      properties:
        sourceId:
          $ref: "#/components/schemas/SourceId"
        connectionConfiguration:
          $ref: "#/components/schemas/SourceConfiguration"
        name:
          type: string
        secretId:
          example: "airbyte_oauth_workspace_0509f049-d671-48cb-8105-0a23d47e6db6_secret_e0d38206-034e-4d75-9d21-da5a99b02826_v1"
          type: string
    SourceRead:
      type: object
      required:
        - sourceDefinitionId
        - sourceId
        - workspaceId
        - connectionConfiguration
        - name
        - sourceName
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        sourceId:
          $ref: "#/components/schemas/SourceId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        connectionConfiguration:
          $ref: "#/components/schemas/SourceConfiguration"
        name:
          type: string
        sourceName:
          type: string
        icon:
          type: string
    SourceSnippetRead:
      type: object
      required:
        - sourceId
        - name
        - sourceDefinitionId
        - sourceName
      properties:
        sourceId:
          $ref: "#/components/schemas/SourceId"
        name:
          type: string
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        sourceName:
          type: string
        icon:
          type: string
    SourceReadList:
      type: object
      required:
        - sources
      properties:
        sources:
          type: array
          items:
            $ref: "#/components/schemas/SourceRead"
    SourceDiscoverSchemaWriteRequestBody:
      description: to write this requested object to database.
      type: object
      required:
        - catalog
      properties:
        catalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        sourceId:
          $ref: "#/components/schemas/SourceId"
        connectorVersion:
          type: string
        configurationHash:
          type: string

    SourceDiscoverSchemaRead:
      description: Returns the results of a discover catalog job. If the job was not successful, the catalog field will not be present. jobInfo will aways be present and its status be used to determine if the job was successful or not.
      type: object
      required:
        - jobInfo
      properties:
        catalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        jobInfo:
          $ref: "#/components/schemas/SynchronousJobRead"
        catalogId:
          type: string
          format: uuid
        catalogDiff:
          $ref: "#/components/schemas/CatalogDiff"
        breakingChange:
          type: boolean
        connectionStatus:
          $ref: "#/components/schemas/ConnectionStatus"
    SourceAutoPropagateChange:
      description:
        Input of the source propagation, it contains the discovered catalog and a list of diff that need to be applied
        to the existing catalog.
      type: object
      required:
        - catalog
        - catalogId
        - sourceId
        - workspaceId
      properties:
        catalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        catalogId:
          type: string
          format: uuid
        sourceId:
          type: string
          format: uuid
        workspaceId:
          type: string
          format: uuid
    SourceSearch:
      type: object
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        sourceId:
          $ref: "#/components/schemas/SourceId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        connectionConfiguration:
          $ref: "#/components/schemas/SourceConfiguration"
        name:
          type: string
        sourceName:
          type: string
    # DESTINATION DEFINITION
    DestinationDefinitionId:
      type: string
      format: uuid
    DestinationDefinitionIdRequestBody:
      type: object
      required:
        - destinationDefinitionId
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
    DestinationDefinitionCreate:
      type: object
      required:
        - name
        - dockerRepository
        - dockerImageTag
        - documentationUrl
      properties:
        name:
          type: string
        dockerRepository:
          type: string
        dockerImageTag:
          type: string
        documentationUrl:
          type: string
          format: uri
        icon:
          type: string
        resourceRequirements:
          $ref: "#/components/schemas/ActorDefinitionResourceRequirements"
    DestinationDefinitionUpdate:
      type: object
      required:
        - destinationDefinitionId
        - dockerImageag
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        dockerImageTag:
          type: string
        resourceRequirements:
          $ref: "#/components/schemas/ActorDefinitionResourceRequirements"
    DestinationDefinitionRead:
      type: object
      required:
        - destinationDefinitionId
        - name
        - dockerRepository
        - dockerImageTag
        - documentationUrl
        - supportsDbt
        - normalizationConfig
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        name:
          type: string
        dockerRepository:
          type: string
        dockerImageTag:
          type: string
        documentationUrl:
          type: string
          format: uri
        icon:
          type: string
        protocolVersion:
          description: The Airbyte Protocol version supported by the connector
          type: string
        releaseStage:
          $ref: "#/components/schemas/ReleaseStage"
        releaseDate:
          description: The date when this connector was first released, in yyyy-mm-dd format.
          type: string
          format: date
        resourceRequirements:
          $ref: "#/components/schemas/ActorDefinitionResourceRequirements"
        supportsDbt:
          type: boolean
          description: an optional flag indicating whether DBT is used in the normalization. If the flag value is NULL - DBT is not used.
        normalizationConfig:
          $ref: "#/components/schemas/NormalizationDestinationDefinitionConfig"

    DestinationDefinitionReadList:
      type: object
      required:
        - destinationDefinitions
      properties:
        destinationDefinitions:
          type: array
          items:
            $ref: "#/components/schemas/DestinationDefinitionRead"
    CustomDestinationDefinitionCreate:
      type: object
      required:
        - workspaceId
        - destinationDefinition
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        destinationDefinition:
          $ref: "#/components/schemas/DestinationDefinitionCreate"
    DestinationDefinitionIdWithWorkspaceId:
      type: object
      required:
        - destinationDefinitionId
        - workspaceId
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    PrivateDestinationDefinitionRead:
      type: object
      required:
        - destinationDefinition
        - granted
      properties:
        destinationDefinition:
          $ref: "#/components/schemas/DestinationDefinitionRead"
        granted:
          type: boolean
    PrivateDestinationDefinitionReadList:
      type: object
      required:
        - destinationDefinitions
      properties:
        destinationDefinitions:
          type: array
          items:
            $ref: "#/components/schemas/PrivateDestinationDefinitionRead"
    # DESTINATION DEFINITION SPECIFICATION
    DestinationDefinitionSpecification:
      description: The specification for what values are required to configure the destinationDefinition.
      type: object
      example: { user: { type: string } }
    DestinationDefinitionSpecificationRead:
      type: object
      required:
        - destinationDefinitionId
        - jobInfo
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        documentationUrl:
          type: string
        connectionSpecification:
          $ref: "#/components/schemas/DestinationDefinitionSpecification"
        advancedAuth:
          $ref: "#/components/schemas/AdvancedAuth"
        jobInfo:
          $ref: "#/components/schemas/SynchronousJobRead"
        supportedDestinationSyncModes:
          type: array
          items:
            $ref: "#/components/schemas/DestinationSyncMode"
    # DESTINATION
    DestinationId:
      type: string
      format: uuid
    DestinationIdRequestBody:
      type: object
      required:
        - destinationId
      properties:
        destinationId:
          $ref: "#/components/schemas/DestinationId"
    DestinationConfiguration:
      description: The values required to configure the destination. The schema for this must match the schema return by destination_definition_specifications/get for the destinationDefinition.
      example: { user: "charles" }
    DestinationCoreConfig:
      type: object
      required:
        - workspaceId
        - destinationDefinitionId
        - connectionConfiguration
      properties:
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        connectionConfiguration:
          $ref: "#/components/schemas/DestinationConfiguration"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    DestinationCreate:
      type: object
      required:
        - name
        - workspaceId
        - destinationDefinitionId
        - connectionConfiguration
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        name:
          type: string
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        connectionConfiguration:
          $ref: "#/components/schemas/DestinationConfiguration"
    DestinationUpdate:
      type: object
      required:
        - destinationId
        - connectionConfiguration
        - name
      properties:
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        connectionConfiguration:
          $ref: "#/components/schemas/DestinationConfiguration"
        name:
          type: string
    PartialDestinationUpdate:
      type: object
      properties:
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        connectionConfiguration:
          $ref: "#/components/schemas/DestinationConfiguration"
        name:
          type: string
    DestinationCloneRequestBody:
      description: The values required to configure the destination. The schema for this should have an id of the existing destination along with the configuration you want to change in case.
      type: object
      required:
        - destinationCloneId
      properties:
        destinationCloneId:
          $ref: "#/components/schemas/DestinationId"
        destinationConfiguration:
          $ref: "#/components/schemas/DestinationCloneConfiguration"
    DestinationCloneConfiguration:
      type: object
      properties:
        connectionConfiguration:
          $ref: "#/components/schemas/DestinationConfiguration"
        name:
          type: string
    DestinationRead:
      type: object
      required:
        - destinationDefinitionId
        - destinationId
        - workspaceId
        - connectionConfiguration
        - name
        - destinationName
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        connectionConfiguration:
          $ref: "#/components/schemas/DestinationConfiguration"
        name:
          type: string
        destinationName:
          type: string
        icon:
          type: string
    DestinationSnippetRead:
      type: object
      required:
        - destinationId
        - name
        - destinationDefinitionId
        - destinationName
      properties:
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        name:
          type: string
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        destinationName:
          type: string
        icon:
          type: string
    DestinationReadList:
      type: object
      required:
        - destinations
      properties:
        destinations:
          type: array
          items:
            $ref: "#/components/schemas/DestinationRead"
    DestinationSearch:
      type: object
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        connectionConfiguration:
          $ref: "#/components/schemas/DestinationConfiguration"
        name:
          type: string
        destinationName:
          type: string
    # SOURCE / DESTINATION RELEASE STAGE ENUM
    ReleaseStage:
      type: string
      enum:
        - alpha
        - beta
        - generally_available
        - custom
    # CONNECTION
    ConnectionId:
      type: string
      format: uuid
    ConnectionIdRequestBody:
      type: object
      required:
        - connectionId
      properties:
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
    ConnectionStream:
      type: object
      required:
        - streamName
        - streamNamespace
      properties:
        streamName:
          type: string
        streamNamespace:
          type: string
    ConnectionStreamRequestBody:
      type: object
      required:
        - connectionId
        - streams
      properties:
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        streams:
          type: array
          items:
            $ref: "#/components/schemas/ConnectionStream"
    DbMigrationRequestBody:
      type: object
      required:
        - database
      properties:
        database:
          type: string
    WebBackendConnectionRequestBody:
      type: object
      required:
        - connectionId
      properties:
        withRefreshedCatalog:
          type: boolean
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
    ConnectionCreate:
      type: object
      required:
        - sourceId
        - destinationId
        - status
      properties:
        name:
          type: string
          description: Optional name of the connection
        namespaceDefinition:
          $ref: "#/components/schemas/NamespaceDefinitionType"
        namespaceFormat:
          type: string
          description: Used when namespaceDefinition is 'customformat'. If blank then behaves like namespaceDefinition = 'destination'. If "${SOURCE_NAMESPACE}" then behaves like namespaceDefinition = 'source'.
          default: null
          example: "${SOURCE_NAMESPACE}"
        prefix:
          type: string
          description: Prefix that will be prepended to the name of each stream when it is written to the destination.
        sourceId:
          $ref: "#/components/schemas/SourceId"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        operationIds:
          type: array
          items:
            $ref: "#/components/schemas/OperationId"
        syncCatalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        schedule:
          $ref: "#/components/schemas/ConnectionSchedule"
        scheduleType:
          $ref: "#/components/schemas/ConnectionScheduleType"
        scheduleData:
          $ref: "#/components/schemas/ConnectionScheduleData"
        status:
          $ref: "#/components/schemas/ConnectionStatus"
        resourceRequirements:
          $ref: "#/components/schemas/ResourceRequirements"
        sourceCatalogId:
          type: string
          format: uuid
        geography:
          $ref: "#/components/schemas/Geography"
        notifySchemaChanges:
          type: boolean
        notifySchemaChangesByEmail:
          type: boolean
        nonBreakingChangesPreference:
          $ref: "#/components/schemas/NonBreakingChangesPreference"
    WebBackendConnectionCreate:
      type: object
      required:
        - sourceId
        - destinationId
        - status
      properties:
        name:
          type: string
          description: Optional name of the connection
        namespaceDefinition:
          $ref: "#/components/schemas/NamespaceDefinitionType"
        namespaceFormat:
          type: string
          description: Used when namespaceDefinition is 'customformat'. If blank then behaves like namespaceDefinition = 'destination'. If "${SOURCE_NAMESPACE}" then behaves like namespaceDefinition = 'source'.
          default: null
          example: "${SOURCE_NAMESPACE}"
        prefix:
          type: string
          description: Prefix that will be prepended to the name of each stream when it is written to the destination.
        sourceId:
          $ref: "#/components/schemas/SourceId"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        operationIds:
          type: array
          items:
            $ref: "#/components/schemas/OperationId"
        syncCatalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        schedule:
          $ref: "#/components/schemas/ConnectionSchedule"
        scheduleType:
          $ref: "#/components/schemas/ConnectionScheduleType"
        scheduleData:
          $ref: "#/components/schemas/ConnectionScheduleData"
        status:
          $ref: "#/components/schemas/ConnectionStatus"
        resourceRequirements:
          $ref: "#/components/schemas/ResourceRequirements"
        operations:
          type: array
          items:
            $ref: "#/components/schemas/OperationCreate"
        sourceCatalogId:
          type: string
          format: uuid
        geography:
          $ref: "#/components/schemas/Geography"
        nonBreakingChangesPreference:
          $ref: "#/components/schemas/NonBreakingChangesPreference"
    ConnectionStateCreateOrUpdate:
      type: object
      required:
        - connectionId
        - connectionState
      properties:
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        connectionState:
          $ref: "#/components/schemas/ConnectionState"
    ConnectionUpdate:
      type: object
      description: Used to apply a patch-style update to a connection, which means that null properties remain unchanged
      required:
        - connectionId
      properties:
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        namespaceDefinition:
          $ref: "#/components/schemas/NamespaceDefinitionType"
        namespaceFormat:
          type: string
          description: Used when namespaceDefinition is 'customformat'. If blank then behaves like namespaceDefinition = 'destination'. If "${SOURCE_NAMESPACE}" then behaves like namespaceDefinition = 'source'.
          default: null
          example: "${SOURCE_NAMESPACE}"
        name:
          type: string
          description: Name that will be set to this connection
        prefix:
          type: string
          description: Prefix that will be prepended to the name of each stream when it is written to the destination.
        operationIds:
          type: array
          items:
            $ref: "#/components/schemas/OperationId"
        syncCatalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        schedule:
          $ref: "#/components/schemas/ConnectionSchedule"
        scheduleType:
          $ref: "#/components/schemas/ConnectionScheduleType"
        scheduleData:
          $ref: "#/components/schemas/ConnectionScheduleData"
        status:
          $ref: "#/components/schemas/ConnectionStatus"
        resourceRequirements:
          $ref: "#/components/schemas/ResourceRequirements"
        sourceCatalogId:
          type: string
          format: uuid
        geography:
          $ref: "#/components/schemas/Geography"
        notifySchemaChanges:
          type: boolean
        notifySchemaChangesByEmail:
          type: boolean
        nonBreakingChangesPreference:
          $ref: "#/components/schemas/NonBreakingChangesPreference"
        breakingChange:
          type: boolean
    WebBackendConnectionUpdate:
      type: object
      description: Used to apply a patch-style update to a connection, which means that null properties remain unchanged
      required:
        - connectionId
      properties:
        name:
          type: string
          description: Name that will be set to the connection
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        namespaceDefinition:
          $ref: "#/components/schemas/NamespaceDefinitionType"
        namespaceFormat:
          type: string
          description: Used when namespaceDefinition is 'customformat'. If blank then behaves like namespaceDefinition = 'destination'. If "${SOURCE_NAMESPACE}" then behaves like namespaceDefinition = 'source'.
          default: null
          example: "${SOURCE_NAMESPACE}"
        prefix:
          type: string
          description: Prefix that will be prepended to the name of each stream when it is written to the destination.
        syncCatalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        schedule:
          $ref: "#/components/schemas/ConnectionSchedule"
        scheduleType:
          $ref: "#/components/schemas/ConnectionScheduleType"
        scheduleData:
          $ref: "#/components/schemas/ConnectionScheduleData"
        status:
          $ref: "#/components/schemas/ConnectionStatus"
        resourceRequirements:
          $ref: "#/components/schemas/ResourceRequirements"
        skipReset:
          type: boolean
        operations:
          type: array
          items:
            $ref: "#/components/schemas/WebBackendOperationCreateOrUpdate"
        sourceCatalogId:
          type: string
          format: uuid
        geography:
          $ref: "#/components/schemas/Geography"
        notifySchemaChanges:
          type: boolean
        notifySchemaChangesByEmail:
          type: boolean
        nonBreakingChangesPreference:
          $ref: "#/components/schemas/NonBreakingChangesPreference"
    ConnectionRead:
      type: object
      required:
        - connectionId
        - name
        - sourceId
        - destinationId
        - syncCatalog
        - status
        - breakingChange
      properties:
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        name:
          type: string
        namespaceDefinition:
          $ref: "#/components/schemas/NamespaceDefinitionType"
        namespaceFormat:
          type: string
          description: Used when namespaceDefinition is 'customformat'. If blank then behaves like namespaceDefinition = 'destination'. If "${SOURCE_NAMESPACE}" then behaves like namespaceDefinition = 'source'.
          default: null
          example: "${SOURCE_NAMESPACE}"
        prefix:
          type: string
          description: Prefix that will be prepended to the name of each stream when it is written to the destination.
        sourceId:
          $ref: "#/components/schemas/SourceId"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        operationIds:
          type: array
          items:
            $ref: "#/components/schemas/OperationId"
        syncCatalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        schedule:
          $ref: "#/components/schemas/ConnectionSchedule"
        scheduleType:
          $ref: "#/components/schemas/ConnectionScheduleType"
        scheduleData:
          $ref: "#/components/schemas/ConnectionScheduleData"
        status:
          $ref: "#/components/schemas/ConnectionStatus"
        resourceRequirements:
          $ref: "#/components/schemas/ResourceRequirements"
        sourceCatalogId:
          type: string
          format: uuid
        geography:
          $ref: "#/components/schemas/Geography"
        breakingChange:
          type: boolean
        notifySchemaChanges:
          type: boolean
        notifySchemaChangesByEmail:
          type: boolean
        nonBreakingChangesPreference:
          $ref: "#/components/schemas/NonBreakingChangesPreference"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    SchemaChange:
      enum:
        - no_change
        - non_breaking
        - breaking
      type: string
    ConnectionSearch:
      type: object
      properties:
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        name:
          type: string
        namespaceDefinition:
          $ref: "#/components/schemas/NamespaceDefinitionType"
        namespaceFormat:
          type: string
          description: Used when namespaceDefinition is 'customformat'. If blank then behaves like namespaceDefinition = 'destination'. If "${SOURCE_NAMESPACE}" then behaves like namespaceDefinition = 'source'.
          default: null
          example: "${SOURCE_NAMESPACE}"
        prefix:
          type: string
          description: Prefix that will be prepended to the name of each stream when it is written to the destination.
        sourceId:
          $ref: "#/components/schemas/SourceId"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        schedule:
          $ref: "#/components/schemas/ConnectionSchedule"
        scheduleType:
          $ref: "#/components/schemas/ConnectionScheduleType"
        scheduleData:
          $ref: "#/components/schemas/ConnectionScheduleData"
        status:
          $ref: "#/components/schemas/ConnectionStatus"
        source:
          $ref: "#/components/schemas/SourceSearch"
        destination:
          $ref: "#/components/schemas/DestinationSearch"
    ConnectionReadList:
      type: object
      required:
        - connections
      properties:
        connections:
          type: array
          items:
            $ref: "#/components/schemas/ConnectionRead"
    ConnectionStatus:
      type: string
      description: Active means that data is flowing through the connection. Inactive means it is not. Deprecated means the connection is off and cannot be re-activated. the schema field describes the elements of the schema that will be synced.
      enum:
        - active
        - inactive
        - deprecated
    # TODO(https://github.com/airbytehq/airbyte/issues/11432): remove.
    # Prefer the ConnectionScheduleType and ConnectionScheduleData properties.
    ConnectionSchedule:
      description: if null, then no schedule is set.
      type: object
      required:
        - units
        - timeUnit
      properties:
        units:
          type: integer
          format: int64
        timeUnit:
          type: string
          enum:
            - minutes
            - hours
            - days
            - weeks
            - months
    ConnectionScheduleType:
      description: determine how the schedule data should be interpreted
      type: string
      enum:
        - manual
        - basic
        - cron
    ConnectionScheduleData:
      description: schedule for when the the connection should run, per the schedule type
      type: object
      properties:
        # This should be populated when schedule type is basic.
        basicSchedule:
          type: object
          required:
            - timeUnit
            - units
          properties:
            timeUnit:
              type: string
              enum:
                - minutes
                - hours
                - days
                - weeks
                - months
            units:
              type: integer
              format: int64
        # This should be populated when schedule type is cron.
        cron:
          type: object
          required:
            - cronExpression
            - cronTimeZone
          properties:
            cronExpression:
              type: string
            cronTimeZone:
              type: string
    NamespaceDefinitionType:
      type: string
      description: Method used for computing final namespace in destination
      enum:
        - source
        - destination
        - customformat
    # Operations
    OperationId:
      type: string
      format: uuid
    OperationIdRequestBody:
      type: object
      required:
        - operationId
      properties:
        operationId:
          $ref: "#/components/schemas/OperationId"
    OperationCreate:
      type: object
      required:
        - name
        - operatorConfiguration
        - workspaceId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        name:
          type: string
        operatorConfiguration:
          $ref: "#/components/schemas/OperatorConfiguration"
    OperationUpdate:
      type: object
      required:
        - operationId
        - name
        - operatorConfiguration
      properties:
        operationId:
          $ref: "#/components/schemas/OperationId"
        name:
          type: string
        operatorConfiguration:
          $ref: "#/components/schemas/OperatorConfiguration"
    WebBackendOperationCreateOrUpdate:
      type: object
      required:
        - name
        - operatorConfiguration
        - workspaceId
      properties:
        operationId:
          $ref: "#/components/schemas/OperationId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        name:
          type: string
        operatorConfiguration:
          $ref: "#/components/schemas/OperatorConfiguration"
    OperationRead:
      type: object
      required:
        - operationId
        - name
        - operatorConfiguration
        - workspaceId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        operationId:
          $ref: "#/components/schemas/OperationId"
        name:
          type: string
        operatorConfiguration:
          $ref: "#/components/schemas/OperatorConfiguration"
    OperationReadList:
      type: object
      required:
        - operations
      properties:
        operations:
          type: array
          items:
            $ref: "#/components/schemas/OperationRead"
    OperatorConfiguration:
      type: object
      required:
        - operatorType
      properties:
        # Instead of this type field, we would prefer a json schema "oneOf" but unfortunately,
        # the jsonschema2pojo does not seem to support it yet: https://github.com/joelittlejohn/jsonschema2pojo/issues/392
        operatorType:
          $ref: "#/components/schemas/OperatorType"
        normalization:
          $ref: "#/components/schemas/OperatorNormalization"
        dbt:
          $ref: "#/components/schemas/OperatorDbt"
        webhook:
          $ref: "#/components/schemas/OperatorWebhook"
    OperatorType:
      type: string
      enum:
        # - destination
        - normalization
        - dbt
        - webhook
      # - docker
    OperatorNormalization:
      type: object
      properties:
        option:
          type: string
          enum:
            - basic
            #- unnesting
    OperatorDbt:
      type: object
      required:
        - gitRepoUrl
      properties:
        gitRepoUrl:
          type: string
        gitRepoBranch:
          type: string
        dockerImage:
          type: string
        dbtArguments:
          type: string
    OperatorWebhook:
      type: object
      properties:
        webhookConfigId:
          type: string
          format: uuid
          description: The id of the webhook configs to use from the workspace.
        webhookType:
          type: string
          enum:
            - dbtCloud
        dbtCloud:
          type: object
          required:
            - accountId
            - jobId
          properties:
            accountId:
              type: integer
              description: The account id associated with the job
            jobId:
              type: integer
              description: The job id associated with the job
        executionUrl:
          type: string
          description: DEPRECATED. Populate dbtCloud instead.
          deprecated: true
        executionBody:
          type: string
          description: DEPRECATED. Populate dbtCloud instead.
          deprecated: true
    CheckOperationRead:
      type: object
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - succeeded
            - failed
        message:
          type: string
    # LOGS
    LogType:
      type: string
      description: type/source of logs produced
      enum:
        - server
        - scheduler
    LogsRequestBody:
      type: object
      required:
        - logType
      properties:
        logType:
          $ref: "#/components/schemas/LogType"
    # ACTOR CATALOG
    ActorCatalogWithUpdatedAt:
      description: A source actor catalog with the timestamp it was mostly recently updated
      type: object
      properties:
        updatedAt:
          type: integer
          format: int64
        catalog:
          type: object
    # SCHEMA CATALOG
    AirbyteCatalog:
      description: describes the available schema (catalog).
      type: object
      required:
        - streams
      properties:
        streams:
          type: array
          items:
            $ref: "#/components/schemas/AirbyteStreamAndConfiguration"
    AirbyteStreamAndConfiguration:
      description: each stream is split in two parts; the immutable schema from source and mutable configuration for destination
      type: object
      additionalProperties: false
      properties:
        stream:
          $ref: "#/components/schemas/AirbyteStream"
        config:
          $ref: "#/components/schemas/AirbyteStreamConfiguration"
    AirbyteStream:
      description: the immutable schema defined by the source
      type: object
      additionalProperties: false
      required:
        - name
        - json_schema
        # todo (cgardens) - make required once sources are migrated
        # - supported_sync_modes
      properties:
        name:
          type: string
          description: Stream's name.
        jsonSchema:
          $ref: "#/components/schemas/StreamJsonSchema"
        supportedSyncModes:
          type: array
          items:
            $ref: "#/components/schemas/SyncMode"
        sourceDefinedCursor:
          description: If the source defines the cursor field, then any other cursor field inputs will be ignored. If it does not, either the user_provided one is used, or the default one is used as a backup.
          type: boolean
        defaultCursorField:
          description: Path to the field that will be used to determine if a record is new or modified since the last sync. If not provided by the source, the end user will have to specify the comparable themselves.
          type: array
          items:
            type: string
        sourceDefinedPrimaryKey:
          description: If the source defines the primary key, paths to the fields that will be used as a primary key. If not provided by the source, the end user will have to specify the primary key themselves.
          type: array
          items:
            type: array
            items:
              type: string
        namespace:
          type: string
          description: Optional Source-defined namespace. Airbyte streams from the same sources should have the same namespace. Currently only used by JDBC destinations to determine what schema to write to.
    StreamJsonSchema:
      description: Stream schema using Json Schema specs.
      type: object
    AirbyteStreamConfiguration:
      description: the mutable part of the stream to configure the destination
      type: object
      additionalProperties: false
      required:
        - syncMode
        - destinationSyncMode
      properties:
        syncMode:
          $ref: "#/components/schemas/SyncMode"
        cursorField:
          description: Path to the field that will be used to determine if a record is new or modified since the last sync. This field is REQUIRED if `sync_mode` is `incremental`. Otherwise it is ignored.
          type: array
          items:
            type: string
        destinationSyncMode:
          $ref: "#/components/schemas/DestinationSyncMode"
        primaryKey:
          description: Paths to the fields that will be used as primary key. This field is REQUIRED if `destination_sync_mode` is `*_dedup`. Otherwise it is ignored.
          type: array
          items:
            type: array
            items:
              type: string
        aliasName:
          description: Alias name to the stream to be used in the destination
          type: string
        selected:
          description: If this is true, the stream is selected with all of its properties. For new connections, this considers if the stream is suggested or not
          type: boolean
        suggested:
          description: Does the connector suggest that this stream be enabled by default?
          type: boolean
        fieldSelectionEnabled:
          description: Whether field selection should be enabled. If this is true, only the properties in `selectedFields` will be included.
          type: boolean
        selectedFields:
          description: Paths to the fields that will be included in the configured catalog. This must be set if `fieldSelectedEnabled` is set. An empty list indicates that no properties will be included.
          type: array
          items:
            $ref: "#/components/schemas/SelectedFieldInfo"
    SelectedFieldInfo:
      type: object
      # TODO(mfsiega-airbyte): point to thorough documentation on nested fields and paths.
      description: Path to a field/column/property in a stream to be selected. For example, if the field to be selected is a database column called "foo", this will be ["foo"]. Use multiple path elements for nested schemas.
      properties:
        fieldPath:
          type: array
          items:
            type: string
    DataType:
      type: string
      enum:
        - string
        - number
        - boolean
        - object
        - array
    # SCHEDULER
    JobId:
      type: integer
      format: int64
    JobConfigType:
      type: string
      enum:
        - check_connection_source
        - check_connection_destination
        - discover_schema
        - get_spec
        - sync
        - reset_connection
    JobListRequestBody:
      type: object
      required:
        - configTypes
        - configId
      properties:
        configTypes:
          type: array
          items:
            $ref: "#/components/schemas/JobConfigType"
        configId:
          type: string
        includingJobId:
          description: If the job with this ID exists for the specified connection, returns the number of pages of jobs necessary to include this job. Returns an empty list if this job is specified and cannot be found in this connection.
          $ref: "#/components/schemas/JobId"
        pagination:
          $ref: "#/components/schemas/Pagination"
    JobIdRequestBody:
      type: object
      required:
        - id
      properties:
        id:
          $ref: "#/components/schemas/JobId"
    JobRead:
      type: object
      required:
        - id
        - configType
        - configId
        - createdAt
        - updatedAt
        - status
      properties:
        id:
          $ref: "#/components/schemas/JobId"
        configType:
          $ref: "#/components/schemas/JobConfigType"
        configId:
          type: string
        enabledStreams:
          type: array
          items:
            $ref: "#/components/schemas/StreamDescriptor"
        createdAt:
          type: integer
          format: int64
        updatedAt:
          type: integer
          format: int64
        startedAt:
          type: integer
          format: int64
        status:
          $ref: "#/components/schemas/JobStatus"
        resetConfig:
          $ref: "#/components/schemas/ResetConfig"
    ResetConfig:
      type: object
      description: contains information about how a reset was configured. only populated if the job was a reset.
      properties:
        streamsToReset:
          type: array
          items:
            $ref: "#/components/schemas/StreamDescriptor"
    StreamDescriptor:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        namespace:
          type: string
    JobDebugRead:
      type: object
      required:
        - id
        - configType
        - configId
        - status
        - airbyteVersion
        - sourceDefinition
        - destinationDefinition
      properties:
        id:
          $ref: "#/components/schemas/JobId"
        configType:
          $ref: "#/components/schemas/JobConfigType"
        configId:
          type: string
        status:
          $ref: "#/components/schemas/JobStatus"
        airbyteVersion:
          type: string
        sourceDefinition:
          $ref: "#/components/schemas/SourceDefinitionRead"
        destinationDefinition:
          $ref: "#/components/schemas/DestinationDefinitionRead"
    WorkflowStateRead:
      type: object
      required:
        - running
      properties:
        running:
          type: boolean
    JobWithAttemptsRead:
      type: object
      properties:
        job:
          $ref: "#/components/schemas/JobRead"
        attempts:
          type: array
          items:
            $ref: "#/components/schemas/AttemptRead"
    JobCreatedAt:
      description: epoch time of the latest sync job. null if no sync job has taken place.
      type: integer
      format: int64
    JobStatus:
      type: string
      enum:
        - pending
        - running
        - incomplete
        - failed
        - succeeded
        - cancelled
    AttemptRead:
      type: object
      required:
        - id
        - status
        - createdAt
        - updatedAt
      properties:
        id:
          type: integer
          format: int64
        status:
          $ref: "#/components/schemas/AttemptStatus"
        createdAt:
          type: integer
          format: int64
        updatedAt:
          type: integer
          format: int64
        endedAt:
          type: integer
          format: int64
        bytesSynced:
          type: integer
          format: int64
        recordsSynced:
          type: integer
          format: int64
        totalStats:
          $ref: "#/components/schemas/AttemptStats"
        streamStats:
          type: array
          items:
            $ref: "#/components/schemas/AttemptStreamStats"
        failureSummary:
          $ref: "#/components/schemas/AttemptFailureSummary"
    AttemptStats:
      type: object
      properties:
        recordsEmitted:
          type: integer
          format: int64
        bytesEmitted:
          type: integer
          format: int64
        stateMessagesEmitted:
          type: integer
          format: int64
        bytesCommitted:
          type: integer
          format: int64
        recordsCommitted:
          type: integer
          format: int64
        estimatedRecords:
          type: integer
          format: int64
        estimatedBytes:
          type: integer
          format: int64
    AttemptStreamStats:
      type: object
      required:
        - streamName
        - stats
      properties:
        streamName:
          type: string
        streamNamespace:
          type: string
        stats:
          $ref: "#/components/schemas/AttemptStats"
    AttemptFailureSummary:
      type: object
      required:
        - failures
      properties:
        failures:
          type: array
          items:
            $ref: "#/components/schemas/FailureReason"
        partialSuccess:
          description: True if the number of committed records for this attempt was greater than 0. False if 0 records were committed. If not set, the number of committed records is unknown.
          type: boolean
    FailureReason:
      type: object
      required:
        - timestamp
      properties:
        failureOrigin:
          $ref: "#/components/schemas/FailureOrigin"
        failureType:
          $ref: "#/components/schemas/FailureType"
        externalMessage:
          type: string
        internalMessage:
          type: string
        stacktrace:
          type: string
        retryable:
          description: True if it is known that retrying may succeed, e.g. for a transient failure. False if it is known that a retry will not succeed, e.g. for a configuration issue. If not set, retryable status is not well known.
          type: boolean
        timestamp:
          type: integer
          format: int64
    FailureOrigin:
      description: Indicates where the error originated. If not set, the origin of error is not well known.
      type: string
      enum:
        - source
        - destination
        - replication
        - persistence
        - normalization
        - dbt
        - airbyte_platform
        - unknown
    FailureType:
      description: Categorizes well known errors into types for programmatic handling. If not set, the type of error is not well known.
      type: string
      enum:
        - config_error
        - system_error
        - manual_cancellation
        - refresh_schema
        - heartbeat_timeout
    AttemptStatus:
      type: string
      enum:
        - running
        - failed
        - succeeded
    JobReadList:
      type: object
      required:
        - jobs
        - totalJobCount
      properties:
        jobs:
          type: array
          items:
            $ref: "#/components/schemas/JobWithAttemptsRead"
        totalJobCount:
          description: the total count of jobs for the specified connection
          type: integer
          format: int64
    JobInfoRead:
      type: object
      required:
        - job
        - attempts
      properties:
        job:
          $ref: "#/components/schemas/JobRead"
        attempts:
          type: array
          items:
            $ref: "#/components/schemas/AttemptInfoRead"
    JobInfoLightRead:
      type: object
      required:
        - job
      properties:
        job:
          $ref: "#/components/schemas/JobRead"
    JobOptionalRead:
      type: object
      properties:
        job:
          $ref: "#/components/schemas/JobRead"
    JobDebugInfoRead:
      type: object
      required:
        - job
        - attempts
      properties:
        job:
          $ref: "#/components/schemas/JobDebugRead"
        attempts:
          type: array
          items:
            $ref: "#/components/schemas/AttemptInfoRead"
        workflowState:
          $ref: "#/components/schemas/WorkflowStateRead"
    AttemptInfoRead:
      type: object
      required:
        - attempt
        - logs
      properties:
        attempt:
          $ref: "#/components/schemas/AttemptRead"
        logs:
          $ref: "#/components/schemas/LogRead"
    LogRead:
      type: object
      required:
        - logLines
      properties:
        logLines:
          type: array
          items:
            type: string
    SynchronousJobRead:
      type: object
      required:
        - id
        - configType
        - createdAt
        - endedAt
        - succeeded
      properties:
        id:
          type: string
          format: uuid
        configType:
          $ref: "#/components/schemas/JobConfigType"
        configId:
          description: only present if a config id was provided.
          type: string
        createdAt:
          type: integer
          format: int64
        endedAt:
          type: integer
          format: int64
        succeeded:
          type: boolean
        connectorConfigurationUpdated:
          type: boolean
          default: false
        logs:
          $ref: "#/components/schemas/LogRead"
        failureReason:
          $ref: "#/components/schemas/FailureReason"
    Pagination:
      type: object
      properties:
        pageSize:
          type: integer
        rowOffset:
          type: integer
    # Health
    HealthCheckRead:
      type: object
      required:
        - available
      properties:
        available:
          type: boolean
    # General
    CheckConnectionRead:
      type: object
      required:
        - jobInfo
      properties:
        status:
          type: string
          enum:
            - succeeded
            - failed
        message:
          type: string
        jobInfo:
          $ref: "#/components/schemas/SynchronousJobRead"
    ConnectionState:
      type: object
      description: Contains the state for a connection. The stateType field identifies what type of state it is. Only the field corresponding to that type will be set, the rest will be null. If stateType=not_set, then none of the fields will be set.
      required:
        - connectionId
        - stateType
      properties:
        stateType:
          $ref: "#/components/schemas/ConnectionStateType"
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        state: # legacy state object
          $ref: "#/components/schemas/StateBlob"
        streamState:
          type: array
          items:
            $ref: "#/components/schemas/StreamState"
        globalState:
          $ref: "#/components/schemas/GlobalState"
    StateBlob:
      type: object
    StreamState:
      type: object
      required:
        - streamDescriptor
      properties:
        streamDescriptor:
          $ref: "#/components/schemas/StreamDescriptor"
        streamState:
          $ref: "#/components/schemas/StateBlob"
    GlobalState:
      type: object
      required:
        - streamStates
      properties:
        shared_state:
          $ref: "#/components/schemas/StateBlob"
        streamStates:
          type: array
          items:
            $ref: "#/components/schemas/StreamState"
    ConnectionStateType:
      type: string
      enum:
        - global
        - stream
        - legacy
        - not_set
    CatalogDiff:
      type: object
      description: Describes the difference between two Airbyte catalogs.
      required:
        - transforms
      properties:
        transforms:
          description: list of stream transformations. order does not matter.
          type: array
          items:
            $ref: "#/components/schemas/StreamTransform"
    StreamTransform:
      type: object
      required:
        - transformType
        - streamDescriptor
      properties:
        transformType:
          type: string
          enum:
            - add_stream
            - remove_stream
            - update_stream
        streamDescriptor:
          $ref: "#/components/schemas/StreamDescriptor"
        updateStream:
          type: array
          description: list of field transformations. order does not matter.
          items:
            $ref: "#/components/schemas/FieldTransform"
    FieldTransform:
      type: object
      description: "Describes the difference between two Streams."
      required:
        - transformType
        - fieldName
        - breaking
      properties:
        transformType:
          type: string
          enum:
            - add_field
            - remove_field
            - update_field_schema
        fieldName:
          $ref: "#/components/schemas/FieldName"
        breaking:
          type: boolean
        addField:
          $ref: "#/components/schemas/FieldAdd"
        removeField:
          $ref: "#/components/schemas/FieldRemove"
        updateFieldSchema:
          $ref: "#/components/schemas/FieldSchemaUpdate"
    FieldAdd:
      type: object
      properties:
        schema:
          $ref: "#/components/schemas/FieldSchema"
    FieldRemove:
      type: object
      properties:
        schema:
          $ref: "#/components/schemas/FieldSchema"
    FieldSchemaUpdate:
      type: object
      required:
        - oldSchema
        - newSchema
      properties:
        oldSchema:
          $ref: "#/components/schemas/FieldSchema"
        newSchema:
          $ref: "#/components/schemas/FieldSchema"
    FieldName:
      description: A field name is a list of strings that form the path to the field.
      type: array
      items:
        type: string
    FieldSchema:
      description: JSONSchema representation of the field
      type: object
    ActorDefinitionResourceRequirements:
      description: actor definition specific resource requirements. if default is set, these are the requirements that should be set for ALL jobs run for this actor definition. it is overriden by the job type specific configurations. if not set, the platform will use defaults. these values will be overriden by configuration at the connection level.
      type: object
      additionalProperties: false
      properties:
        default:
          "$ref": "#/components/schemas/ResourceRequirements"
        jobSpecific:
          type: array
          items:
            "$ref": "#/components/schemas/JobTypeResourceLimit"
    ActorDefinitionRequestBody:
      type: object
      additionalProperties: false
      required:
        - actorDefinitionId
        - actorType
      properties:
        actorDefinitionId:
          type: string
          format: uuid
        actorType:
          $ref: "#/components/schemas/ActorType"
    NormalizationDestinationDefinitionConfig:
      description: describes a normalization config for destination definition
      type: object
      required:
        - supported
      additionalProperties: false
      properties:
        supported:
          type: boolean
          description: whether the destination definition supports normalization.
          default: false
        normalizationRepository:
          type: string
          description: a field indicating the name of the repository to be used for normalization. If the value of the flag is NULL - normalization is not used.
        normalizationTag:
          type: string
          description: a field indicating the tag of the docker repository to be used for normalization.
        normalizationIntegrationType:
          type: string
          description: a field indicating the type of integration dialect to use for normalization.

    JobTypeResourceLimit:
      description: sets resource requirements for a specific job type for an actor definition. these values override the default, if both are set.
      type: object
      additionalProperties: false
      required:
        - jobType
        - resourceRequirements
      properties:
        jobType:
          "$ref": "#/components/schemas/JobType"
        resourceRequirements:
          "$ref": "#/components/schemas/ResourceRequirements"
    JobType:
      description: enum that describes the different types of jobs that the platform runs.
      type: string
      enum:
        - get_spec
        - check_connection
        - discover_schema
        - sync
        - reset_connection
        - connection_updater
        - replicate
    ResourceRequirements:
      description: optional resource requirements to run workers (blank for unbounded allocations)
      type: object
      properties:
        cpu_request:
          type: string
        cpu_limit:
          type: string
        memory_request:
          type: string
        memory_limit:
          type: string
    # DB Migration
    DbMigrationState:
      type: string
      # https://github.com/flyway/flyway/blob/master/flyway-core/src/main/java/org/flywaydb/core/api/MigrationState.java
      enum:
        - pending
        - above_target
        - below_baseline
        - baseline
        - ignored
        - missing_success
        - missing_failed
        - success
        - undone
        - available
        - failed
        - out_of_order
        - future_success
        - future_failed
        - outdated
        - superseded
        - deleted
    DbMigrationRead:
      type: object
      required:
        - migrationType
        - migrationVersion
        - migrationDescription
      properties:
        migrationType:
          type: string
        migrationVersion:
          type: string
        migrationDescription:
          type: string
        migrationState:
          $ref: "#/components/schemas/DbMigrationState"
        migratedBy:
          type: string
        migratedAt:
          type: integer
          format: int64
        migrationScript:
          type: string
    DbMigrationReadList:
      type: object
      properties:
        migrations:
          type: array
          items:
            $ref: "#/components/schemas/DbMigrationRead"
    DbMigrationExecutionRead:
      type: object
      properties:
        initialVersion:
          type: string
        targetVersion:
          type: string
        executedMigrations:
          type: array
          items:
            $ref: "#/components/schemas/DbMigrationRead"
    # OAuth
    OAuthConfiguration:
      description: The values required to configure OAuth flows. The schema for this must match the `OAuthConfigSpecification.oauthUserInputFromConnectorConfigSpecification` schema.
    OAuthInputConfiguration:
      $ref: "#/components/schemas/OAuthConfiguration"
    AdvancedAuth:
      type: object
      properties:
        authFlowType:
          type: string
          enum: ["oauth2.0", "oauth1.0"]
        predicateKey:
          description: Json Path to a field in the connectorSpecification that should exist for the advanced auth to be applicable.
          type: array
          items:
            type: string
        predicateValue:
          description: Value of the predicate_key fields for the advanced auth to be applicable.
          type: string
        oauthConfigSpecification:
          "$ref": "#/components/schemas/OAuthConfigSpecification"
    OAuthConfigSpecification:
      type: object
      properties:
        oauthUserInputFromConnectorConfigSpecification:
          description: |-
            OAuth specific blob. This is a Json Schema used to validate Json configurations used as input to OAuth.
            Must be a valid non-nested JSON that refers to properties from ConnectorSpecification.connectionSpecification
            using special annotation 'path_in_connector_config'.
            These are input values the user is entering through the UI to authenticate to the connector, that might also shared
            as inputs for syncing data via the connector.

            Examples:

            if no connector values is shared during oauth flow, oauth_user_input_from_connector_config_specification=[]
            if connector values such as 'app_id' inside the top level are used to generate the API url for the oauth flow,
              oauth_user_input_from_connector_config_specification={
                app_id: {
                  type: string
                  path_in_connector_config: ['app_id']
                }
              }
            if connector values such as 'info.app_id' nested inside another object are used to generate the API url for the oauth flow,
              oauth_user_input_from_connector_config_specification={
                app_id: {
                  type: string
                  path_in_connector_config: ['info', 'app_id']
                }
              }
          $ref: "#/components/schemas/OAuthConfiguration"
        completeOAuthOutputSpecification:
          description: |-
            OAuth specific blob. This is a Json Schema used to validate Json configurations produced by the OAuth flows as they are
            returned by the distant OAuth APIs.
            Must be a valid JSON describing the fields to merge back to `ConnectorSpecification.connectionSpecification`.
            For each field, a special annotation `path_in_connector_config` can be specified to determine where to merge it,

            Examples:

                complete_oauth_output_specification={
                  refresh_token: {
                    type: string,
                    path_in_connector_config: ['credentials', 'refresh_token']
                  }
                }
          $ref: "#/components/schemas/OAuthConfiguration"
        completeOAuthServerInputSpecification:
          description: |-
            OAuth specific blob. This is a Json Schema used to validate Json configurations persisted as Airbyte Server configurations.
            Must be a valid non-nested JSON describing additional fields configured by the Airbyte Instance or Workspace Admins to be used by the
            server when completing an OAuth flow (typically exchanging an auth code for refresh token).

            Examples:

                complete_oauth_server_input_specification={
                  client_id: {
                    type: string
                  },
                  client_secret: {
                    type: string
                  }
                }
          $ref: "#/components/schemas/OAuthConfiguration"
        completeOAuthServerOutputSpecification:
          description: |-
            OAuth specific blob. This is a Json Schema used to validate Json configurations persisted as Airbyte Server configurations that
            also need to be merged back into the connector configuration at runtime.
            This is a subset configuration of `complete_oauth_server_input_specification` that filters fields out to retain only the ones that
            are necessary for the connector to function with OAuth. (some fields could be used during oauth flows but not needed afterwards, therefore
            they would be listed in the `complete_oauth_server_input_specification` but not `complete_oauth_server_output_specification`)
            Must be a valid non-nested JSON describing additional fields configured by the Airbyte Instance or Workspace Admins to be used by the
            connector when using OAuth flow APIs.
            These fields are to be merged back to `ConnectorSpecification.connectionSpecification`.
            For each field, a special annotation `path_in_connector_config` can be specified to determine where to merge it,

            Examples:

                  complete_oauth_server_output_specification={
                    client_id: {
                      type: string,
                      path_in_connector_config: ['credentials', 'client_id']
                    },
                    client_secret: {
                      type: string,
                      path_in_connector_config: ['credentials', 'client_secret']
                    }
                  }
          $ref: "#/components/schemas/OAuthConfiguration"
    SourceOauthConsentRequest:
      type: object
      required:
        - sourceDefinitionId
        - workspaceId
        - redirectUrl
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        redirectUrl:
          description: The url to redirect to after getting the user consent
          type: string
        oAuthInputConfiguration:
          $ref: "#/components/schemas/OAuthInputConfiguration"
        sourceId:
          $ref: "#/components/schemas/SourceId"
    DestinationOauthConsentRequest:
      type: object
      required:
        - destinationDefinitionId
        - workspaceId
        - redirectUrl
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        redirectUrl:
          description: The url to redirect to after getting the user consent
          type: string
        oAuthInputConfiguration:
          $ref: "#/components/schemas/OAuthInputConfiguration"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
    OAuthConsentRead:
      type: object
      required:
        - consentUrl
      properties:
        consentUrl:
          type: string
    CompleteSourceOauthRequest:
      type: object
      required:
        - sourceDefinitionId
        - workspaceId
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        redirectUrl:
          description: When completing OAuth flow to gain an access token, some API sometimes requires to verify that the app re-send the redirectUrl that was used when consent was given.
          type: string
        queryParams:
          description: The query parameters present in the redirect URL after a user granted consent e.g auth code
          type: object
          additionalProperties: true # Oauth parameters like code, state, etc.. will be different per API so we don't specify them in advance
        oAuthInputConfiguration:
          $ref: "#/components/schemas/OAuthInputConfiguration"
        returnSecretCoordinate:
          type: boolean
          description: If set to true, returns a secret coordinate which references the stored tokens. By default, returns raw tokens.
          default: false
        sourceId:
          $ref: "#/components/schemas/SourceId"
    RevokeSourceOauthTokensRequest:
      type: object
      required:
        - sourceId
        - sourceDefinitionId
        - workspaceId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        sourceId:
          $ref: "#/components/schemas/SourceId"
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
    CompleteDestinationOAuthRequest:
      type: object
      required:
        - destinationDefinitionId
        - workspaceId
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        redirectUrl:
          description: When completing OAuth flow to gain an access token, some API sometimes requires to verify that the app re-send the redirectUrl that was used when consent was given.
          type: string
        queryParams:
          description: The query parameters present in the redirect URL after a user granted consent e.g auth code
          type: object
          additionalProperties: true # Oauth parameters like code, state, etc.. will be different per API so we don't specify them in advance
        oAuthInputConfiguration:
          $ref: "#/components/schemas/OAuthInputConfiguration"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
    CompleteOAuthResponse:
      type: object
      required:
        - request_succeeded
        - auth_payload
      properties:
        request_succeeded:
          type: boolean
        request_error:
          type: string
        auth_payload:
          type: object
          additionalProperties: true # Oauth parameters like refresh/access token etc.. will be different per API, so we don't specify them in advance
    SetInstancewideSourceOauthParamsRequestBody:
      type: object
      required:
        - sourceDefinitionId
        - params
      properties:
        sourceDefinitionId:
          $ref: "#/components/schemas/SourceDefinitionId"
        params:
          type: object
          additionalProperties: true
    SetInstancewideDestinationOauthParamsRequestBody:
      type: object
      required:
        - destinationDefinitionId
        - params
      properties:
        destinationDefinitionId:
          $ref: "#/components/schemas/DestinationDefinitionId"
        params:
          type: object
          additionalProperties: true
    WorkspaceOverrideOauthParamsRequestBody:
      type: object
      required:
        - definitionId
        - params
        - workspaceId
        - actorType
      properties:
        definitionId:
          type: string
          format: uuid
        params:
          type: object
          additionalProperties: true
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        actorType:
          $ref: "#/components/schemas/ActorType"
    ActorType:
      enum:
        - source
        - destination
      type: string
    # Web Backend
    WebBackendCheckUpdatesRead:
      type: object
      description: Summary of source and destination definitions that could be updated
      required:
        - destinationDefinitions
        - sourceDefinitions
      properties:
        destinationDefinitions:
          type: integer
        sourceDefinitions:
          type: integer
    WebBackendConnectionListRequestBody:
      type: object
      required:
        - workspaceId
      properties:
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
        sourceId:
          type: array
          items:
            $ref: "#/components/schemas/SourceId"
        destinationId:
          type: array
          items:
            $ref: "#/components/schemas/DestinationId"
    WebBackendConnectionListItem:
      type: object
      description: Information about a connection that shows up in the connection list view.
      required:
        - connectionId
        - name
        - source
        - destination
        - status
        - isSyncing
        - schemaChange
      properties:
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        name:
          type: string
        scheduleType:
          $ref: "#/components/schemas/ConnectionScheduleType"
        scheduleData:
          $ref: "#/components/schemas/ConnectionScheduleData"
        status:
          $ref: "#/components/schemas/ConnectionStatus"
        source:
          $ref: "#/components/schemas/SourceSnippetRead"
        destination:
          $ref: "#/components/schemas/DestinationSnippetRead"
        latestSyncJobCreatedAt:
          $ref: "#/components/schemas/JobCreatedAt"
        latestSyncJobStatus:
          $ref: "#/components/schemas/JobStatus"
        isSyncing:
          type: boolean
        schemaChange:
          $ref: "#/components/schemas/SchemaChange"
    WebBackendConnectionRead:
      type: object
      required:
        - connectionId
        - name
        - sourceId
        - destinationId
        - syncCatalog
        - status
        - source
        - destination
        - isSyncing
        - schemaChange
        - notifySchemaChanges
        - notifySchemaChangesByEmail
        - nonBreakingChangesPreference
      properties:
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        name:
          type: string
        namespaceDefinition:
          $ref: "#/components/schemas/NamespaceDefinitionType"
        namespaceFormat:
          type: string
          description: Used when namespaceDefinition is 'customformat'. If blank then behaves like namespaceDefinition = 'destination'. If "${SOURCE_NAMESPACE}" then behaves like namespaceDefinition = 'source'.
          default: null
          example: "${SOURCE_NAMESPACE}"
        prefix:
          type: string
          description: Prefix that will be prepended to the name of each stream when it is written to the destination.
        sourceId:
          $ref: "#/components/schemas/SourceId"
        destinationId:
          $ref: "#/components/schemas/DestinationId"
        syncCatalog:
          $ref: "#/components/schemas/AirbyteCatalog"
        schedule:
          $ref: "#/components/schemas/ConnectionSchedule"
        scheduleType:
          $ref: "#/components/schemas/ConnectionScheduleType"
        scheduleData:
          $ref: "#/components/schemas/ConnectionScheduleData"
        status:
          $ref: "#/components/schemas/ConnectionStatus"
        operationIds:
          type: array
          items:
            $ref: "#/components/schemas/OperationId"
        source:
          $ref: "#/components/schemas/SourceRead"
        destination:
          $ref: "#/components/schemas/DestinationRead"
        operations:
          type: array
          items:
            $ref: "#/components/schemas/OperationRead"
        latestSyncJobCreatedAt:
          $ref: "#/components/schemas/JobCreatedAt"
        latestSyncJobStatus:
          $ref: "#/components/schemas/JobStatus"
        isSyncing:
          type: boolean
        resourceRequirements:
          $ref: "#/components/schemas/ResourceRequirements"
        catalogId:
          type: string
          format: uuid
        catalogDiff:
          $ref: "#/components/schemas/CatalogDiff"
        geography:
          $ref: "#/components/schemas/Geography"
        schemaChange:
          $ref: "#/components/schemas/SchemaChange"
        notifySchemaChanges:
          type: boolean
        notifySchemaChangesByEmail:
          type: boolean
        nonBreakingChangesPreference:
          $ref: "#/components/schemas/NonBreakingChangesPreference"
    NonBreakingChangesPreference:
      enum:
        - ignore # do nothing if we detect a schema change
        - disable # disable the connection, pausing the sync
        - propagate_columns # automatically propagate the changes on selected streams and continue syncing
        - propagate_fully # automatically propagate the changes including new streams and continue syncing
      type: string
    WebBackendConnectionReadList:
      type: object
      required:
        - connections
      properties:
        connections:
          type: array
          items:
            $ref: "#/components/schemas/WebBackendConnectionListItem"
    SyncMode:
      type: string
      enum:
        - full_refresh
        - incremental
    DestinationSyncMode:
      type: string
      enum:
        - append
        - overwrite
        #- upsert_dedup # TODO chris: SCD Type 1 can be implemented later
        - append_dedup # SCD Type 1 & 2
    AirbyteArchive:
      type: string
      format: binary
      description: Tarball Archive (.tar.gz) of Airbyte Configuration and Database
    ImportRead:
      type: object
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - succeeded
            - failed
        reason:
          type: string
    ResourceId:
      type: string
      format: uuid
    UploadRead:
      type: object
      required:
        - status
      properties:
        status:
          type: string
          enum:
            - succeeded
            - failed
        resourceId:
          $ref: "#/components/schemas/ResourceId"
    ImportRequestBody:
      type: object
      required:
        - resourceId
        - workspaceId
      properties:
        resourceId:
          $ref: "#/components/schemas/ResourceId"
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    AttemptNumber:
      type: integer
      format: int32
    WorkflowId:
      type: string
    SetWorkflowInAttemptRequestBody:
      type: object
      required:
        - jobId
        - attemptNumber
        - workflowId
      properties:
        jobId:
          $ref: "#/components/schemas/JobId"
        attemptNumber:
          $ref: "#/components/schemas/AttemptNumber"
        workflowId:
          $ref: "#/components/schemas/WorkflowId"
        processingTaskQueue:
          type: string
          default: ""
    SaveStatsRequestBody:
      type: object
      required:
        - jobId
        - attemptNumber
        - stats
      properties:
        jobId:
          $ref: "#/components/schemas/JobId"
        attemptNumber:
          $ref: "#/components/schemas/AttemptNumber"
        stats:
          $ref: "#/components/schemas/AttemptStats"
        streamStats:
          type: array
          items:
            $ref: "#/components/schemas/AttemptStreamStats"
    AttemptSyncConfig:
      type: object
      required:
        - sourceConfiguration
        - destinationConfiguration
      properties:
        sourceConfiguration:
          $ref: "#/components/schemas/SourceConfiguration"
        destinationConfiguration:
          $ref: "#/components/schemas/DestinationConfiguration"
        state:
          $ref: "#/components/schemas/ConnectionState"
    SaveAttemptSyncConfigRequestBody:
      type: object
      required:
        - jobId
        - attemptNumber
        - syncConfig
      properties:
        jobId:
          $ref: "#/components/schemas/JobId"
        attemptNumber:
          $ref: "#/components/schemas/AttemptNumber"
        syncConfig:
          $ref: "#/components/schemas/AttemptSyncConfig"
    InternalOperationResult:
      type: object
      required:
        - succeeded
      properties:
        succeeded:
          type: boolean
    DiscoverCatalogResult:
      type: object
      required:
        - catalogId
      properties:
        catalogId:
          type: string
          format: uuid
    AttemptNormalizationStatusReadList:
      type: object
      properties:
        attemptNormalizationStatuses:
          type: array
          items:
            $ref: "#/components/schemas/AttemptNormalizationStatusRead"
    AttemptNormalizationStatusRead:
      type: object
      properties:
        attemptNumber:
          $ref: "#/components/schemas/AttemptNumber"
        hasRecordsCommitted:
          type: boolean
        recordsCommitted:
          type: integer
          format: int64
        hasNormalizationFailed:
          type: boolean
    StreamStatusId:
      type: string
      format: uuid
    StreamStatusRunState:
      type: string
      description: >
        Values:
          * `PENDING` - The stream operation has been selected to run
          * `RUNNING` - The stream operation is running
          * `COMPLETE` - The stream operation ran successfully to completion
          * `INCOMPLETE` - The stream operation has terminated in an incomplete state.
          See StreamStatusIncompleteRunCause for more details.
      enum:
        - PENDING
        - RUNNING
        - COMPLETE
        - INCOMPLETE
    StreamStatusIncompleteRunCause:
      type: string
      description: >
        Values:
          * `FAILED` - A failure has occurred
          * `CANCELED` - The run has been canceled
      enum:
        - FAILED
        - CANCELED
    StreamStatusJobType:
      type: string
      enum:
        - SYNC
        - RESET
    StreamStatusListRequestBody:
      type: object
      required:
        - pagination
        - workspaceId
      properties:
        attemptNumber:
          $ref: "#/components/schemas/AttemptNumber"
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        jobId:
          $ref: "#/components/schemas/JobId"
        jobType:
          $ref: "#/components/schemas/StreamStatusJobType"
        pagination:
          $ref: "#/components/schemas/Pagination"
        streamName:
          type: string
        streamNamespace:
          type: string
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    StreamStatusCreateRequestBody:
      type: object
      required:
        - attemptNumber
        - connectionId
        - jobId
        - jobType
        - runState
        - streamName
        - transitionedAt
        - workspaceId
      properties:
        attemptNumber:
          $ref: "#/components/schemas/AttemptNumber"
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        jobId:
          $ref: "#/components/schemas/JobId"
        incompleteRunCause:
          $ref: "#/components/schemas/StreamStatusIncompleteRunCause"
        jobType:
          $ref: "#/components/schemas/StreamStatusJobType"
        runState:
          $ref: "#/components/schemas/StreamStatusRunState"
        streamName:
          type: string
        streamNamespace:
          type: string
        transitionedAt:
          type: integer
          format: int64
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    StreamStatusUpdateRequestBody:
      type: object
      allOf:
        - $ref: "#/components/schemas/StreamStatusCreateRequestBody"
      required:
        - id
      properties:
        id:
          $ref: "#/components/schemas/StreamStatusId"
    StreamStatusRead:
      type: object
      required:
        - attemptNumber
        - connectionId
        - id
        - jobId
        - jobType
        - runState
        - streamName
        - streamNamespace
        - transitionedAt
        - workspaceId
      properties:
        attemptNumber:
          $ref: "#/components/schemas/AttemptNumber"
        connectionId:
          $ref: "#/components/schemas/ConnectionId"
        id:
          $ref: "#/components/schemas/StreamStatusId"
        jobId:
          $ref: "#/components/schemas/JobId"
        incompleteRunCause:
          $ref: "#/components/schemas/StreamStatusIncompleteRunCause"
        jobType:
          $ref: "#/components/schemas/StreamStatusJobType"
        runState:
          $ref: "#/components/schemas/StreamStatusRunState"
        streamName:
          type: string
        streamNamespace:
          type: string
        transitionedAt:
          type: integer
          format: int64
        workspaceId:
          $ref: "#/components/schemas/WorkspaceId"
    StreamStatusReadList:
      type: object
      properties:
        streamStatuses:
          type: array
          items:
            $ref: "#/components/schemas/StreamStatusRead"
    InvalidInputProperty:
      type: object
      required:
        - propertyPath
      properties:
        propertyPath:
          type: string
        invalidValue:
          type: string
        message:
          type: string
    NotFoundKnownExceptionInfo:
      type: object
      required:
        - message
      properties:
        id:
          type: string
        message:
          type: string
        exceptionClassName:
          type: string
        exceptionStack:
          type: array
          items:
            type: string
        rootCauseExceptionClassName:
          type: string
        rootCauseExceptionStack:
          type: array
          items:
            type: string
    KnownExceptionInfo:
      type: object
      required:
        - message
      properties:
        message:
          type: string
        exceptionClassName:
          type: string
        exceptionStack:
          type: array
          items:
            type: string
        rootCauseExceptionClassName:
          type: string
        rootCauseExceptionStack:
          type: array
          items:
            type: string
    InvalidInputExceptionInfo:
      type: object
      required:
        - message
        - validationErrors
      properties:
        message:
          type: string
        exceptionClassName:
          type: string
        exceptionStack:
          type: array
          items:
            type: string
        validationErrors:
          type: array
          items:
            $ref: "#/components/schemas/InvalidInputProperty"

  responses:
    NotFoundResponse:
      description: Object with given id was not found.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/NotFoundKnownExceptionInfo"
    InvalidInputResponse:
      description: Input failed validation
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/InvalidInputExceptionInfo"
    ExceptionResponse:
      description: Exception occurred; see message for details.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/KnownExceptionInfo"
security:
  - {}