{
 "openapi": "3.1.0",
 "info": {
  "title": "Prequel Data Import",
  "description": "Data Import API spec",
  "version": "2023-12-01"
 },
 "servers": [
  {
   "url": "https://api.prequel.co",
   "description": "Cloud-hosted server (US)"
  },
  {
   "url": "https://eu-api.prequel.co",
   "description": "Cloud-hosted server (EU)"
  },
  {
   "url": "https://{custom_host}",
   "description": "Self-hosted Prequel API host"
  }
 ],
 "security": [
  {
   "ApiKeyAuth": []
  }
 ],
 "paths": {
  "/logs": {
   "get": {
    "summary": "List logs",
    "description": "Returns the audit logs for all events.",
    "operationId": "list-logs",
    "tags": [
     "Monitoring \u0026 Logging"
    ],
    "parameters": [
     {
      "name": "count",
      "in": "query",
      "required": false,
      "description": "Number of logs to return.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "description": "Offset of logs to return.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "min_time",
      "in": "query",
      "required": false,
      "description": "Minimum timestamp of logs to return.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "event_type",
      "in": "query",
      "required": false,
      "description": "Type of event to filter logs by.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/list-event-log-response",
           "$ref": "#/components/schemas/ListEventLogResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/logs/{log_id}": {
   "get": {
    "summary": "Get log",
    "description": "Returns the specified audit log.",
    "operationId": "get-log",
    "tags": [
     "Monitoring \u0026 Logging"
    ],
    "parameters": [
     {
      "name": "log_id",
      "in": "path",
      "required": true,
      "description": "Log ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "count",
      "in": "query",
      "required": false,
      "description": "Number of logs to return.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "description": "Offset of logs to return.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "min_time",
      "in": "query",
      "required": false,
      "description": "Minimum timestamp of logs to return.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "event_type",
      "in": "query",
      "required": false,
      "description": "Type of event to filter logs by.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/get-event-log-response",
           "$ref": "#/components/schemas/GetEventLogResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/webhooks": {
   "get": {
    "summary": "List webhooks",
    "description": "The webhooks endpoint returns the configured data webhooks. A webhook is an HTTP-based callback function.",
    "operationId": "list-webhooks",
    "tags": [
     "Webhooks"
    ],
    "parameters": [
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/list-webhook-response",
           "$ref": "#/components/schemas/ListWebhookResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "post": {
    "summary": "Create webhook",
    "description": "Add a new webhook destination to monitor transfer failures. All errors resulting from transfers that do not succeed will be delivered to this webhook endpoint for monitoring or logging.",
    "operationId": "create-webhook",
    "tags": [
     "Webhooks"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/create-webhook-request",
        "$ref": "#/components/schemas/CreateWebhookRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/webhook-response",
           "$ref": "#/components/schemas/WebhookResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/webhooks/{webhook_id}": {
   "get": {
    "summary": "Get webhook",
    "description": "The endpoint returns the details of a specific webhook by the given ID.",
    "operationId": "get-webhook",
    "tags": [
     "Webhooks"
    ],
    "parameters": [
     {
      "name": "webhook_id",
      "in": "path",
      "required": true,
      "description": "Webhook ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/webhook-response",
           "$ref": "#/components/schemas/WebhookResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "patch": {
    "summary": "Update webhook",
    "description": "Update an existing webhook.",
    "operationId": "update-webhook",
    "tags": [
     "Webhooks"
    ],
    "parameters": [
     {
      "name": "webhook_id",
      "in": "path",
      "required": true,
      "description": "Webhook ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/update-webhook-request",
        "$ref": "#/components/schemas/UpdateWebhookRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/webhook-response",
           "$ref": "#/components/schemas/WebhookResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "delete": {
    "summary": "Delete webhook",
    "description": "Delete an existing webhook.",
    "operationId": "delete-webhook",
    "tags": [
     "Webhooks"
    ],
    "parameters": [
     {
      "name": "webhook_id",
      "in": "path",
      "required": true,
      "description": "Webhook ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/validation/no-response-body",
           "$ref": "#/components/schemas/NoResponseBody"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/actions/generate-scoped-auth-token": {
   "post": {
    "summary": "Generate Import Scoped Auth Token",
    "description": "Generate a scoped auth token for a specific import provider.",
    "operationId": "create-import-scoped-auth-token",
    "tags": [
     "Auth"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-scoped-auth-token-request",
        "$ref": "#/components/schemas/CreateScopedAuthTokenRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-scoped-auth-token-response",
           "$ref": "#/components/schemas/CreateScopedAuthTokenResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datalakes": {
   "get": {
    "summary": "List datalakes",
    "description": "Retrieve list of datalakes.",
    "operationId": "list-datalakes",
    "tags": [
     "Datalakes"
    ],
    "parameters": [
     {
      "name": "storage",
      "in": "query",
      "required": false,
      "description": "Filter by storage type (s3, s3_compatible, gcs, abs).",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-datalakes-response",
           "$ref": "#/components/schemas/ListDatalakesResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "post": {
    "summary": "Create datalake",
    "description": "Add a new datalake.",
    "operationId": "create-datalake",
    "tags": [
     "Datalakes"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-datalake-request",
        "$ref": "#/components/schemas/CreateDatalakeRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-datalake-response",
           "$ref": "#/components/schemas/GetDatalakeResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datalakes/{id}": {
   "get": {
    "summary": "Get datalake",
    "description": "Retrieve an datalake.",
    "operationId": "get-datalake",
    "tags": [
     "Datalakes"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Datalake ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-datalake-response",
           "$ref": "#/components/schemas/GetDatalakeResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "patch": {
    "summary": "Update datalake",
    "description": "Update an existing datalake.",
    "operationId": "update-datalake",
    "tags": [
     "Datalakes"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Datalake ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/update-datalake-request",
        "$ref": "#/components/schemas/UpdateDatalakeRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-datalake-response",
           "$ref": "#/components/schemas/GetDatalakeResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "delete": {
    "summary": "Delete datalake",
    "description": "Delete an existing datalake. This will delete all files in the datalake.",
    "operationId": "delete-datalake",
    "tags": [
     "Datalakes"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Datalake ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/validation/no-response-body",
           "$ref": "#/components/schemas/NoResponseBody"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datalakes/{id}/query": {
   "post": {
    "summary": "Query datalake",
    "description": "Execute a query against a datalake.",
    "operationId": "query-datalake",
    "tags": [
     "Datalakes"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Datalake ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/datalake-query-request",
        "$ref": "#/components/schemas/DatalakeQueryRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/datalake-query-response",
           "$ref": "#/components/schemas/DatalakeQueryResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/providers": {
   "get": {
    "summary": "List providers",
    "description": "Retrieve list of providers.",
    "operationId": "list-providers",
    "tags": [
     "Providers"
    ],
    "parameters": [
     {
      "name": "datalake_id",
      "in": "query",
      "required": false,
      "description": "Filter by datalake ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "is_enabled",
      "in": "query",
      "required": false,
      "description": "Filter by enabled status (true or false).",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-providers-response",
           "$ref": "#/components/schemas/ListProvidersResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "post": {
    "summary": "Create provider",
    "description": "Add a new provider.",
    "operationId": "create-provider",
    "tags": [
     "Providers"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-provider-request",
        "$ref": "#/components/schemas/CreateProviderRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-provider-response",
           "$ref": "#/components/schemas/GetProviderResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/providers/{id}": {
   "get": {
    "summary": "Get provider",
    "description": "Retrieve a provider.",
    "operationId": "get-provider",
    "tags": [
     "Providers"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Provider ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-provider-response",
           "$ref": "#/components/schemas/GetProviderResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "patch": {
    "summary": "Update provider",
    "description": "Update an existing provider.",
    "operationId": "update-provider",
    "tags": [
     "Providers"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Provider ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/update-provider-request",
        "$ref": "#/components/schemas/UpdateProviderRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-provider-response",
           "$ref": "#/components/schemas/GetProviderResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "delete": {
    "summary": "Delete provider",
    "description": "Delete an existing provider.",
    "operationId": "delete-provider",
    "tags": [
     "Providers"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Provider ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/validation/no-response-body",
           "$ref": "#/components/schemas/NoResponseBody"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/sources": {
   "get": {
    "summary": "List import sources",
    "description": "Retrieve list of import sources.",
    "operationId": "list-import-sources",
    "tags": [
     "Import Sources"
    ],
    "parameters": [
     {
      "name": "vendor",
      "in": "query",
      "required": false,
      "description": "Filter by vendor type (postgres, redshift).",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "provider_id",
      "in": "query",
      "required": false,
      "description": "Filter by provider ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-sources-response",
           "$ref": "#/components/schemas/ListSourcesResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "post": {
    "summary": "Create import source",
    "description": "Add a new import source.",
    "operationId": "create-import-source",
    "tags": [
     "Import Sources"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-source-request",
        "$ref": "#/components/schemas/CreateSourceRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-source-response",
           "$ref": "#/components/schemas/GetSourceResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/sources/{id}": {
   "get": {
    "summary": "Get import source",
    "description": "Retrieve an import source.",
    "operationId": "get-import-source",
    "tags": [
     "Import Sources"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Source ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-source-response",
           "$ref": "#/components/schemas/GetSourceResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "patch": {
    "summary": "Update import source",
    "description": "Update an existing import source.",
    "operationId": "update-import-source",
    "tags": [
     "Import Sources"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Source ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/update-source-request",
        "$ref": "#/components/schemas/UpdateSourceRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-source-response",
           "$ref": "#/components/schemas/GetSourceResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "delete": {
    "summary": "Delete import source",
    "description": "Delete an existing import source.",
    "operationId": "delete-import-source",
    "tags": [
     "Import Sources"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Source ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/validation/no-response-body",
           "$ref": "#/components/schemas/NoResponseBody"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/sources/{id}/get-tables": {
   "post": {
    "summary": "List import source tables",
    "description": "List tables and columns from an import source by querying information_schema.",
    "operationId": "list-import-source-tables",
    "tags": [
     "Import Sources"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Source ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-source-tables-response",
           "$ref": "#/components/schemas/ListSourceTablesResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/sources/{id}/get-schema": {
   "post": {
    "summary": "Get import source schema",
    "description": "Get column schema for an import source table or SQL query.",
    "operationId": "get-import-source-schema",
    "tags": [
     "Import Sources"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Source ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/source-preview-options",
        "$ref": "#/components/schemas/SourcePreviewOptions"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/source-schema-response",
           "$ref": "#/components/schemas/SourceSchemaResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/sources/{id}/preview": {
   "post": {
    "summary": "Preview import source data",
    "description": "Preview records from an import source table or SQL query.",
    "operationId": "preview-import-source",
    "tags": [
     "Import Sources"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Source ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/source-preview-options",
        "$ref": "#/components/schemas/SourcePreviewOptions"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/source-preview-response",
           "$ref": "#/components/schemas/SourcePreviewResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datasets": {
   "get": {
    "summary": "List import datasets",
    "description": "Retrieve list of import datasets.",
    "operationId": "list-import-datasets",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-datasets-response",
           "$ref": "#/components/schemas/ListDatasetsResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "post": {
    "summary": "Create import dataset",
    "description": "Add a new import dataset.",
    "operationId": "create-import-dataset",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "skip_validation",
      "in": "query",
      "required": false,
      "description": "Skip validation when creating or updating.",
      "schema": {
       "type": "boolean"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-dataset-request",
        "$ref": "#/components/schemas/CreateDatasetRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-dataset-response",
           "$ref": "#/components/schemas/GetDatasetResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datasets/{id}": {
   "get": {
    "summary": "Get import dataset",
    "description": "Retrieve an import dataset.",
    "operationId": "get-import-dataset",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Dataset ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-dataset-response",
           "$ref": "#/components/schemas/GetDatasetResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "patch": {
    "summary": "Update import dataset",
    "description": "Update an existing import dataset.",
    "operationId": "update-import-dataset",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Dataset ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "skip_validation",
      "in": "query",
      "required": false,
      "description": "Skip validation when creating or updating.",
      "schema": {
       "type": "boolean"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/update-dataset-request",
        "$ref": "#/components/schemas/UpdateDatasetRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-dataset-response",
           "$ref": "#/components/schemas/GetDatasetResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "delete": {
    "summary": "Delete import dataset",
    "description": "Delete an existing import dataset.",
    "operationId": "delete-import-dataset",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Dataset ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/validation/no-response-body",
           "$ref": "#/components/schemas/NoResponseBody"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datasets/{id}/schema": {
   "get": {
    "summary": "Get import dataset schema",
    "description": "Get the historical schema of an import dataset.",
    "operationId": "get-import-dataset-schema",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Dataset ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-dataset-schema-response",
           "$ref": "#/components/schemas/GetDatasetSchemaResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datasets/{id}/extract": {
   "post": {
    "summary": "Initialize import extract",
    "description": "Manually initialize an extract for an import dataset.",
    "operationId": "initialize-extract",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Dataset ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/initialize-extract-request",
        "$ref": "#/components/schemas/InitializeExtractRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/initialize-extract-response",
           "$ref": "#/components/schemas/InitializeExtractResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datasets/{id}/random-sample": {
   "post": {
    "summary": "Random sample dataset",
    "description": "Get a random sample of records from an import dataset.",
    "operationId": "get-import-dataset-random-sample",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Dataset ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/dataset-random-sample-request",
        "$ref": "#/components/schemas/DatasetRandomSampleRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/dataset-random-sample-response",
           "$ref": "#/components/schemas/DatasetRandomSampleResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/datasets/{id}/records/{record_id}": {
   "get": {
    "summary": "Get import dataset record",
    "description": "Retrieve a presigned URL for a specific record from the datalake.",
    "operationId": "get-import-dataset-record",
    "tags": [
     "Import Datasets"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Dataset ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "record_id",
      "in": "path",
      "required": true,
      "description": "Import Record ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "as_of",
      "in": "query",
      "required": false,
      "description": "Retrieve record state as of this RFC3339 timestamp.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-record-response",
           "$ref": "#/components/schemas/GetRecordResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/destinations": {
   "get": {
    "summary": "List import destinations",
    "description": "Retrieve list of import destinations.",
    "operationId": "list-import-destinations",
    "tags": [
     "Import Destinations"
    ],
    "parameters": [
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-destinations-response",
           "$ref": "#/components/schemas/ListDestinationsResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "post": {
    "summary": "Create import destination",
    "description": "Add a new import destination.",
    "operationId": "create-import-destination",
    "tags": [
     "Import Destinations"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-destination-request",
        "$ref": "#/components/schemas/CreateDestinationRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-destination-response",
           "$ref": "#/components/schemas/GetDestinationResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/destinations/{id}": {
   "get": {
    "summary": "Get import destination",
    "description": "Retrieve an import destination by ID.",
    "operationId": "get-import-destination",
    "tags": [
     "Import Destinations"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Destination ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-destination-response",
           "$ref": "#/components/schemas/GetDestinationResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "patch": {
    "summary": "Update import destination",
    "description": "Update an existing import destination.",
    "operationId": "update-import-destination",
    "tags": [
     "Import Destinations"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Destination ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "force",
      "in": "query",
      "required": false,
      "description": "Allow updating immutable fields in staging.",
      "schema": {
       "type": "boolean"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/update-destination-request",
        "$ref": "#/components/schemas/UpdateDestinationRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-destination-response",
           "$ref": "#/components/schemas/GetDestinationResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "delete": {
    "summary": "Delete import destination",
    "description": "Delete an existing import destination.",
    "operationId": "delete-import-destination",
    "tags": [
     "Import Destinations"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Destination ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/validation/no-response-body",
           "$ref": "#/components/schemas/NoResponseBody"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/products": {
   "get": {
    "summary": "List import products",
    "description": "Retrieve list of import products.",
    "operationId": "list-import-products",
    "tags": [
     "Import Products"
    ],
    "parameters": [
     {
      "name": "product_name",
      "in": "query",
      "required": false,
      "description": "Product name. Multiple values can be provided as a comma-separated string.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-products-response",
           "$ref": "#/components/schemas/ListProductsResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "post": {
    "summary": "Create import product",
    "description": "Add a new import product.",
    "operationId": "create-import-product",
    "tags": [
     "Import Products"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-product-request",
        "$ref": "#/components/schemas/CreateProductRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-product-response",
           "$ref": "#/components/schemas/GetProductResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/products/{id}": {
   "get": {
    "summary": "Get import product",
    "description": "Retrieve an import product by ID.",
    "operationId": "get-import-product",
    "tags": [
     "Import Products"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Product ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-product-response",
           "$ref": "#/components/schemas/GetProductResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "patch": {
    "summary": "Update import product",
    "description": "Update an existing import product.",
    "operationId": "update-import-product",
    "tags": [
     "Import Products"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Product ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/update-product-request",
        "$ref": "#/components/schemas/UpdateProductRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-product-response",
           "$ref": "#/components/schemas/GetProductResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "delete": {
    "summary": "Delete import product",
    "description": "Delete an existing import product.",
    "operationId": "delete-import-product",
    "tags": [
     "Import Products"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Product ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/validation/no-response-body",
           "$ref": "#/components/schemas/NoResponseBody"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/streams": {
   "get": {
    "summary": "List import streams",
    "description": "Retrieve list of import streams.",
    "operationId": "list-import-streams",
    "tags": [
     "Import Streams"
    ],
    "parameters": [
     {
      "name": "dataset_id",
      "in": "query",
      "required": false,
      "description": "Filter by dataset ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "destination_id",
      "in": "query",
      "required": false,
      "description": "Filter by destination ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-streams-response",
           "$ref": "#/components/schemas/ListStreamsResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "post": {
    "summary": "Create import stream",
    "description": "Add a new import stream.",
    "operationId": "create-import-stream",
    "tags": [
     "Import Streams"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-stream-request",
        "$ref": "#/components/schemas/CreateStreamRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-stream-response",
           "$ref": "#/components/schemas/GetStreamResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/streams/{id}": {
   "get": {
    "summary": "Get import stream",
    "description": "Retrieve an import stream by ID.",
    "operationId": "get-import-stream",
    "tags": [
     "Import Streams"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Stream ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-stream-response",
           "$ref": "#/components/schemas/GetStreamResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "patch": {
    "summary": "Update import stream",
    "description": "Update an existing import stream.",
    "operationId": "update-import-stream",
    "tags": [
     "Import Streams"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Stream ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/update-stream-request",
        "$ref": "#/components/schemas/UpdateStreamRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-stream-response",
           "$ref": "#/components/schemas/GetStreamResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   },
   "delete": {
    "summary": "Delete import stream",
    "description": "Delete an existing import stream.",
    "operationId": "delete-import-stream",
    "tags": [
     "Import Streams"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Stream ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/validation/no-response-body",
           "$ref": "#/components/schemas/NoResponseBody"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/streams/{id}/load": {
   "post": {
    "summary": "Initialize load",
    "description": "Initialize a new load for a stream with optional record IDs.",
    "operationId": "initialize-load",
    "tags": [
     "Import Streams"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Stream ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/initialize-load-request",
        "$ref": "#/components/schemas/InitializeLoadRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/initialize-load-response",
           "$ref": "#/components/schemas/InitializeLoadResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/streams/{id}/acknowledge": {
   "post": {
    "summary": "Initialize acknowledgement",
    "description": "Initialize an acknowledgement job for a stream.",
    "operationId": "initialize-acknowledge",
    "tags": [
     "Import Streams"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Stream ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/initialize-acknowledge-request",
        "$ref": "#/components/schemas/InitializeAcknowledgeRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/initialize-acknowledge-response",
           "$ref": "#/components/schemas/InitializeAcknowledgeResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/streams/{id}/test-transform": {
   "post": {
    "summary": "Test stream transform",
    "description": "Test transforming a predefined set of records for an import stream. Optionally accepts a partial 'stream' body to preview the transform output as if the stream were patched (without persisting the patch).",
    "operationId": "test-import-stream-transform",
    "tags": [
     "Import Streams"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Stream ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-stream-transform-request",
        "$ref": "#/components/schemas/TestStreamTransformRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-stream-transform-response",
           "$ref": "#/components/schemas/TestStreamTransformResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/streams/{id}/test-load": {
   "post": {
    "summary": "Test stream load",
    "description": "Test loading a predefined set of records for an import stream. This endpoint runs transforms and invokes the destination in 'test mode', returning the outcome without persisting state.",
    "operationId": "test-import-stream-load",
    "tags": [
     "Import Streams"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Stream ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-stream-load-request",
        "$ref": "#/components/schemas/TestStreamLoadRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-stream-load-response",
           "$ref": "#/components/schemas/TestStreamLoadResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/test-stream": {
   "post": {
    "summary": "Test new stream",
    "description": "Validate a candidate (unsaved) stream definition and run its mapping transforms against a sample of extracted records from the named dataset. Does not persist the stream.",
    "operationId": "create-import-stream-test",
    "tags": [
     "Import Streams"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-new-stream-request",
        "$ref": "#/components/schemas/TestNewStreamRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-stream-transform-response",
           "$ref": "#/components/schemas/TestStreamTransformResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/test-load": {
   "post": {
    "summary": "Test new stream load",
    "description": "Validate a candidate (unsaved) stream definition and run its load mapping against a sample of records. Does not persist the stream.",
    "operationId": "test-new-import-stream-load",
    "tags": [
     "Import Streams"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-new-stream-load-request",
        "$ref": "#/components/schemas/TestNewStreamLoadRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-stream-load-response",
           "$ref": "#/components/schemas/TestStreamLoadResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/test-source": {
   "post": {
    "summary": "Test new import source",
    "description": "Validate a candidate (unsaved) import source definition by probing connectivity and credentials. Does not persist the source.",
    "operationId": "create-import-source-test",
    "tags": [
     "Import Sources"
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-new-source-request",
        "$ref": "#/components/schemas/TestNewSourceRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-source-response",
           "$ref": "#/components/schemas/TestSourceResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/sources/{id}/test-source": {
   "post": {
    "summary": "Test import source",
    "description": "Probe an import source's connectivity and credentials. Optionally accepts a partial 'source' body to preview a credential change without persisting it.",
    "operationId": "test-import-source",
    "tags": [
     "Import Sources"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Source ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-source-request",
        "$ref": "#/components/schemas/TestSourceRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/test-source-response",
           "$ref": "#/components/schemas/TestSourceResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/extracts": {
   "get": {
    "summary": "List import extracts",
    "description": "List all import extracts for the organization.",
    "operationId": "list-import-extracts",
    "tags": [
     "Import Extracts"
    ],
    "parameters": [
     {
      "name": "dataset_id",
      "in": "query",
      "required": false,
      "description": "Filter by dataset ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-extracts-response",
           "$ref": "#/components/schemas/ListExtractsResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/extracts/{id}": {
   "get": {
    "summary": "Get import extract",
    "description": "Get a specific import extract by ID.",
    "operationId": "get-import-extract",
    "tags": [
     "Import Extracts"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Extract ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-extract-response",
           "$ref": "#/components/schemas/GetExtractResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/extracts/{id}/debug": {
   "get": {
    "summary": "Get import extract debug rows",
    "description": "Retrieve the rows that were mutated in an extraction.",
    "operationId": "get-import-extract-debug",
    "tags": [
     "Import Extracts"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Extract ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "has_error",
      "in": "query",
      "required": false,
      "description": "Filter by error status (true or false).",
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "Number of items to return.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "description": "Offset of logs to return.",
      "schema": {
       "type": "integer"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/extract-debug-response",
           "$ref": "#/components/schemas/ExtractDebugResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/extracts/{id}/cancel": {
   "post": {
    "summary": "Cancel import extract",
    "description": "Cancel a running import extract by ID.",
    "operationId": "cancel-import-extract",
    "tags": [
     "Import Extracts"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Extract ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-extract-response",
           "$ref": "#/components/schemas/GetExtractResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/loads": {
   "get": {
    "summary": "List import loads",
    "description": "List all import loads for the organization.",
    "operationId": "list-import-loads",
    "tags": [
     "Import Loads"
    ],
    "parameters": [
     {
      "name": "stream_id",
      "in": "query",
      "required": false,
      "description": "Filter by stream ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "page_size",
      "in": "query",
      "required": false,
      "description": "Number of items to return per page.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "order",
      "in": "query",
      "required": false,
      "description": "Sort order for items",
      "schema": {
       "type": "string",
       "enum": [
        "asc",
        "desc"
       ]
      }
     },
     {
      "name": "cursor",
      "in": "query",
      "required": false,
      "description": "Used for pagination - represents last page seen. Value is included in response when there is a next page.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/list-loads-response",
           "$ref": "#/components/schemas/ListLoadsResponse"
          },
          "message": {
           "type": "string"
          },
          "has_next": {
           "type": "boolean",
           "description": "Whether there are more items beyond this page."
          },
          "next_url": {
           "type": "string",
           "description": "Full URL to fetch the next page. Only present when has_next is true."
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message",
          "has_next"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/loads/{id}": {
   "get": {
    "summary": "Get import load",
    "description": "Get a specific import load by ID.",
    "operationId": "get-import-load",
    "tags": [
     "Import Loads"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Load ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-load-response",
           "$ref": "#/components/schemas/GetLoadResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/loads/{id}/debug": {
   "get": {
    "summary": "Get import load debug rows",
    "description": "Retrieve the rows that were mutated in a load.",
    "operationId": "get-import-load-debug",
    "tags": [
     "Import Loads"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Load ID.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "has_error",
      "in": "query",
      "required": false,
      "description": "Filter by error status (true or false).",
      "schema": {
       "type": "boolean"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "description": "Number of items to return.",
      "schema": {
       "type": "integer"
      }
     },
     {
      "name": "offset",
      "in": "query",
      "required": false,
      "description": "Offset of logs to return.",
      "schema": {
       "type": "integer"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/load-debug-response",
           "$ref": "#/components/schemas/LoadDebugResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/loads/{id}/cancel": {
   "post": {
    "summary": "Cancel import load",
    "description": "Cancel a running import load by ID.",
    "operationId": "cancel-import-load",
    "tags": [
     "Import Loads"
    ],
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "description": "Import Load ID.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "security": [
     {
      "ApiKeyAuth": []
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/get-load-response",
           "$ref": "#/components/schemas/GetLoadResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/": {
   "get": {
    "summary": "API Status",
    "description": "Ping the Prequel API to make sure it is operating.",
    "operationId": "get-health-check",
    "tags": [
     "Health"
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/health-check-response",
           "$ref": "#/components/schemas/HealthCheckResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/public/signatures/object-storage-manifest-public-key": {
   "get": {
    "summary": "Get object storage manifest signature public key",
    "description": "Get the public key you can use to verify object storage manifests.",
    "operationId": "get-object-storage-manifest-public-key",
    "tags": [
     "Signatures"
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/public-key-response",
           "$ref": "#/components/schemas/PublicKeyResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/public/signatures/webhook-public-key": {
   "get": {
    "summary": "Get webhook signature public key",
    "description": "Get the current public key used to verify webhook signatures. Clients should fetch this value instead of hardcoding it because the key may change.",
    "operationId": "get-webhook-public-key",
    "tags": [
     "Signatures"
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/public-key-response",
           "$ref": "#/components/schemas/PublicKeyResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/actions/generate-ssh-key": {
   "post": {
    "summary": "Generate SSH Key",
    "description": "Generate an SSH public key to authenticate into a bastion host when SSH tunneling is enabled. Unused keys are automatically deleted after 30 days.",
    "operationId": "create-ssh-key",
    "tags": [
     "Auth"
    ],
    "parameters": [
     {
      "name": "recipient_id",
      "in": "query",
      "required": false,
      "description": "Recipient ID. Use either Recipient ID or Organization ID but not both.",
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "org_id",
      "in": "query",
      "required": false,
      "description": "Organization ID. Use either Recipient ID or Organization ID but not both.",
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/ssh-key-response",
           "$ref": "#/components/schemas/SSHKeyResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  },
  "/import/forms/sources": {
   "post": {
    "summary": "Create import source form",
    "description": "Generate fields for an import source form from a partial source definition.",
    "operationId": "create-import-source-form",
    "tags": [
     "Import Sources"
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/create-source-request",
        "$ref": "#/components/schemas/CreateSourceRequest"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "OK",
      "content": {
       "application/json": {
        "schema": {
         "properties": {
          "status": {
           "type": "string",
           "const": "success"
          },
          "data": {
           "$schema": "https://json-schema.org/draft/2020-12/schema",
           "$id": "https://github.com/prequel-co/datafeed/internal/import/api/models/source-form-response",
           "$ref": "#/components/schemas/SourceFormResponse"
          },
          "message": {
           "type": "string"
          }
         },
         "type": "object",
         "required": [
          "status",
          "data",
          "message"
         ]
        }
       }
      }
     },
     "400": {
      "$ref": "#/components/responses/BadRequest"
     },
     "401": {
      "$ref": "#/components/responses/Unauthorized"
     },
     "404": {
      "$ref": "#/components/responses/NotFound"
     },
     "500": {
      "$ref": "#/components/responses/InternalServerError"
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "ErrorResponse": {
    "properties": {
     "status": {
      "type": "string",
      "const": "error"
     },
     "message": {
      "type": "string"
     },
     "data": {
      "type": "null"
     }
    },
    "type": "object",
    "required": [
     "status",
     "message"
    ]
   },
   "Actor": {
    "properties": {
     "actor_id": {
      "type": "string",
      "description": "The ID of the agent that triggered the event."
     },
     "type": {
      "type": "string",
      "enum": [
       "unknown",
       "user",
       "api_key",
       "recipient"
      ],
      "description": "The type of agent that triggered the event."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "actor_id",
     "type"
    ]
   },
   "EventLog": {
    "properties": {
     "id": {
      "type": "string"
     },
     "created_at": {
      "type": "string",
      "format": "date-time"
     },
     "event_type": {
      "type": "string",
      "enum": [
       "DESTINATION_ADD",
       "DESTINATION_DELETE",
       "DESTINATION_UPDATE",
       "DESTINATION_ENABLE_ALL",
       "DESTINATION_PAUSE_ALL",
       "SOURCE_ADD",
       "SOURCE_DELETE",
       "SOURCE_UPDATE",
       "RECIPIENT_ADD",
       "RECIPIENT_DELETE",
       "RECIPIENT_UPDATE",
       "MODEL_ADD",
       "MODEL_UPDATE",
       "MODEL_DELETE",
       "PRODUCT_ADD",
       "PRODUCT_UPDATE",
       "PRODUCT_DELETE",
       "MAGIC_LINK_CREATE",
       "MAGIC_LINK_DELETE",
       "WEBHOOK_ADD",
       "WEBHOOK_DELETE",
       "WEBHOOK_UPDATE",
       "RECIPIENT_SOURCE_CREDENTIAL_ADD",
       "RECIPIENT_SOURCE_CREDENTIAL_DELETE",
       "RECIPIENT_SOURCE_CREDENTIAL_UPDATE",
       "API_KEY_ADD",
       "API_KEY_DELETE",
       "USER_ADD",
       "USER_DELETE",
       "TRANSFER_CANCELED"
      ]
     },
     "resource_id": {
      "type": "string"
     },
     "actor": {
      "$ref": "#/components/schemas/Actor"
     },
     "previous_object": true,
     "object": true
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "id",
     "created_at",
     "event_type",
     "resource_id",
     "actor"
    ]
   },
   "ListEventLogResponse": {
    "properties": {
     "event_logs": {
      "items": {
       "$ref": "#/components/schemas/EventLog"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "event_logs"
    ]
   },
   "GetEventLogResponse": {
    "properties": {
     "event_log": {
      "$ref": "#/components/schemas/EventLog"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "event_log"
    ]
   },
   "ListWebhookResponse": {
    "properties": {
     "webhooks": {
      "items": {
       "$ref": "#/components/schemas/Webhook"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "webhooks"
    ]
   },
   "StringArray": {
    "items": {
     "type": "string"
    },
    "type": "array"
   },
   "Webhook": {
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "vendor": {
      "type": "string"
     },
     "url": {
      "type": "string"
     },
     "api_key": {
      "type": "string"
     },
     "api_version": {
      "type": "string"
     },
     "created_at": {
      "type": "string",
      "format": "date-time"
     },
     "updated_at": {
      "type": "string",
      "format": "date-time"
     },
     "events": {
      "$ref": "#/components/schemas/StringArray"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "id",
     "name",
     "vendor",
     "url",
     "api_version",
     "created_at",
     "updated_at",
     "events"
    ]
   },
   "CreateWebhookRequest": {
    "properties": {
     "webhook": {
      "$ref": "#/components/schemas/WebhookOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "webhook"
    ]
   },
   "WebhookOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/HttpWebhookOptions",
      "title": "HTTP"
     },
     {
      "$ref": "#/components/schemas/PagerDutyWebhookOptions",
      "title": "PagerDuty"
     },
     {
      "$ref": "#/components/schemas/SlackWebhookOptions",
      "title": "Slack"
     },
     {
      "$ref": "#/components/schemas/DatadogWebhookOptions",
      "title": "Datadog"
     }
    ]
   },
   "WebhookResponse": {
    "properties": {
     "webhook": {
      "$ref": "#/components/schemas/Webhook"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "webhook"
    ]
   },
   "UpdateWebhookOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/UpdateHttpWebhookOptions",
      "title": "HTTP"
     },
     {
      "$ref": "#/components/schemas/UpdatePagerDutyWebhookOptions",
      "title": "PagerDuty"
     },
     {
      "$ref": "#/components/schemas/UpdateSlackWebhookOptions",
      "title": "Slack"
     },
     {
      "$ref": "#/components/schemas/UpdateDatadogWebhookOptions",
      "title": "Datadog"
     }
    ]
   },
   "UpdateWebhookRequest": {
    "properties": {
     "webhook": {
      "$ref": "#/components/schemas/UpdateWebhookOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "webhook"
    ]
   },
   "NoResponseBody": {
    "properties": {},
    "additionalProperties": false,
    "type": "object"
   },
   "ABSSourceOptions": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "Container name"
     },
     "storage_account_name": {
      "type": "string",
      "title": "Storage account name"
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "azure_service_shared_access_signature"
      ],
      "title": "Auth method",
      "oneof_title_azure_service_shared_access_signature": "SAS Token"
     },
     "azure_service_shared_access_signature": {
      "$ref": "#/components/schemas/AzureServiceSharedAccessSignature",
      "title": "SAS Token"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "bucket_name",
     "storage_account_name",
     "auth_method",
     "azure_service_shared_access_signature"
    ]
   },
   "AWSAccessKeys": {
    "properties": {
     "access_id": {
      "type": "string",
      "title": "Bucket access ID"
     },
     "secret_key": {
      "type": "string",
      "title": "Bucket secret key"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "access_id",
     "secret_key"
    ]
   },
   "AWSIAMRole": {
    "properties": {
     "aws_iam_role_arn": {
      "type": "string",
      "title": "IAM role ARN",
      "default": "arn:aws:iam::123456789012:role/service-role/role-name"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "aws_iam_role_arn"
    ]
   },
   "AzureServiceSharedAccessSignature": {
    "properties": {
     "shared_access_signature_token": {
      "type": "string",
      "title": "Storage Account SAS Token"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "shared_access_signature_token"
    ]
   },
   "BearerTokenAuth": {
    "properties": {
     "bearer_token": {
      "type": "string",
      "title": "Bearer Token"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "bearer_token"
    ]
   },
   "BigQuerySourceOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/BigQuerySourceOptionsGCPServiceAccountRole"
     },
     {
      "$ref": "#/components/schemas/BigQuerySourceOptionsFederatedGCPServiceAccountRole"
     },
     {
      "$ref": "#/components/schemas/BigQuerySourceOptionsGCPServiceAccountKey"
     }
    ],
    "discriminator": {
     "mapping": {
      "federated_gcp_service_account_role": "#/components/schemas/BigQuerySourceOptionsFederatedGCPServiceAccountRole",
      "gcp_service_account_key": "#/components/schemas/BigQuerySourceOptionsGCPServiceAccountKey",
      "gcp_service_account_role": "#/components/schemas/BigQuerySourceOptionsGCPServiceAccountRole"
     },
     "propertyName": "auth_method"
    }
   },
   "CreateScopedAuthTokenRequest": {
    "properties": {
     "application_origin": {
      "type": "string",
      "description": "The origin of the application requesting the scoped auth token."
     },
     "provider_id": {
      "type": "string",
      "format": "uuid",
      "description": "The provider ID."
     },
     "source": {
      "$ref": "#/components/schemas/SourceOptions",
      "description": "The source for the scoped auth token."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "application_origin",
     "provider_id",
     "source"
    ]
   },
   "CredentialSource": {
    "properties": {
     "environment_id": {
      "type": "string"
     },
     "region_url": {
      "type": "string"
     },
     "url": {
      "type": "string"
     },
     "regional_cred_verification_url": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "environment_id",
     "region_url",
     "url",
     "regional_cred_verification_url"
    ]
   },
   "DeltaSharingSourceOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/DeltaSharingSourceOptionsBearerToken"
     },
     {
      "$ref": "#/components/schemas/DeltaSharingSourceOptionsOAuth2"
     }
    ],
    "discriminator": {
     "mapping": {
      "bearer_token": "#/components/schemas/DeltaSharingSourceOptionsBearerToken",
      "oauth2": "#/components/schemas/DeltaSharingSourceOptionsOAuth2"
     },
     "propertyName": "auth_method"
    }
   },
   "FederatedGCPServiceAccountRole": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "title": "Service account email",
      "default": "service-account-name@project-id.iam.gserviceaccount.com"
     },
     "workload_identity_federation_metadata": {
      "$ref": "#/components/schemas/GcpExternalAccountMetadata",
      "title": "Workload identity metadata"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email"
    ]
   },
   "GCPServiceAccountRole": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "title": "Service account email",
      "default": "service-account-name@project-id.iam.gserviceaccount.com"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email"
    ]
   },
   "GCPSourceServiceAccountKey": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "title": "Source service account email",
      "default": "service-account-name@project-id.iam.gserviceaccount.com"
     },
     "service_account_key": {
      "title": "JSON Token",
      "description": "The credentials (JSON) that will be used to extract data from your BigQuery database. Create a service account just for this use."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email",
     "service_account_key"
    ]
   },
   "GCSAccessKeys": {
    "properties": {
     "access_key": {
      "type": "string",
      "title": "Bucket access ID",
      "description": "The access key to use for authentication."
     },
     "secret": {
      "type": "string",
      "title": "Bucket secret key",
      "description": "The secret to use for authentication."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "access_key",
     "secret"
    ]
   },
   "GCSSourceOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/GCSSourceOptionsGCPServiceAccountRole"
     },
     {
      "$ref": "#/components/schemas/GCSSourceOptionsFederatedGCPServiceAccountRole"
     },
     {
      "$ref": "#/components/schemas/GCSSourceOptionsGCSHMACKeys"
     },
     {
      "$ref": "#/components/schemas/GCSSourceOptionsGCPServiceAccountKey"
     }
    ],
    "discriminator": {
     "mapping": {
      "federated_gcp_service_account_role": "#/components/schemas/GCSSourceOptionsFederatedGCPServiceAccountRole",
      "gcp_service_account_key": "#/components/schemas/GCSSourceOptionsGCPServiceAccountKey",
      "gcp_service_account_role": "#/components/schemas/GCSSourceOptionsGCPServiceAccountRole",
      "gcs_hmac_keys": "#/components/schemas/GCSSourceOptionsGCSHMACKeys"
     },
     "propertyName": "auth_method"
    }
   },
   "GcpExternalAccountMetadata": {
    "properties": {
     "type": {
      "type": "string"
     },
     "audience": {
      "type": "string"
     },
     "subject_token_type": {
      "type": "string"
     },
     "service_account_impersonation_url": {
      "type": "string"
     },
     "token_url": {
      "type": "string"
     },
     "credential_source": {
      "$ref": "#/components/schemas/CredentialSource"
     }
    },
    "type": "object",
    "required": [
     "type",
     "audience",
     "subject_token_type",
     "service_account_impersonation_url",
     "token_url",
     "credential_source"
    ]
   },
   "OAuthAuth": {
    "properties": {
     "client_id": {
      "type": "string",
      "title": "Client ID"
     },
     "client_secret": {
      "type": "string",
      "title": "Client Secret"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "client_id",
     "client_secret"
    ]
   },
   "PasswordAuth": {
    "properties": {
     "username": {
      "type": "string",
      "title": "Username"
     },
     "password": {
      "type": "string",
      "title": "Password"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "username",
     "password"
    ]
   },
   "PostgresSourceOptions": {
    "properties": {
     "host": {
      "type": "string",
      "title": "Host",
      "description": "Host address of the database."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 5432
     },
     "database": {
      "type": "string",
      "title": "Database",
      "description": "Name of the database."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "password_auth"
      ],
      "title": "Auth method",
      "description": "Authentication method.",
      "oneof_title_password_auth": "Username and Password"
     },
     "password_auth": {
      "$ref": "#/components/schemas/PasswordAuth",
      "title": "Username and Password",
      "description": "Required details for username/password authentication."
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "disable_ssl": {
      "type": "boolean",
      "title": "Disable SSL"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "host",
     "port",
     "database",
     "auth_method",
     "password_auth"
    ]
   },
   "PublicKeyAuth": {
    "properties": {
     "public_key": {
      "type": "string",
      "title": "Public key",
      "description": "This is the PKCS8 public key generated for keypair authentication."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "public_key"
    ]
   },
   "RedshiftAccessKeys": {
    "properties": {
     "password": {
      "type": "string",
      "title": "Password"
     },
     "access_id": {
      "type": "string",
      "title": "Bucket access ID"
     },
     "secret_key": {
      "type": "string",
      "title": "Bucket secret key"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "password",
     "access_id",
     "secret_key"
    ]
   },
   "RedshiftServerlessSourceOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/RedshiftServerlessSourceOptionsAWSAccessKeys"
     },
     {
      "$ref": "#/components/schemas/RedshiftServerlessSourceOptionsAWSIAMRole"
     }
    ],
    "discriminator": {
     "mapping": {
      "aws_access_keys": "#/components/schemas/RedshiftServerlessSourceOptionsAWSAccessKeys",
      "aws_iam_role": "#/components/schemas/RedshiftServerlessSourceOptionsAWSIAMRole"
     },
     "propertyName": "auth_method"
    }
   },
   "RedshiftSourceOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/RedshiftSourceOptionsAWSAccessKeys"
     },
     {
      "$ref": "#/components/schemas/RedshiftSourceOptionsAWSIAMRole"
     }
    ],
    "discriminator": {
     "mapping": {
      "aws_access_keys": "#/components/schemas/RedshiftSourceOptionsAWSAccessKeys",
      "aws_iam_role": "#/components/schemas/RedshiftSourceOptionsAWSIAMRole"
     },
     "propertyName": "auth_method"
    }
   },
   "S3CompatibleSourceOptions": {
    "properties": {
     "host": {
      "type": "string",
      "title": "Host"
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port"
     },
     "bucket_name": {
      "type": "string",
      "title": "Bucket name"
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "access_keys"
      ],
      "title": "Auth method",
      "oneof_title_access_keys": "Access Keys"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/AWSAccessKeys",
      "title": "Access Keys",
      "description": "Required details for access key authentication."
     },
     "disable_ssl": {
      "type": "boolean",
      "title": "Disable SSL"
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "host",
     "port",
     "bucket_name",
     "auth_method",
     "aws_access_keys"
    ]
   },
   "S3SourceOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/S3SourceOptionsAWSIAMRole"
     },
     {
      "$ref": "#/components/schemas/S3SourceOptionsAWSAccessKeys"
     }
    ],
    "discriminator": {
     "mapping": {
      "aws_access_keys": "#/components/schemas/S3SourceOptionsAWSAccessKeys",
      "aws_iam_role": "#/components/schemas/S3SourceOptionsAWSIAMRole"
     },
     "propertyName": "auth_method"
    }
   },
   "SFTPSourceOptions": {
    "properties": {
     "username": {
      "type": "string",
      "title": "Username"
     },
     "host": {
      "type": "string",
      "title": "Host"
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 22
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "public_key_auth"
      ],
      "title": "Auth method",
      "oneof_title_public_key_auth": "Key Pair Authentication"
     },
     "public_key_auth": {
      "$ref": "#/components/schemas/PublicKeyAuth",
      "title": "Key Pair Authentication"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "username",
     "host",
     "port",
     "auth_method",
     "public_key_auth"
    ]
   },
   "SSHTunnelParams": {
    "properties": {
     "ssh_tunnel_host": {
      "type": "string",
      "title": "SSH tunnel host"
     },
     "ssh_tunnel_port": {
      "type": "integer",
      "title": "SSH tunnel port",
      "default": 22
     },
     "ssh_tunnel_username": {
      "type": "string",
      "title": "SSH tunnel username"
     },
     "ssh_public_key": {
      "type": "string",
      "enum": [
       "primary_public_key",
       "secondary_public_key"
      ],
      "title": "SSH Public Key",
      "description": "This is the public SSH key that will be used to establish the SSH tunnel. It should be added to the list of authorized keys on the bastion host."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "ssh_tunnel_host",
     "ssh_tunnel_port",
     "ssh_tunnel_username"
    ]
   },
   "SnowflakeSourceOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/SnowflakeSourceOptionsPublicKeyAuth"
     }
    ],
    "discriminator": {
     "mapping": {
      "public_key_auth": "#/components/schemas/SnowflakeSourceOptionsPublicKeyAuth"
     },
     "propertyName": "auth_method"
    }
   },
   "SourceOptions": {
    "oneOf": [
     {
      "properties": {
       "vendor": {
        "const": "postgres"
       },
       "postgres": {
        "$ref": "#/components/schemas/PostgresSourceOptions",
        "title": "PostgreSQL"
       }
      },
      "required": [
       "vendor",
       "postgres"
      ],
      "title": "PostgreSQL"
     },
     {
      "properties": {
       "vendor": {
        "const": "redshift"
       },
       "redshift": {
        "$ref": "#/components/schemas/RedshiftSourceOptions",
        "title": "Amazon Redshift"
       }
      },
      "required": [
       "vendor",
       "redshift"
      ],
      "title": "Amazon Redshift"
     },
     {
      "properties": {
       "vendor": {
        "const": "redshift_serverless"
       },
       "redshift_serverless": {
        "$ref": "#/components/schemas/RedshiftServerlessSourceOptions",
        "title": "Amazon Redshift Serverless"
       }
      },
      "required": [
       "vendor",
       "redshift_serverless"
      ],
      "title": "Amazon Redshift Serverless"
     },
     {
      "properties": {
       "vendor": {
        "const": "bigquery"
       },
       "bigquery": {
        "$ref": "#/components/schemas/BigQuerySourceOptions",
        "title": "Google BigQuery"
       }
      },
      "required": [
       "vendor",
       "bigquery"
      ],
      "title": "Google BigQuery"
     },
     {
      "properties": {
       "vendor": {
        "const": "s3"
       },
       "s3": {
        "$ref": "#/components/schemas/S3SourceOptions",
        "title": "Amazon S3"
       }
      },
      "required": [
       "vendor",
       "s3"
      ],
      "title": "Amazon S3"
     },
     {
      "properties": {
       "vendor": {
        "const": "abs"
       },
       "abs": {
        "$ref": "#/components/schemas/ABSSourceOptions",
        "title": "Azure Blob Storage"
       }
      },
      "required": [
       "vendor",
       "abs"
      ],
      "title": "Azure Blob Storage"
     },
     {
      "properties": {
       "vendor": {
        "const": "sftp"
       },
       "sftp": {
        "$ref": "#/components/schemas/SFTPSourceOptions",
        "title": "SFTP"
       }
      },
      "required": [
       "vendor",
       "sftp"
      ],
      "title": "SFTP"
     },
     {
      "properties": {
       "vendor": {
        "const": "gcs"
       },
       "gcs": {
        "$ref": "#/components/schemas/GCSSourceOptions",
        "title": "Google Cloud Storage"
       }
      },
      "required": [
       "vendor",
       "gcs"
      ],
      "title": "Google Cloud Storage"
     },
     {
      "properties": {
       "vendor": {
        "const": "s3_compatible"
       },
       "s3_compatible": {
        "$ref": "#/components/schemas/S3CompatibleSourceOptions",
        "title": "S3 Compatible"
       }
      },
      "required": [
       "vendor",
       "s3_compatible"
      ],
      "title": "S3 Compatible"
     },
     {
      "properties": {
       "vendor": {
        "const": "snowflake"
       },
       "snowflake": {
        "$ref": "#/components/schemas/SnowflakeSourceOptions",
        "title": "Snowflake"
       }
      },
      "required": [
       "vendor",
       "snowflake"
      ],
      "title": "Snowflake"
     },
     {
      "properties": {
       "vendor": {
        "const": "delta_sharing"
       },
       "delta_sharing": {
        "$ref": "#/components/schemas/DeltaSharingSourceOptions",
        "title": "Delta Sharing"
       }
      },
      "required": [
       "vendor",
       "delta_sharing"
      ],
      "title": "Delta Sharing"
     }
    ],
    "properties": {
     "provider_id": {
      "type": "string",
      "title": "Provider ID",
      "description": "ID of the import provider this source belongs to."
     },
     "name": {
      "type": "string",
      "title": "Name",
      "description": "Unique name for this import source."
     }
    },
    "type": "object",
    "required": [
     "provider_id",
     "name"
    ],
    "unevaluatedProperties": false
   },
   "CreateScopedAuthTokenResponse": {
    "properties": {
     "scoped_token": {
      "type": "string",
      "description": "The scoped auth token."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "scoped_token"
    ]
   },
   "ABSDatalakeResource": {
    "properties": {
     "prefix": {
      "type": "string"
     },
     "container_name": {
      "type": "string"
     },
     "storage_account_name": {
      "type": "string"
     },
     "auth_method": {
      "type": "string"
     },
     "azure_storage_account_access_key": {
      "$ref": "#/components/schemas/AzureStorageAccountAccessKeyResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "prefix",
     "container_name",
     "storage_account_name",
     "auth_method"
    ]
   },
   "AWSAccessKeysResource": {
    "properties": {
     "access_key_id": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "access_key_id"
    ]
   },
   "AWSIAMRoleResource": {
    "properties": {
     "aws_iam_role": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "aws_iam_role"
    ]
   },
   "AzureStorageAccountAccessKeyResource": {
    "properties": {},
    "additionalProperties": false,
    "type": "object"
   },
   "DatalakeResource": {
    "oneOf": [
     {
      "properties": {
       "storage": {
        "const": "s3"
       },
       "s3": {
        "$ref": "#/components/schemas/S3DatalakeResource"
       }
      },
      "required": [
       "storage",
       "s3"
      ],
      "title": "s3"
     },
     {
      "properties": {
       "storage": {
        "const": "s3_compatible"
       },
       "s3_compatible": {
        "$ref": "#/components/schemas/S3CompatibleDatalakeResource"
       }
      },
      "required": [
       "storage",
       "s3_compatible"
      ],
      "title": "s3_compatible"
     },
     {
      "properties": {
       "storage": {
        "const": "gcs"
       },
       "gcs": {
        "$ref": "#/components/schemas/GCSDatalakeResource"
       }
      },
      "required": [
       "storage",
       "gcs"
      ],
      "title": "gcs"
     },
     {
      "properties": {
       "storage": {
        "const": "abs"
       },
       "abs": {
        "$ref": "#/components/schemas/ABSDatalakeResource"
       }
      },
      "required": [
       "storage",
       "abs"
      ],
      "title": "abs"
     }
    ],
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "retention_window_days": {
      "type": "integer"
     },
     "created_at": {
      "type": "string"
     },
     "updated_at": {
      "type": "string"
     }
    },
    "type": "object",
    "required": [
     "id",
     "name",
     "created_at",
     "updated_at"
    ],
    "unevaluatedProperties": false
   },
   "FederatedGCPDatalakeServiceAccountRoleResource": {
    "properties": {
     "gcp_service_account_email": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "gcp_service_account_email"
    ]
   },
   "GCPDatalakeServiceAccountKeyResource": {
    "properties": {
     "service_account_email": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email"
    ]
   },
   "GCPDatalakeServiceAccountRoleResource": {
    "properties": {
     "gcp_service_account_email": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "gcp_service_account_email"
    ]
   },
   "GCSDatalakeResource": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/GCSDatalakeResourceGCPServiceAccountRole"
     },
     {
      "$ref": "#/components/schemas/GCSDatalakeResourceGCPServiceAccountKey"
     },
     {
      "$ref": "#/components/schemas/GCSDatalakeResourceFederatedGCPServiceAccountRole"
     }
    ],
    "discriminator": {
     "mapping": {
      "federated_gcp_service_account_role": "#/components/schemas/GCSDatalakeResourceFederatedGCPServiceAccountRole",
      "gcp_service_account_key": "#/components/schemas/GCSDatalakeResourceGCPServiceAccountKey",
      "gcp_service_account_role": "#/components/schemas/GCSDatalakeResourceGCPServiceAccountRole"
     },
     "propertyName": "auth_method"
    }
   },
   "ListDatalakesResponse": {
    "properties": {
     "datalakes": {
      "items": {
       "$ref": "#/components/schemas/DatalakeResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "datalakes"
    ]
   },
   "S3CompatibleDatalakeResource": {
    "properties": {
     "prefix": {
      "type": "string"
     },
     "bucket_name": {
      "type": "string"
     },
     "bucket_region": {
      "type": "string"
     },
     "bucket_host": {
      "type": "string"
     },
     "bucket_port": {
      "type": "integer"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/AWSAccessKeysResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "bucket_host",
     "bucket_port",
     "aws_access_keys"
    ]
   },
   "S3DatalakeResource": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/S3DatalakeResourceAWSIAMRole"
     },
     {
      "$ref": "#/components/schemas/S3DatalakeResourceAWSAccessKeys"
     }
    ],
    "discriminator": {
     "mapping": {
      "aws_access_keys": "#/components/schemas/S3DatalakeResourceAWSAccessKeys",
      "aws_iam_role": "#/components/schemas/S3DatalakeResourceAWSIAMRole"
     },
     "propertyName": "auth_method"
    }
   },
   "ABSDatalakeOptions": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the ABS bucket."
     },
     "container_name": {
      "type": "string",
      "title": "Container Name"
     },
     "storage_account_name": {
      "type": "string",
      "title": "Storage Account Name"
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "azure_storage_account_access_key"
      ],
      "title": "Auth Method"
     },
     "azure_storage_account_access_key": {
      "$ref": "#/components/schemas/AzureStorageAccountAccessKey",
      "description": "Required parameters to authenticate to Azure using an access key."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "prefix",
     "container_name",
     "storage_account_name",
     "auth_method"
    ]
   },
   "AzureStorageAccountAccessKey": {
    "properties": {
     "storage_account_access_key": {
      "type": "string",
      "title": "Access key"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "storage_account_access_key"
    ]
   },
   "CreateDatalakeRequest": {
    "properties": {
     "datalake": {
      "$ref": "#/components/schemas/DatalakeOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "datalake"
    ]
   },
   "DatalakeOptions": {
    "oneOf": [
     {
      "properties": {
       "storage": {
        "const": "s3"
       },
       "s3": {
        "$ref": "#/components/schemas/S3DatalakeOptions",
        "title": "S3 Configuration"
       }
      },
      "required": [
       "storage",
       "s3"
      ],
      "title": "S3 Configuration"
     },
     {
      "properties": {
       "storage": {
        "const": "s3_compatible"
       },
       "s3_compatible": {
        "$ref": "#/components/schemas/S3CompatibleDatalakeOptions",
        "title": "S3-Compatible Configuration"
       }
      },
      "required": [
       "storage",
       "s3_compatible"
      ],
      "title": "S3-Compatible Configuration"
     },
     {
      "properties": {
       "storage": {
        "const": "gcs"
       },
       "gcs": {
        "$ref": "#/components/schemas/GCSDatalakeOptions",
        "title": "Google Cloud Storage Configuration"
       }
      },
      "required": [
       "storage",
       "gcs"
      ],
      "title": "Google Cloud Storage Configuration"
     },
     {
      "properties": {
       "storage": {
        "const": "abs"
       },
       "abs": {
        "$ref": "#/components/schemas/ABSDatalakeOptions",
        "title": "Azure Blob Storage Configuration"
       }
      },
      "required": [
       "storage",
       "abs"
      ],
      "title": "Azure Blob Storage Configuration"
     }
    ],
    "properties": {
     "name": {
      "type": "string",
      "title": "Name",
      "description": "Unique name for this import datalake."
     },
     "retention_window_days": {
      "type": "integer",
      "title": "Retention Window (Days)",
      "description": "Number of days to retain data. Null means infinite retention."
     }
    },
    "type": "object",
    "required": [
     "name"
    ],
    "unevaluatedProperties": false
   },
   "FederatedGCPDatalakeServiceAccountRole": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "title": "Datalake service account email",
      "default": "service-account-name@project-id.iam.gserviceaccount.com"
     },
     "workload_identity_federation_metadata": {
      "$ref": "#/components/schemas/GcpExternalAccountMetadata",
      "title": "Workload identity metadata"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email"
    ]
   },
   "GCPDatalakeServiceAccountKey": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "title": "Datalake service account email",
      "default": "service-account-name@project-id.iam.gserviceaccount.com"
     },
     "service_account_key": {
      "title": "JSON Token",
      "description": "The credentials (JSON) that will be used to access the datalake. Create a service account just for this use."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email",
     "service_account_key"
    ]
   },
   "GCPDatalakeServiceAccountRole": {
    "properties": {
     "gcp_service_account_email": {
      "type": "string",
      "title": "GCP Service Account Email",
      "description": "Email of the GCP service account."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "gcp_service_account_email"
    ]
   },
   "GCSDatalakeOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/GCSDatalakeOptionsGCPServiceAccountRole"
     },
     {
      "$ref": "#/components/schemas/GCSDatalakeOptionsGCPServiceAccountKey"
     },
     {
      "$ref": "#/components/schemas/GCSDatalakeOptionsFederatedGCPServiceAccountRole"
     }
    ],
    "discriminator": {
     "mapping": {
      "federated_gcp_service_account_role": "#/components/schemas/GCSDatalakeOptionsFederatedGCPServiceAccountRole",
      "gcp_service_account_key": "#/components/schemas/GCSDatalakeOptionsGCPServiceAccountKey",
      "gcp_service_account_role": "#/components/schemas/GCSDatalakeOptionsGCPServiceAccountRole"
     },
     "propertyName": "auth_method"
    }
   },
   "S3CompatibleDatalakeOptions": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the S3 bucket."
     },
     "bucket_name": {
      "type": "string",
      "title": "Bucket Name"
     },
     "bucket_region": {
      "type": "string",
      "title": "Region"
     },
     "bucket_host": {
      "type": "string",
      "title": "Host"
     },
     "bucket_port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 443
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/AWSAccessKeys",
      "description": "Access credentials for S3-compatible storage."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "bucket_host",
     "bucket_port",
     "aws_access_keys"
    ]
   },
   "S3DatalakeOptions": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/S3DatalakeOptionsAWSIAMRole"
     },
     {
      "$ref": "#/components/schemas/S3DatalakeOptionsAWSAccessKeys"
     }
    ],
    "discriminator": {
     "mapping": {
      "aws_access_keys": "#/components/schemas/S3DatalakeOptionsAWSAccessKeys",
      "aws_iam_role": "#/components/schemas/S3DatalakeOptionsAWSIAMRole"
     },
     "propertyName": "auth_method"
    }
   },
   "GetDatalakeResponse": {
    "properties": {
     "datalake": {
      "$ref": "#/components/schemas/DatalakeResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "datalake"
    ]
   },
   "DatalakeUpdateOptions": {
    "properties": {
     "name": {
      "type": "string",
      "description": "Unique name for this import datalake."
     },
     "retention_window_days": {
      "type": "integer",
      "description": "Number of days to retain data. Null means infinite retention."
     },
     "s3": {
      "$ref": "#/components/schemas/UpdateS3DatalakeOptions"
     },
     "s3_compatible": {
      "$ref": "#/components/schemas/UpdateS3CompatibleDatalakeOptions"
     },
     "gcs": {
      "$ref": "#/components/schemas/UpdateGCSDatalakeOptions"
     },
     "abs": {
      "$ref": "#/components/schemas/UpdateABSDatalakeOptions"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateABSDatalakeOptions": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the ABS bucket."
     },
     "container_name": {
      "type": "string"
     },
     "storage_account_name": {
      "type": "string"
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "azure_storage_account_access_key"
      ]
     },
     "azure_storage_account_access_key": {
      "$ref": "#/components/schemas/UpdateAzureStorageAccountAccessKey"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateAWSAccessKeys": {
    "properties": {
     "access_id": {
      "type": "string",
      "description": "The access key ID to use for authentication."
     },
     "secret_key": {
      "type": "string",
      "description": "The secret key to use for authentication."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateAzureStorageAccountAccessKey": {
    "properties": {
     "storage_account_access_key": {
      "type": "string",
      "title": "Access key"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateDatalakeRequest": {
    "properties": {
     "datalake": {
      "$ref": "#/components/schemas/DatalakeUpdateOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "datalake"
    ]
   },
   "UpdateGCPDatalakeServiceAccountKey": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "description": "The email of the GCP service account to use for authentication."
     },
     "service_account_key": {
      "description": "The full Google-generated JSON service account key object."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateGCPDatalakeServiceAccountRole": {
    "properties": {
     "gcp_service_account_email": {
      "type": "string",
      "description": "Email of the GCP service account."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateGCSDatalakeOptions": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the GCS bucket."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "gcp_service_account_role",
       "gcp_service_account_key",
       "federated_gcp_service_account_role"
      ]
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/UpdateGCPDatalakeServiceAccountRole"
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/UpdateGCPDatalakeServiceAccountKey"
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/UpdateGCPDatalakeServiceAccountRole"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateS3CompatibleDatalakeOptions": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the S3 bucket."
     },
     "bucket_host": {
      "type": "string",
      "description": "Host for S3-compatible storage."
     },
     "bucket_port": {
      "type": "integer",
      "description": "Port for S3-compatible storage."
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/UpdateAWSAccessKeys"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateS3DatalakeOptions": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the S3 bucket."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "aws_iam_role",
       "aws_access_keys"
      ]
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRole"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/UpdateAWSAccessKeys"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "DatalakeQueryRequest": {
    "properties": {
     "dataset_ids": {
      "items": {
       "type": "string"
      },
      "type": "array"
     },
     "query": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "dataset_ids",
     "query"
    ]
   },
   "DatalakeQueryResponse": {
    "properties": {
     "schema": {
      "items": {
       "$ref": "#/components/schemas/QueryResultSchemaField"
      },
      "type": "array"
     },
     "records": {
      "items": true,
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "schema",
     "records"
    ]
   },
   "QueryResultSchemaField": {
    "properties": {
     "name": {
      "type": "string"
     },
     "database_type_name": {
      "type": "string"
     },
     "length": {
      "type": "integer"
     },
     "precision": {
      "type": "integer"
     },
     "scale": {
      "type": "integer"
     },
     "nullable": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name"
    ]
   },
   "ListProvidersResponse": {
    "properties": {
     "providers": {
      "items": {
       "$ref": "#/components/schemas/ProviderResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "providers"
    ]
   },
   "ProviderResource": {
    "properties": {
     "name": {
      "type": "string"
     },
     "id": {
      "type": "string"
     },
     "is_enabled": {
      "type": "boolean"
     },
     "datalake_id": {
      "type": "string"
     },
     "products": {
      "items": {
       "type": "string"
      },
      "type": "array"
     },
     "machine_type_id": {
      "type": "string"
     },
     "created_at": {
      "type": "string"
     },
     "updated_at": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "id",
     "is_enabled",
     "datalake_id",
     "products",
     "created_at",
     "updated_at"
    ]
   },
   "CreateProviderRequest": {
    "properties": {
     "provider": {
      "$ref": "#/components/schemas/ProviderOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "provider"
    ]
   },
   "ProviderOptions": {
    "properties": {
     "name": {
      "type": "string",
      "title": "Name",
      "description": "Unique name for this provider."
     },
     "id": {
      "type": "string",
      "maxLength": 64,
      "title": "ID",
      "description": "Unique identifier for this provider."
     },
     "datalake_id": {
      "type": "string",
      "format": "uuid",
      "title": "Datalake ID",
      "description": "The ID of the datalake this provider belongs to."
     },
     "is_enabled": {
      "type": "boolean",
      "title": "Enabled",
      "description": "Whether this provider is enabled."
     },
     "products": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "minItems": 1,
      "title": "Products",
      "description": "The names of the products to be assigned to this provider."
     },
     "machine_type_id": {
      "type": "string",
      "format": "uuid",
      "title": "Machine Type ID",
      "description": "Optional machine type for resource allocation."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "id",
     "datalake_id",
     "products"
    ]
   },
   "GetProviderResponse": {
    "properties": {
     "provider": {
      "$ref": "#/components/schemas/ProviderResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "provider"
    ]
   },
   "UpdateProviderOptions": {
    "properties": {
     "name": {
      "type": "string",
      "description": "Name for this provider."
     },
     "is_enabled": {
      "type": "boolean",
      "description": "Whether this provider is enabled."
     },
     "products": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "description": "The names of the products to be assigned to this provider."
     },
     "machine_type_id": {
      "type": "string",
      "format": "uuid",
      "description": "Machine type for resource allocation."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateProviderRequest": {
    "properties": {
     "provider": {
      "$ref": "#/components/schemas/UpdateProviderOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "provider"
    ]
   },
   "ABSSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "bucket_name": {
      "type": "string"
     },
     "storage_account_name": {
      "type": "string"
     },
     "auth_method": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "bucket_name",
     "storage_account_name",
     "auth_method"
    ]
   },
   "BigQuerySourceResource": {
    "oneOf": [
     {
      "$ref": "#/components/schemas/BigQuerySourceResourceGCPServiceAccountRole"
     },
     {
      "$ref": "#/components/schemas/BigQuerySourceResourceFederatedGCPServiceAccountRole"
     },
     {
      "$ref": "#/components/schemas/BigQuerySourceResourceGCPServiceAccountKey"
     }
    ],
    "discriminator": {
     "mapping": {
      "federated_gcp_service_account_role": "#/components/schemas/BigQuerySourceResourceFederatedGCPServiceAccountRole",
      "gcp_service_account_key": "#/components/schemas/BigQuerySourceResourceGCPServiceAccountKey",
      "gcp_service_account_role": "#/components/schemas/BigQuerySourceResourceGCPServiceAccountRole"
     },
     "propertyName": "auth_method"
    }
   },
   "DeltaSharingSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "host": {
      "type": "string"
     },
     "port": {
      "type": "integer"
     },
     "auth_method": {
      "type": "string"
     },
     "oauth_client_id": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "host",
     "port",
     "auth_method"
    ]
   },
   "FederatedGCPServiceAccountRoleResource": {
    "properties": {
     "service_account_email": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email"
    ]
   },
   "GCPServiceAccountKeyResource": {
    "properties": {
     "service_account_email": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email"
    ]
   },
   "GCPServiceAccountRoleResource": {
    "properties": {
     "service_account_email": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email"
    ]
   },
   "GCSAccessKeysResource": {
    "properties": {
     "access_id": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "access_id"
    ]
   },
   "GCSSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "bucket_name": {
      "type": "string"
     },
     "region": {
      "type": "string"
     },
     "auth_method": {
      "type": "string"
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/GCPServiceAccountRoleResource"
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/FederatedGCPServiceAccountRoleResource"
     },
     "gcs_hmac_keys": {
      "$ref": "#/components/schemas/GCSAccessKeysResource"
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/GCPServiceAccountKeyResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "bucket_name",
     "region",
     "auth_method"
    ]
   },
   "ListSourcesResponse": {
    "properties": {
     "sources": {
      "items": {
       "$ref": "#/components/schemas/SourceResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "sources"
    ]
   },
   "PostgresSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "host": {
      "type": "string"
     },
     "port": {
      "type": "integer"
     },
     "database": {
      "type": "string"
     },
     "username": {
      "type": "string"
     },
     "auth_method": {
      "type": "string"
     },
     "use_ssh_tunnel": {
      "type": "boolean"
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelResource"
     },
     "disable_ssl": {
      "type": "boolean"
     },
     "connection_timeout_in_seconds": {
      "type": "integer"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "host",
     "port",
     "database",
     "username",
     "auth_method",
     "use_ssh_tunnel",
     "disable_ssl",
     "connection_timeout_in_seconds"
    ]
   },
   "PublicKeyAuthResource": {
    "properties": {
     "public_key": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "public_key"
    ]
   },
   "RedshiftAccessKeysResource": {
    "properties": {
     "access_id": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "access_id"
    ]
   },
   "RedshiftServerlessSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "host": {
      "type": "string"
     },
     "port": {
      "type": "integer"
     },
     "database": {
      "type": "string"
     },
     "region": {
      "type": "string"
     },
     "workgroup": {
      "type": "string"
     },
     "auth_method": {
      "type": "string"
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRoleResource"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/RedshiftAccessKeysResource"
     },
     "use_ssh_tunnel": {
      "type": "boolean"
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelResource"
     },
     "disable_ssl": {
      "type": "boolean"
     },
     "connection_timeout_in_seconds": {
      "type": "integer"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "host",
     "port",
     "database",
     "workgroup",
     "auth_method",
     "use_ssh_tunnel",
     "disable_ssl",
     "connection_timeout_in_seconds"
    ]
   },
   "RedshiftSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "host": {
      "type": "string"
     },
     "port": {
      "type": "integer"
     },
     "database": {
      "type": "string"
     },
     "cluster": {
      "type": "string"
     },
     "region": {
      "type": "string"
     },
     "workgroup": {
      "type": "string"
     },
     "username": {
      "type": "string"
     },
     "auth_method": {
      "type": "string"
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRoleResource"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/RedshiftAccessKeysResource"
     },
     "use_ssh_tunnel": {
      "type": "boolean"
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelResource"
     },
     "disable_ssl": {
      "type": "boolean"
     },
     "connection_timeout_in_seconds": {
      "type": "integer"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "host",
     "port",
     "database",
     "auth_method",
     "use_ssh_tunnel",
     "disable_ssl",
     "connection_timeout_in_seconds"
    ]
   },
   "S3CompatibleSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "host": {
      "type": "string"
     },
     "port": {
      "type": "integer"
     },
     "bucket_name": {
      "type": "string"
     },
     "auth_method": {
      "type": "string"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/AWSAccessKeysResource"
     },
     "disable_ssl": {
      "type": "boolean"
     },
     "use_ssh_tunnel": {
      "type": "boolean"
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "host",
     "port",
     "bucket_name",
     "auth_method",
     "disable_ssl",
     "use_ssh_tunnel"
    ]
   },
   "S3SourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "bucket_name": {
      "type": "string"
     },
     "region": {
      "type": "string"
     },
     "auth_method": {
      "type": "string"
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRoleResource"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/AWSAccessKeysResource"
     },
     "bucket_host": {
      "type": "string"
     },
     "use_ssh_tunnel": {
      "type": "boolean"
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "bucket_name",
     "region",
     "auth_method",
     "use_ssh_tunnel"
    ]
   },
   "SFTPSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "username": {
      "type": "string"
     },
     "host": {
      "type": "string"
     },
     "port": {
      "type": "integer"
     },
     "auth_method": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "username",
     "host",
     "port",
     "auth_method"
    ]
   },
   "SSHTunnelResource": {
    "properties": {
     "ssh_tunnel_host": {
      "type": "string"
     },
     "ssh_tunnel_port": {
      "type": "integer"
     },
     "ssh_tunnel_username": {
      "type": "string"
     },
     "ssh_public_key": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "SnowflakeSourceResource": {
    "properties": {
     "is_valid": {
      "type": "boolean"
     },
     "host": {
      "type": "string"
     },
     "port": {
      "type": "integer"
     },
     "database": {
      "type": "string"
     },
     "username": {
      "type": "string"
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "public_key_auth"
      ]
     },
     "public_key_auth": {
      "$ref": "#/components/schemas/PublicKeyAuthResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "is_valid",
     "host",
     "port",
     "database",
     "username",
     "auth_method"
    ]
   },
   "SourceResource": {
    "oneOf": [
     {
      "properties": {
       "vendor": {
        "const": "postgres"
       },
       "postgres": {
        "$ref": "#/components/schemas/PostgresSourceResource"
       }
      },
      "required": [
       "vendor",
       "postgres"
      ],
      "title": "postgres"
     },
     {
      "properties": {
       "vendor": {
        "const": "redshift"
       },
       "redshift": {
        "$ref": "#/components/schemas/RedshiftSourceResource"
       }
      },
      "required": [
       "vendor",
       "redshift"
      ],
      "title": "redshift"
     },
     {
      "properties": {
       "vendor": {
        "const": "redshift_serverless"
       },
       "redshift_serverless": {
        "$ref": "#/components/schemas/RedshiftServerlessSourceResource"
       }
      },
      "required": [
       "vendor",
       "redshift_serverless"
      ],
      "title": "redshift_serverless"
     },
     {
      "properties": {
       "vendor": {
        "const": "bigquery"
       },
       "bigquery": {
        "$ref": "#/components/schemas/BigQuerySourceResource"
       }
      },
      "required": [
       "vendor",
       "bigquery"
      ],
      "title": "bigquery"
     },
     {
      "properties": {
       "vendor": {
        "const": "s3"
       },
       "s3": {
        "$ref": "#/components/schemas/S3SourceResource"
       }
      },
      "required": [
       "vendor",
       "s3"
      ],
      "title": "s3"
     },
     {
      "properties": {
       "vendor": {
        "const": "abs"
       },
       "abs": {
        "$ref": "#/components/schemas/ABSSourceResource"
       }
      },
      "required": [
       "vendor",
       "abs"
      ],
      "title": "abs"
     },
     {
      "properties": {
       "vendor": {
        "const": "sftp"
       },
       "sftp": {
        "$ref": "#/components/schemas/SFTPSourceResource"
       }
      },
      "required": [
       "vendor",
       "sftp"
      ],
      "title": "sftp"
     },
     {
      "properties": {
       "vendor": {
        "const": "gcs"
       },
       "gcs": {
        "$ref": "#/components/schemas/GCSSourceResource"
       }
      },
      "required": [
       "vendor",
       "gcs"
      ],
      "title": "gcs"
     },
     {
      "properties": {
       "vendor": {
        "const": "s3_compatible"
       },
       "s3_compatible": {
        "$ref": "#/components/schemas/S3CompatibleSourceResource"
       }
      },
      "required": [
       "vendor",
       "s3_compatible"
      ],
      "title": "s3_compatible"
     },
     {
      "properties": {
       "vendor": {
        "const": "snowflake"
       },
       "snowflake": {
        "$ref": "#/components/schemas/SnowflakeSourceResource"
       }
      },
      "required": [
       "vendor",
       "snowflake"
      ],
      "title": "snowflake"
     },
     {
      "properties": {
       "vendor": {
        "const": "delta_sharing"
       },
       "delta_sharing": {
        "$ref": "#/components/schemas/DeltaSharingSourceResource"
       }
      },
      "required": [
       "vendor",
       "delta_sharing"
      ],
      "title": "delta_sharing"
     }
    ],
    "properties": {
     "id": {
      "type": "string"
     },
     "provider_id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "created_at": {
      "type": "string"
     },
     "updated_at": {
      "type": "string"
     }
    },
    "type": "object",
    "required": [
     "id",
     "provider_id",
     "name",
     "created_at",
     "updated_at"
    ],
    "unevaluatedProperties": false
   },
   "CreateSourceRequest": {
    "properties": {
     "source": {
      "$ref": "#/components/schemas/SourceOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "source"
    ]
   },
   "GetSourceResponse": {
    "properties": {
     "source": {
      "$ref": "#/components/schemas/SourceResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "source"
    ]
   },
   "UpdateABSSourceOptions": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "description": "The name of the ABS container."
     },
     "storage_account_name": {
      "type": "string",
      "description": "The name of the Azure storage account."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "azure_service_shared_access_signature"
      ],
      "description": "Authentication method."
     },
     "azure_service_shared_access_signature": {
      "$ref": "#/components/schemas/UpdateAzureServiceSharedAccessSignature",
      "description": "Required parameters to authenticate to Azure using a SAS token."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateAzureServiceSharedAccessSignature": {
    "properties": {
     "shared_access_signature_token": {
      "type": "string",
      "title": "Storage Account SAS Token"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateBigQuerySourceOptions": {
    "properties": {
     "project_id": {
      "$comment": "BigQuery Project IDs must consist of 4-30 lowercase letters, numbers, and hyphens, and must begin with a lowercase letter and end with a lowercase letter or number.",
      "type": "string",
      "pattern": "^[a-z][a-z0-9-]{2,28}[a-z0-9]$",
      "title": "Project ID"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "gcp_service_account_role",
       "gcp_service_account_key",
       "federated_gcp_service_account_role"
      ],
      "title": "Auth method",
      "description": "The method of authentication to use for this source."
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/UpdateGCPServiceAccountRole",
      "description": "Required details if authenticating using a GCP service account role."
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/UpdateFederatedGCPServiceAccountRole",
      "description": "Required details if authenticating using a GCP service account role."
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/UpdateGCPSourceServiceAccountKey",
      "description": "Required details if authenticating using a GCP service account key."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateDeltaSharingSourceOptions": {
    "properties": {
     "host": {
      "type": "string",
      "description": "The hostname of the Delta Sharing server."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "The port of the Delta Sharing server."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "bearer_token",
       "oauth2"
      ]
     },
     "bearer_token": {
      "$ref": "#/components/schemas/BearerTokenAuth",
      "description": "Required details for bearer token authentication."
     },
     "oauth2": {
      "$ref": "#/components/schemas/OAuthAuth",
      "description": "Required details for OAuth2 authentication."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateFederatedGCPServiceAccountRole": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "title": "Service account email",
      "default": "service-account-name@project-id.iam.gserviceaccount.com"
     },
     "workload_identity_federation_metadata": {
      "$ref": "#/components/schemas/GcpExternalAccountMetadata",
      "title": "Workload identity metadata"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "service_account_email"
    ]
   },
   "UpdateGCPServiceAccountRole": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "description": "The email of the GCP service account to use for authentication."
     },
     "workload_identity_federation_metadata": {
      "$ref": "#/components/schemas/GcpExternalAccountMetadata",
      "title": "Workload identity metadata",
      "description": "The federation metadata to use for authentication."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateGCPSourceServiceAccountKey": {
    "properties": {
     "service_account_email": {
      "type": "string",
      "pattern": "^.*gserviceaccount.com$",
      "format": "email",
      "description": "The email of the GCP service account to use for authentication."
     },
     "service_account_key": {
      "description": "The full Google-generated JSON service account key object."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateGCSAccessKeys": {
    "properties": {
     "access_key": {
      "type": "string",
      "description": "The access key to use for authentication."
     },
     "secret": {
      "type": "string",
      "description": "The secret to use for authentication."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateGCSSourceOptions": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "description": "The name of the GCS bucket."
     },
     "region": {
      "type": "string",
      "description": "The GCP region of the GCS bucket."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "gcp_service_account_role",
       "federated_gcp_service_account_role",
       "gcs_hmac_keys",
       "gcp_service_account_key"
      ],
      "description": "Authentication method."
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/UpdateGCPServiceAccountRole",
      "description": "Required details if authenticating using a GCP service account role."
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/UpdateFederatedGCPServiceAccountRole",
      "description": "Required details if authenticating using a GCP service account role."
     },
     "gcs_hmac_keys": {
      "$ref": "#/components/schemas/UpdateGCSAccessKeys",
      "description": "Required details if authenticating using GCS HMAC keys."
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/UpdateGCPSourceServiceAccountKey",
      "description": "Required details if authenticating using a GCP service account key."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdatePasswordAuth": {
    "properties": {
     "username": {
      "type": "string",
      "description": "The username to use for authentication."
     },
     "password": {
      "type": "string",
      "description": "The password to use for authentication."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdatePostgresSourceOptions": {
    "properties": {
     "host": {
      "type": "string",
      "description": "The hostname of the PostgreSQL server."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "The port of the PostgreSQL server."
     },
     "database": {
      "type": "string",
      "description": "The name of the database to connect to."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "password_auth"
      ],
      "description": "Authentication method."
     },
     "password_auth": {
      "$ref": "#/components/schemas/UpdatePasswordAuth",
      "description": "Required details for username/password authentication."
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "disable_ssl": {
      "type": "boolean",
      "description": "Whether to disable SSL for the connection."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdatePublicKeyAuth": {
    "properties": {
     "public_key": {
      "type": "string",
      "title": "Public key",
      "description": "This is the PKCS8 public key generated for keypair authentication."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateRedshiftAccessKeys": {
    "properties": {
     "password": {
      "type": "string",
      "title": "Password"
     },
     "access_id": {
      "type": "string",
      "title": "Bucket access ID"
     },
     "secret_key": {
      "type": "string",
      "title": "Bucket secret key"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "password",
     "access_id",
     "secret_key"
    ]
   },
   "UpdateRedshiftServerlessSourceOptions": {
    "properties": {
     "host": {
      "type": "string",
      "description": "The hostname of the Redshift Serverless server."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "The port of the Redshift Serverless server."
     },
     "database": {
      "type": "string",
      "description": "The name of the database to connect to."
     },
     "workgroup": {
      "type": "string",
      "description": "The name of the Redshift Serverless workgroup."
     },
     "region": {
      "type": "string",
      "description": "The AWS region of the Redshift Serverless workgroup."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "aws_iam_role",
       "aws_access_keys"
      ]
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/UpdateRedshiftAccessKeys",
      "description": "Required details for AWS access keys authentication."
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRole",
      "description": "Required details for AWS IAM role authentication."
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "disable_ssl": {
      "type": "boolean",
      "description": "Whether to disable SSL for the connection."
     },
     "connection_timeout_in_seconds": {
      "type": "integer",
      "minimum": 0,
      "description": "Duration to wait for successful connection."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateRedshiftSourceOptions": {
    "properties": {
     "host": {
      "type": "string",
      "description": "The hostname of the Redshift server."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "The port of the Redshift server."
     },
     "database": {
      "type": "string",
      "description": "The name of the database to connect to."
     },
     "cluster": {
      "type": "string",
      "description": "The name of the Redshift cluster."
     },
     "region": {
      "type": "string",
      "description": "The AWS region of the Redshift cluster."
     },
     "workgroup": {
      "type": "string",
      "description": "The name of the Redshift Serverless workgroup."
     },
     "username": {
      "type": "string",
      "description": "The username for authentication."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "aws_iam_role",
       "aws_access_keys"
      ]
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/UpdateRedshiftAccessKeys",
      "description": "Required details for AWS access keys authentication."
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRole",
      "description": "Required details for AWS IAM role authentication."
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "disable_ssl": {
      "type": "boolean",
      "description": "Whether to disable SSL for the connection."
     },
     "connection_timeout_in_seconds": {
      "type": "integer",
      "minimum": 0,
      "description": "Duration to wait for successful connection."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateS3CompatibleSourceOptions": {
    "properties": {
     "host": {
      "type": "string",
      "description": "The hostname of the S3-compatible server."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "The port of the S3-compatible server."
     },
     "bucket_name": {
      "type": "string",
      "description": "The name of the S3-compatible bucket."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "access_keys"
      ],
      "description": "Authentication method."
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/UpdateAWSAccessKeys",
      "description": "Required details for access key authentication."
     },
     "disable_ssl": {
      "type": "boolean",
      "description": "Whether to disable SSL for the connection."
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateS3SourceOptions": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "description": "The name of the S3 bucket."
     },
     "region": {
      "type": "string",
      "description": "The AWS region of the S3 bucket."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "aws_iam_role",
       "aws_access_keys"
      ]
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRole",
      "description": "Required details for AWS IAM role authentication."
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/UpdateAWSAccessKeys",
      "description": "Required details for AWS access keys authentication."
     },
     "bucket_host": {
      "type": "string",
      "description": "The host address of the S3 bucket."
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateSFTPSourceOptions": {
    "properties": {
     "username": {
      "type": "string",
      "description": "The username for the SFTP connection."
     },
     "host": {
      "type": "string",
      "description": "The hostname of the SFTP server."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "The port of the SFTP server."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "public_key_auth"
      ],
      "description": "Authentication method."
     },
     "public_key_auth": {
      "$ref": "#/components/schemas/UpdatePublicKeyAuth",
      "description": "Required details for public key authentication."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateSnowflakeSourceOptions": {
    "properties": {
     "host": {
      "type": "string",
      "pattern": ".*\\.snowflakecomputing.com$",
      "description": "The hostname of the Snowflake account."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "description": "The port of the Snowflake server."
     },
     "database": {
      "type": "string",
      "description": "The name of the database to connect to."
     },
     "username": {
      "type": "string",
      "description": "The username for authentication."
     },
     "auth_method": {
      "type": "string",
      "enum": [
       "public_key_auth"
      ]
     },
     "public_key_auth": {
      "$ref": "#/components/schemas/UpdatePublicKeyAuth",
      "description": "Required details for public key authentication."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateSourceOptions": {
    "properties": {
     "name": {
      "type": "string",
      "description": "Unique name for this import source."
     },
     "vendor": {
      "type": "string",
      "readOnly": true
     },
     "postgres": {
      "$ref": "#/components/schemas/UpdatePostgresSourceOptions",
      "title": "PostgreSQL"
     },
     "redshift": {
      "$ref": "#/components/schemas/UpdateRedshiftSourceOptions",
      "title": "Amazon Redshift"
     },
     "redshift_serverless": {
      "$ref": "#/components/schemas/UpdateRedshiftServerlessSourceOptions",
      "title": "Amazon Redshift Serverless"
     },
     "bigquery": {
      "$ref": "#/components/schemas/UpdateBigQuerySourceOptions",
      "title": "Google BigQuery"
     },
     "s3": {
      "$ref": "#/components/schemas/UpdateS3SourceOptions",
      "title": "Amazon S3"
     },
     "abs": {
      "$ref": "#/components/schemas/UpdateABSSourceOptions",
      "title": "Azure Blob Storage"
     },
     "sftp": {
      "$ref": "#/components/schemas/UpdateSFTPSourceOptions",
      "title": "SFTP"
     },
     "gcs": {
      "$ref": "#/components/schemas/UpdateGCSSourceOptions",
      "title": "Google Cloud Storage"
     },
     "s3_compatible": {
      "$ref": "#/components/schemas/UpdateS3CompatibleSourceOptions",
      "title": "S3 Compatible"
     },
     "snowflake": {
      "$ref": "#/components/schemas/UpdateSnowflakeSourceOptions",
      "title": "Snowflake"
     },
     "delta_sharing": {
      "$ref": "#/components/schemas/UpdateDeltaSharingSourceOptions",
      "title": "Delta Sharing"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateSourceRequest": {
    "properties": {
     "source": {
      "$ref": "#/components/schemas/UpdateSourceOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "source"
    ]
   },
   "ListSourceTablesResponse": {
    "properties": {
     "tables": {
      "items": {
       "$ref": "#/components/schemas/Table"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "tables"
    ]
   },
   "SourcePreviewSchemaField": {
    "properties": {
     "name": {
      "type": "string"
     },
     "raw_type": {
      "type": "string"
     },
     "prequel_type": {
      "type": "string"
     },
     "ordinal_position": {
      "type": "integer"
     },
     "is_nullable": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "raw_type",
     "prequel_type",
     "ordinal_position"
    ]
   },
   "Table": {
    "properties": {
     "namespace": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "columns": {
      "items": {
       "$ref": "#/components/schemas/SourcePreviewSchemaField"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "namespace",
     "name",
     "columns"
    ]
   },
   "GlobOptions": {
    "properties": {
     "pattern": {
      "type": "string",
      "title": "Pattern",
      "description": "Glob pattern for object files."
     },
     "format": {
      "type": "string",
      "enum": [
       "csv",
       "parquet",
       "jsonl",
       "json"
      ],
      "title": "Format",
      "description": "Format of the object files."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "pattern",
     "format"
    ]
   },
   "SQLOptions": {
    "properties": {
     "query": {
      "type": "string",
      "title": "Query",
      "description": "SQL query to execute."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "query"
    ]
   },
   "SourcePreviewOptions": {
    "allOf": [
     {
      "oneOf": [
       {
        "properties": {
         "method": {
          "const": "table"
         },
         "table": {
          "$ref": "#/components/schemas/TableOptions",
          "title": "Table Configuration"
         }
        },
        "required": [
         "method",
         "table"
        ],
        "title": "Table Configuration"
       },
       {
        "properties": {
         "method": {
          "const": "sql"
         },
         "sql": {
          "$ref": "#/components/schemas/SQLOptions",
          "title": "SQL Configuration"
         }
        },
        "required": [
         "method",
         "sql"
        ],
        "title": "SQL Configuration"
       },
       {
        "properties": {
         "method": {
          "const": "glob"
         },
         "glob": {
          "$ref": "#/components/schemas/GlobOptions",
          "title": "Glob Configuration"
         }
        },
        "required": [
         "method",
         "glob"
        ],
        "title": "Glob Configuration"
       }
      ]
     }
    ],
    "properties": {},
    "type": "object",
    "unevaluatedProperties": false
   },
   "TableOptions": {
    "properties": {
     "source_table_namespace": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_.]+([-][A-Za-z0-9_.]+)*$",
      "title": "Source Table Namespace",
      "description": "Namespace or schema of the source table."
     },
     "source_table_name": {
      "type": "string",
      "pattern": "^[A-Za-z0-9_.]+([-][A-Za-z0-9_.]+)*$",
      "title": "Source Table Name",
      "description": "Name of the source table."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "source_table_namespace",
     "source_table_name"
    ]
   },
   "SourceSchemaResponse": {
    "properties": {
     "schema": {
      "items": {
       "$ref": "#/components/schemas/SourcePreviewSchemaField"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "schema"
    ]
   },
   "SourcePreviewResponse": {
    "properties": {
     "schema": {
      "items": {
       "$ref": "#/components/schemas/SourcePreviewSchemaField"
      },
      "type": "array"
     },
     "records": {
      "items": true,
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "schema",
     "records"
    ]
   },
   "DatasetResource": {
    "allOf": [
     {
      "oneOf": [
       {
        "properties": {
         "type": {
          "const": "dimension"
         },
         "dimension": {
          "$ref": "#/components/schemas/DimensionResource"
         }
        },
        "required": [
         "type",
         "dimension"
        ],
        "title": "dimension"
       },
       {
        "properties": {
         "type": {
          "const": "fact"
         },
         "fact": {
          "$ref": "#/components/schemas/FactResource"
         }
        },
        "required": [
         "type",
         "fact"
        ],
        "title": "fact"
       }
      ]
     },
     {
      "oneOf": [
       {
        "properties": {
         "method": {
          "const": "table"
         },
         "table": {
          "$ref": "#/components/schemas/TableResource"
         }
        },
        "required": [
         "method",
         "table"
        ],
        "title": "table"
       },
       {
        "properties": {
         "method": {
          "const": "sql"
         },
         "sql": {
          "$ref": "#/components/schemas/SQLResource"
         }
        },
        "required": [
         "method",
         "sql"
        ],
        "title": "sql"
       },
       {
        "properties": {
         "method": {
          "const": "glob"
         },
         "glob": {
          "$ref": "#/components/schemas/GlobResource"
         }
        },
        "required": [
         "method",
         "glob"
        ],
        "title": "glob"
       }
      ]
     }
    ],
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "source_id": {
      "type": "string"
     },
     "is_enabled": {
      "type": "boolean"
     },
     "frequency_minutes": {
      "type": "integer"
     },
     "datalake_schema": {
      "type": "string"
     },
     "datalake_table_name": {
      "type": "string"
     },
     "created_at": {
      "type": "string"
     },
     "updated_at": {
      "type": "string"
     }
    },
    "type": "object",
    "required": [
     "id",
     "name",
     "source_id",
     "is_enabled",
     "frequency_minutes",
     "datalake_schema",
     "datalake_table_name",
     "created_at",
     "updated_at"
    ],
    "unevaluatedProperties": false
   },
   "DimensionResource": {
    "properties": {
     "primary_key_column": {
      "type": "string"
     },
     "last_modified_column": {
      "type": "string"
     },
     "is_deleted_column": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "primary_key_column"
    ]
   },
   "FactResource": {
    "properties": {
     "primary_key_column": {
      "type": "string"
     },
     "created_at_column": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "primary_key_column",
     "created_at_column"
    ]
   },
   "GlobResource": {
    "properties": {
     "pattern": {
      "type": "string"
     },
     "format": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "pattern",
     "format"
    ]
   },
   "ListDatasetsResponse": {
    "properties": {
     "datasets": {
      "items": {
       "$ref": "#/components/schemas/DatasetResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "datasets"
    ]
   },
   "SQLResource": {
    "properties": {
     "query": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "query"
    ]
   },
   "TableResource": {
    "properties": {
     "source_table_namespace": {
      "type": "string"
     },
     "source_table_name": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "source_table_namespace",
     "source_table_name"
    ]
   },
   "CreateDatasetRequest": {
    "properties": {
     "dataset": {
      "$ref": "#/components/schemas/DatasetOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "dataset"
    ]
   },
   "DatasetOptions": {
    "allOf": [
     {
      "oneOf": [
       {
        "properties": {
         "type": {
          "const": "dimension"
         },
         "dimension": {
          "$ref": "#/components/schemas/DimensionOptions",
          "title": "Dimension Configuration"
         }
        },
        "required": [
         "type",
         "dimension"
        ],
        "title": "Dimension Configuration"
       },
       {
        "properties": {
         "type": {
          "const": "fact"
         },
         "fact": {
          "$ref": "#/components/schemas/FactOptions",
          "title": "Fact Configuration"
         }
        },
        "required": [
         "type",
         "fact"
        ],
        "title": "Fact Configuration"
       }
      ]
     },
     {
      "oneOf": [
       {
        "properties": {
         "method": {
          "const": "table"
         },
         "table": {
          "$ref": "#/components/schemas/TableOptions",
          "title": "Table Configuration"
         }
        },
        "required": [
         "method",
         "table"
        ],
        "title": "Table Configuration"
       },
       {
        "properties": {
         "method": {
          "const": "sql"
         },
         "sql": {
          "$ref": "#/components/schemas/SQLOptions",
          "title": "SQL Configuration"
         }
        },
        "required": [
         "method",
         "sql"
        ],
        "title": "SQL Configuration"
       },
       {
        "properties": {
         "method": {
          "const": "glob"
         },
         "glob": {
          "$ref": "#/components/schemas/GlobOptions",
          "title": "Glob Configuration"
         }
        },
        "required": [
         "method",
         "glob"
        ],
        "title": "Glob Configuration"
       }
      ]
     }
    ],
    "properties": {
     "name": {
      "type": "string",
      "title": "Name",
      "description": "Name of the dataset."
     },
     "source_id": {
      "type": "string",
      "format": "uuid",
      "title": "Source ID",
      "description": "ID of the import source this dataset belongs to."
     },
     "is_enabled": {
      "type": "boolean",
      "title": "Enabled",
      "description": "Whether this dataset is enabled."
     },
     "frequency_minutes": {
      "type": "integer",
      "minimum": 1,
      "title": "Frequency Minutes",
      "description": "Frequency in minutes for syncing this dataset."
     }
    },
    "type": "object",
    "required": [
     "source_id",
     "frequency_minutes"
    ],
    "unevaluatedProperties": false
   },
   "DimensionOptions": {
    "properties": {
     "primary_key_column": {
      "type": "string",
      "title": "Primary Key Column",
      "description": "Name of the primary key column."
     },
     "last_modified_column": {
      "type": "string",
      "title": "Last Modified Column",
      "description": "Name of the last modified timestamp column (optional)."
     },
     "is_deleted_column": {
      "type": "string",
      "title": "Is Deleted Column",
      "description": "Name of the soft delete column (optional)."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "primary_key_column"
    ]
   },
   "FactOptions": {
    "properties": {
     "primary_key_column": {
      "type": "string",
      "title": "Primary Key Column",
      "description": "Name of the primary key column."
     },
     "created_at_column": {
      "type": "string",
      "title": "Created At Column",
      "description": "Name of the created at timestamp column (required for facts)."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "primary_key_column",
     "created_at_column"
    ]
   },
   "GetDatasetResponse": {
    "properties": {
     "dataset": {
      "$ref": "#/components/schemas/DatasetResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "dataset"
    ]
   },
   "UpdateDatasetOptions": {
    "properties": {
     "name": {
      "type": "string",
      "description": "Name of the dataset."
     },
     "frequency_minutes": {
      "type": "integer",
      "minimum": 1,
      "description": "Frequency in minutes for syncing this dataset."
     },
     "is_enabled": {
      "type": "boolean",
      "description": "Whether this dataset is enabled."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateDatasetRequest": {
    "properties": {
     "dataset": {
      "$ref": "#/components/schemas/UpdateDatasetOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "dataset"
    ]
   },
   "DatasetSchemaColumn": {
    "properties": {
     "column_name": {
      "type": "string",
      "title": "Column Name",
      "description": "The name of the column in the dataset."
     },
     "prequel_type": {
      "type": "string",
      "title": "Prequel Type",
      "description": "The most recent normalized Prequel data type for this column."
     },
     "source_type": {
      "type": "string",
      "title": "Source Type",
      "description": "The most recent raw data type from the source for this column."
     },
     "seen_source_types": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "title": "Seen Source Types",
      "description": "All distinct raw source types seen historically for this column."
     },
     "seen_prequel_types": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "title": "Seen Prequel Types",
      "description": "All distinct normalized Prequel types seen historically for this column."
     },
     "in_latest_extract": {
      "type": "boolean",
      "title": "In Latest Extract",
      "description": "Indicates if this column was present in the most recent successful extract."
     },
     "first_seen_at": {
      "type": "string",
      "title": "First Seen At",
      "description": "The timestamp when this column was first extracted."
     },
     "last_seen_at": {
      "type": "string",
      "title": "Last Seen At",
      "description": "The timestamp when this column was most recently extracted."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "column_name",
     "prequel_type",
     "source_type",
     "seen_source_types",
     "seen_prequel_types",
     "in_latest_extract",
     "first_seen_at",
     "last_seen_at"
    ]
   },
   "GetDatasetSchemaResponse": {
    "properties": {
     "columns": {
      "items": {
       "$ref": "#/components/schemas/DatasetSchemaColumn"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "columns"
    ]
   },
   "ExtractFilterOptions": {
    "allOf": [
     {
      "oneOf": [
       {
        "properties": {
         "type": {
          "const": "last_modified"
         },
         "last_modified": {
          "$ref": "#/components/schemas/LastModifiedFilter",
          "title": "Last Modified"
         }
        },
        "required": [
         "type",
         "last_modified"
        ],
        "title": "Last Modified"
       },
       {
        "properties": {
         "type": {
          "const": "records"
         },
         "records": {
          "$ref": "#/components/schemas/RecordsFilter",
          "title": "Record IDs"
         }
        },
        "required": [
         "type",
         "records"
        ],
        "title": "Record IDs"
       }
      ]
     }
    ],
    "properties": {},
    "type": "object",
    "unevaluatedProperties": false
   },
   "InitializeExtractRequest": {
    "properties": {
     "filter": {
      "$ref": "#/components/schemas/ExtractFilterOptions",
      "title": "Filter Configuration"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "LastModifiedFilter": {
    "properties": {
     "start": {
      "type": "string",
      "format": "date-time",
      "title": "Start bounds"
     },
     "end": {
      "type": "string",
      "format": "date-time",
      "title": "End bounds"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "RecordsFilter": {
    "properties": {
     "record_ids": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "maxItems": 100,
      "minItems": 1,
      "title": "Record IDs"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "record_ids"
    ]
   },
   "ErrorResource": {
    "properties": {
     "error_code": {
      "type": "string"
     },
     "title": {
      "type": "string"
     },
     "blame": {
      "type": "string"
     },
     "documentation_url": {
      "type": "string"
     },
     "trace": {
      "type": "string"
     },
     "message": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "error_code",
     "title",
     "blame",
     "documentation_url",
     "trace",
     "message"
    ]
   },
   "ExtractResource": {
    "properties": {
     "id": {
      "type": "string"
     },
     "dataset_id": {
      "type": "string"
     },
     "submitted_at": {
      "type": "string"
     },
     "started_at": {
      "type": "string",
      "format": "date-time"
     },
     "ended_at": {
      "type": "string",
      "format": "date-time"
     },
     "records_processed": {
      "type": "integer"
     },
     "records_existing_updated": {
      "type": "integer"
     },
     "records_existing_unchanged": {
      "type": "integer"
     },
     "records_existing_deleted": {
      "type": "integer"
     },
     "records_new_inserted": {
      "type": "integer"
     },
     "records_errored": {
      "type": "integer"
     },
     "error": {
      "$ref": "#/components/schemas/ErrorResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "id",
     "dataset_id",
     "submitted_at"
    ]
   },
   "InitializeExtractResponse": {
    "properties": {
     "extract": {
      "$ref": "#/components/schemas/ExtractResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "extract"
    ]
   },
   "DatasetRandomSampleRequest": {
    "properties": {
     "sample_size": {
      "type": "integer"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "sample_size"
    ]
   },
   "DatasetRandomSampleResponse": {
    "properties": {
     "schema": {
      "items": {
       "$ref": "#/components/schemas/QueryResultSchemaField"
      },
      "type": "array"
     },
     "records": {
      "items": true,
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "schema",
     "records"
    ]
   },
   "AcknowledgeStage": {
    "properties": {
     "acknowledge_id": {
      "type": "string"
     },
     "last_acknowledged_at": {
      "type": "string",
      "format": "date-time"
     },
     "data": true,
     "error": {
      "$ref": "#/components/schemas/RecordError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "ExtractStage": {
    "properties": {
     "extract_id": {
      "type": "string"
     },
     "last_extracted_at": {
      "type": "string",
      "format": "date-time"
     },
     "data": true,
     "error": {
      "$ref": "#/components/schemas/RecordError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "GetRecordResponse": {
    "properties": {
     "record": {
      "$ref": "#/components/schemas/RecordResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "record"
    ]
   },
   "LoadStage": {
    "properties": {
     "load_id": {
      "type": "string"
     },
     "last_loaded_at": {
      "type": "string",
      "format": "date-time"
     },
     "data": true,
     "error": {
      "$ref": "#/components/schemas/RecordError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "RecordError": {
    "properties": {
     "error_code": {
      "type": "string"
     },
     "error_trace": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "RecordResource": {
    "properties": {
     "record_id": {
      "type": "string"
     },
     "extract": {
      "$ref": "#/components/schemas/ExtractStage"
     },
     "transform": {
      "$ref": "#/components/schemas/TransformStage"
     },
     "validate_schema": {
      "$ref": "#/components/schemas/ValidateStage"
     },
     "load": {
      "$ref": "#/components/schemas/LoadStage"
     },
     "acknowledge": {
      "$ref": "#/components/schemas/AcknowledgeStage"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "record_id",
     "extract",
     "transform",
     "load"
    ]
   },
   "TransformStage": {
    "properties": {
     "transform_id": {
      "type": "string"
     },
     "last_transformed_at": {
      "type": "string",
      "format": "date-time"
     },
     "data": true,
     "error": {
      "$ref": "#/components/schemas/RecordError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "ValidateStage": {
    "properties": {
     "last_validated_at": {
      "type": "string",
      "format": "date-time"
     },
     "error": {
      "$ref": "#/components/schemas/RecordError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "DestinationResource": {
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "type": {
      "type": "string"
     },
     "record_schema": true,
     "created_at": {
      "type": "string"
     },
     "updated_at": {
      "type": "string"
     },
     "webhook_record": {
      "$ref": "#/components/schemas/WebhookRecordResource"
     },
     "webhook_batch": {
      "$ref": "#/components/schemas/WebhookBatchResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "id",
     "name",
     "type",
     "record_schema",
     "created_at",
     "updated_at"
    ]
   },
   "HTTPRequestTemplate": {
    "properties": {
     "method": {
      "type": "string",
      "enum": [
       "GET",
       "POST",
       "PUT",
       "PATCH",
       "DELETE"
      ],
      "title": "Method",
      "description": "HTTP method for the request."
     },
     "uri": {
      "type": "string",
      "title": "URI",
      "description": "Request URI with template variables."
     },
     "headers": {
      "additionalProperties": {
       "type": "string"
      },
      "type": "object",
      "title": "Headers",
      "description": "HTTP headers."
     },
     "body": {
      "type": "string",
      "title": "Body",
      "description": "Request body template."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "method",
     "uri"
    ]
   },
   "ListDestinationsResponse": {
    "properties": {
     "destinations": {
      "items": {
       "$ref": "#/components/schemas/DestinationResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "destinations"
    ]
   },
   "WebhookBatchResource": {
    "properties": {
     "request_template": {
      "$ref": "#/components/schemas/HTTPRequestTemplate"
     },
     "format": {
      "type": "string"
     },
     "max_size_per_batch": {
      "type": "integer"
     },
     "max_batches_per_minute": {
      "type": "integer"
     },
     "max_concurrency": {
      "type": "integer"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "request_template",
     "format",
     "max_size_per_batch",
     "max_batches_per_minute",
     "max_concurrency"
    ]
   },
   "WebhookRecordResource": {
    "properties": {
     "request_template": {
      "$ref": "#/components/schemas/HTTPRequestTemplate"
     },
     "max_records_per_minute": {
      "type": "integer"
     },
     "max_concurrency": {
      "type": "integer"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "request_template",
     "max_records_per_minute",
     "max_concurrency"
    ]
   },
   "CreateDestinationRequest": {
    "properties": {
     "destination": {
      "$ref": "#/components/schemas/DestinationOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "destination"
    ]
   },
   "DestinationOptions": {
    "oneOf": [
     {
      "properties": {
       "type": {
        "const": "webhook_record"
       },
       "webhook_record": {
        "$ref": "#/components/schemas/WebhookRecordOptions",
        "title": "HTTP Record Configuration"
       }
      },
      "required": [
       "type",
       "webhook_record"
      ],
      "title": "HTTP Record Configuration"
     },
     {
      "properties": {
       "type": {
        "const": "webhook_batch"
       },
       "webhook_batch": {
        "$ref": "#/components/schemas/WebhookBatchOptions",
        "title": "HTTP Batch Configuration"
       }
      },
      "required": [
       "type",
       "webhook_batch"
      ],
      "title": "HTTP Batch Configuration"
     }
    ],
    "properties": {
     "name": {
      "type": "string",
      "title": "Name",
      "description": "Unique name for this destination."
     },
     "record_schema": {
      "title": "Record Schema",
      "description": "JSON Schema for validating records (JSON5 supported)."
     }
    },
    "type": "object",
    "required": [
     "name",
     "record_schema"
    ],
    "unevaluatedProperties": false
   },
   "WebhookBatchOptions": {
    "properties": {
     "request_template": {
      "$ref": "#/components/schemas/HTTPRequestTemplate",
      "title": "Request Template",
      "description": "HTTP request template for sending batch data."
     },
     "format": {
      "type": "string",
      "enum": [
       "parquet",
       "csv",
       "json"
      ],
      "title": "Format",
      "description": "Batch file format."
     },
     "max_size_per_batch": {
      "type": "integer",
      "title": "Max Size Per Batch",
      "description": "Maximum records per batch.",
      "default": 24000
     },
     "max_batches_per_minute": {
      "type": "integer",
      "title": "Max Batches Per Minute",
      "description": "Rate limit for batches per minute.",
      "default": 10
     },
     "max_concurrency": {
      "type": "integer",
      "title": "Max Concurrency",
      "description": "Maximum concurrent request clients.",
      "default": 1
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "request_template",
     "format"
    ]
   },
   "WebhookRecordOptions": {
    "properties": {
     "request_template": {
      "$ref": "#/components/schemas/HTTPRequestTemplate",
      "title": "Request Template",
      "description": "HTTP request template for records."
     },
     "max_records_per_minute": {
      "type": "integer",
      "title": "Max Records Per Minute",
      "description": "Rate limit for records per minute.",
      "default": 3000
     },
     "max_concurrency": {
      "type": "integer",
      "title": "Max Concurrency",
      "description": "Maximum concurrent request clients.",
      "default": 1
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "request_template"
    ]
   },
   "GetDestinationResponse": {
    "properties": {
     "destination": {
      "$ref": "#/components/schemas/DestinationResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "destination"
    ]
   },
   "UpdateDestinationOptions": {
    "properties": {
     "name": {
      "type": "string",
      "description": "Unique name for this destination."
     },
     "type": {
      "type": "string",
      "enum": [
       "webhook_record",
       "webhook_batch"
      ],
      "description": "Destination type."
     },
     "record_schema": {
      "description": "JSON Schema for validating records (JSON5 supported)."
     },
     "webhook_record": {
      "$ref": "#/components/schemas/UpdateWebhookRecordOptions",
      "description": "HTTP Record Configuration"
     },
     "webhook_batch": {
      "$ref": "#/components/schemas/UpdateWebhookBatchOptions",
      "description": "HTTP Batch Configuration"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateDestinationRequest": {
    "properties": {
     "destination": {
      "$ref": "#/components/schemas/UpdateDestinationOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "destination"
    ]
   },
   "UpdateWebhookBatchOptions": {
    "properties": {
     "request_template": {
      "$ref": "#/components/schemas/HTTPRequestTemplate",
      "description": "HTTP request template for sending batch data."
     },
     "format": {
      "type": "string",
      "enum": [
       "parquet",
       "csv",
       "json"
      ]
     },
     "max_size_per_batch": {
      "type": "integer",
      "description": "Maximum records per batch."
     },
     "max_batches_per_minute": {
      "type": "integer",
      "description": "Rate limit for batches per minute."
     },
     "max_concurrency": {
      "type": "integer",
      "description": "Maximum concurrent request clients."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateWebhookRecordOptions": {
    "properties": {
     "request_template": {
      "$ref": "#/components/schemas/HTTPRequestTemplate",
      "description": "HTTP request template for records."
     },
     "max_records_per_minute": {
      "type": "integer",
      "description": "Rate limit for records per minute."
     },
     "max_concurrency": {
      "type": "integer",
      "description": "Maximum concurrent request clients."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "ListProductsResponse": {
    "properties": {
     "products": {
      "items": {
       "$ref": "#/components/schemas/ProductResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "products"
    ]
   },
   "ProductResource": {
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "description": {
      "type": "string"
     },
     "destinations": {
      "items": {
       "type": "string"
      },
      "type": "array"
     },
     "created_at": {
      "type": "string"
     },
     "updated_at": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "id",
     "name",
     "destinations",
     "created_at",
     "updated_at"
    ]
   },
   "CreateProductRequest": {
    "properties": {
     "product": {
      "$ref": "#/components/schemas/ProductOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "product"
    ]
   },
   "ProductOptions": {
    "properties": {
     "name": {
      "type": "string",
      "title": "Name",
      "description": "Unique name for this product."
     },
     "description": {
      "type": "string",
      "title": "Description",
      "description": "Optional description for this product."
     },
     "destinations": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "title": "Destinations",
      "description": "Destinations belonging to this product."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "destinations"
    ]
   },
   "GetProductResponse": {
    "properties": {
     "product": {
      "$ref": "#/components/schemas/ProductResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "product"
    ]
   },
   "UpdateProductOptions": {
    "properties": {
     "description": {
      "type": "string",
      "title": "Description",
      "description": "Optional description for this product."
     },
     "destinations": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "title": "Destinations",
      "description": "Destinations belonging to this product."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateProductRequest": {
    "properties": {
     "product": {
      "$ref": "#/components/schemas/UpdateProductOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "product"
    ]
   },
   "ListStreamsResponse": {
    "properties": {
     "streams": {
      "items": {
       "$ref": "#/components/schemas/StreamResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "streams"
    ]
   },
   "MappingResource": {
    "properties": {
     "field_type": {
      "type": "string"
     },
     "column": {
      "additionalProperties": {
       "type": "string"
      },
      "type": "object"
     },
     "expression": {
      "additionalProperties": {
       "type": "string"
      },
      "type": "object"
     },
     "target_field": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "field_type",
     "target_field"
    ]
   },
   "StreamResource": {
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "is_enabled": {
      "type": "boolean"
     },
     "destination_id": {
      "type": "string"
     },
     "dataset_id": {
      "type": "string"
     },
     "mappings": {
      "items": {
       "$ref": "#/components/schemas/MappingResource"
      },
      "type": "array"
     },
     "created_at": {
      "type": "string"
     },
     "updated_at": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "id",
     "name",
     "is_enabled",
     "destination_id",
     "dataset_id",
     "mappings",
     "created_at",
     "updated_at"
    ]
   },
   "CreateStreamRequest": {
    "properties": {
     "stream": {
      "$ref": "#/components/schemas/StreamOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "stream"
    ]
   },
   "MappingOptions": {
    "properties": {
     "field_type": {
      "type": "string",
      "title": "Field Type",
      "description": "Type of field mapping (field or expression)."
     },
     "column": {
      "additionalProperties": {
       "type": "string"
      },
      "type": "object",
      "title": "Column",
      "description": "Column reference for field type mappings."
     },
     "expression": {
      "additionalProperties": {
       "type": "string"
      },
      "type": "object",
      "title": "Expression",
      "description": "Configuration for expression field mappings."
     },
     "target_field": {
      "type": "string",
      "title": "Target Field",
      "description": "The target field name in the destination."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "field_type",
     "target_field"
    ]
   },
   "StreamOptions": {
    "properties": {
     "name": {
      "type": "string",
      "title": "Name",
      "description": "Name for this stream."
     },
     "is_enabled": {
      "type": "boolean",
      "title": "Is Enabled",
      "description": "Whether this stream is enabled.",
      "default": false
     },
     "destination_id": {
      "type": "string",
      "format": "uuid",
      "title": "Destination ID",
      "description": "The ID of the destination this stream connects to."
     },
     "dataset_id": {
      "type": "string",
      "format": "uuid",
      "title": "Dataset ID",
      "description": "The ID of the dataset this stream uses as source."
     },
     "mappings": {
      "items": {
       "$ref": "#/components/schemas/MappingOptions"
      },
      "type": "array",
      "title": "Mappings",
      "description": "Field mappings for this stream."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "destination_id",
     "dataset_id",
     "mappings"
    ]
   },
   "GetStreamResponse": {
    "properties": {
     "stream": {
      "$ref": "#/components/schemas/StreamResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "stream"
    ]
   },
   "UpdateStreamOptions": {
    "properties": {
     "name": {
      "type": "string",
      "description": "Name for this stream."
     },
     "is_enabled": {
      "type": "boolean",
      "description": "Whether this stream is enabled."
     },
     "mappings": {
      "items": {
       "$ref": "#/components/schemas/MappingOptions"
      },
      "type": "array",
      "description": "Field mappings for this stream."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateStreamRequest": {
    "properties": {
     "stream": {
      "$ref": "#/components/schemas/UpdateStreamOptions"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "stream"
    ]
   },
   "ExtractTimestampFilter": {
    "properties": {
     "start": {
      "type": "string",
      "format": "date-time"
     },
     "end": {
      "type": "string",
      "format": "date-time"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "InitializeLoadRequest": {
    "properties": {
     "filter": {
      "$ref": "#/components/schemas/LoadFilterOptions",
      "title": "Filter Configuration"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "LoadFilterOptions": {
    "allOf": [
     {
      "oneOf": [
       {
        "properties": {
         "type": {
          "const": "last_modified"
         },
         "last_modified": {
          "$ref": "#/components/schemas/LastModifiedFilter"
         }
        },
        "required": [
         "type",
         "last_modified"
        ],
        "title": "last_modified"
       },
       {
        "properties": {
         "type": {
          "const": "extract_timestamp"
         },
         "extract_timestamp": {
          "$ref": "#/components/schemas/ExtractTimestampFilter"
         }
        },
        "required": [
         "type",
         "extract_timestamp"
        ],
        "title": "extract_timestamp"
       },
       {
        "properties": {
         "type": {
          "const": "records"
         },
         "records": {
          "$ref": "#/components/schemas/RecordsFilter"
         }
        },
        "required": [
         "type",
         "records"
        ],
        "title": "records"
       }
      ]
     }
    ],
    "properties": {},
    "type": "object",
    "unevaluatedProperties": false
   },
   "InitializeLoadResponse": {
    "properties": {
     "load": {
      "$ref": "#/components/schemas/LoadResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "load"
    ]
   },
   "LoadResource": {
    "properties": {
     "id": {
      "type": "string"
     },
     "stream_id": {
      "type": "string"
     },
     "submitted_at": {
      "type": "string"
     },
     "started_at": {
      "type": "string"
     },
     "ended_at": {
      "type": "string"
     },
     "records_processed": {
      "type": "integer"
     },
     "records_transformed": {
      "type": "integer"
     },
     "records_valid": {
      "type": "integer"
     },
     "records_loaded": {
      "type": "integer"
     },
     "records_errored": {
      "type": "integer"
     },
     "error": {
      "$ref": "#/components/schemas/ErrorResource"
     },
     "record_ids": {
      "items": {
       "type": "string"
      },
      "type": "array"
     },
     "actor_id": {
      "type": "string"
     },
     "actor_type": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "id",
     "stream_id",
     "submitted_at",
     "actor_id",
     "actor_type"
    ]
   },
   "InitializeAcknowledgeRequest": {
    "properties": {
     "start_time": {
      "type": "string",
      "format": "date-time"
     },
     "end_time": {
      "type": "string",
      "format": "date-time"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "InitializeAcknowledgeResponse": {
    "properties": {
     "message": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "message"
    ]
   },
   "TestStreamTransformRequest": {
    "properties": {
     "record_ids": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "maxItems": 100,
      "minItems": 1,
      "title": "Record IDs",
      "description": "List of specific record IDs to test the transformation against."
     },
     "stream": {
      "$ref": "#/components/schemas/UpdateStreamOptions",
      "title": "Stream",
      "description": "Optional partial stream patch merged onto the saved stream to preview transform output without persisting."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "record_ids"
    ]
   },
   "TestStreamTransformResponse": {
    "properties": {
     "schema": {
      "items": {
       "$ref": "#/components/schemas/QueryResultSchemaField"
      },
      "type": "array"
     },
     "records": {
      "items": true,
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "schema",
     "records"
    ]
   },
   "TestStreamLoadRequest": {
    "properties": {
     "record_ids": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "maxItems": 100,
      "minItems": 1,
      "title": "Record IDs",
      "description": "List of specific record IDs to test the transformation against."
     },
     "stream": {
      "$ref": "#/components/schemas/UpdateStreamOptions",
      "title": "Stream",
      "description": "Optional partial stream patch merged onto the saved stream to preview load output without persisting."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "record_ids"
    ]
   },
   "TestStreamLoadResponse": {
    "properties": {
     "records": {
      "items": true,
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "records"
    ]
   },
   "TestNewStreamRequest": {
    "properties": {
     "stream": {
      "$ref": "#/components/schemas/StreamOptions",
      "title": "Stream",
      "description": "Candidate stream definition to test."
     },
     "record_ids": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "maxItems": 100,
      "minItems": 1,
      "title": "Record IDs",
      "description": "List of specific record IDs to test the transformation against."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "stream",
     "record_ids"
    ]
   },
   "TestNewStreamLoadRequest": {
    "properties": {
     "stream": {
      "$ref": "#/components/schemas/StreamOptions",
      "title": "Stream",
      "description": "Candidate stream definition to test."
     },
     "record_ids": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "maxItems": 100,
      "minItems": 1,
      "title": "Record IDs",
      "description": "List of specific record IDs to test the transformation against."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "stream",
     "record_ids"
    ]
   },
   "TestNewSourceRequest": {
    "properties": {
     "source": {
      "$ref": "#/components/schemas/SourceOptions",
      "title": "Source",
      "description": "Candidate source definition to test."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "source"
    ]
   },
   "TestSourceResponse": {
    "properties": {
     "code": {
      "type": "string"
     },
     "message": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "TestSourceRequest": {
    "properties": {
     "source": {
      "$ref": "#/components/schemas/UpdateSourceOptions",
      "title": "Source",
      "description": "Optional partial source patch merged onto the saved source to test connection without persisting."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "ListExtractsResponse": {
    "properties": {
     "extracts": {
      "items": {
       "$ref": "#/components/schemas/ExtractResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "extracts"
    ]
   },
   "GetExtractResponse": {
    "properties": {
     "extract": {
      "$ref": "#/components/schemas/ExtractResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "extract"
    ]
   },
   "DebugError": {
    "properties": {
     "error_code": {
      "type": "string"
     },
     "error_trace": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "error_code",
     "error_trace"
    ]
   },
   "ExtractDebugRecord": {
    "properties": {
     "record_id": {
      "type": "string"
     },
     "event_timestamp": {
      "type": "string"
     },
     "extract": {
      "$ref": "#/components/schemas/ExtractDebugStage"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "record_id",
     "event_timestamp"
    ]
   },
   "ExtractDebugResponse": {
    "properties": {
     "records": {
      "items": {
       "$ref": "#/components/schemas/ExtractDebugRecord"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "records"
    ]
   },
   "ExtractDebugStage": {
    "properties": {
     "last_seen_at": {
      "type": "string"
     },
     "last_extracted_at": {
      "type": "string"
     },
     "last_modified_in_source_at": {
      "type": "string"
     },
     "data": true,
     "error": {
      "$ref": "#/components/schemas/DebugError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "last_seen_at",
     "last_extracted_at",
     "data"
    ]
   },
   "ListLoadsResponse": {
    "properties": {
     "loads": {
      "items": {
       "$ref": "#/components/schemas/LoadResource"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "loads"
    ]
   },
   "GetLoadResponse": {
    "properties": {
     "load": {
      "$ref": "#/components/schemas/LoadResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "load"
    ]
   },
   "AcknowledgeDebugStage": {
    "properties": {
     "last_acknowledged_at": {
      "type": "string"
     },
     "data": true,
     "error": {
      "$ref": "#/components/schemas/DebugError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "last_acknowledged_at",
     "data"
    ]
   },
   "LoadDebugRecord": {
    "properties": {
     "record_id": {
      "type": "string"
     },
     "event_timestamp": {
      "type": "string"
     },
     "transform": {
      "$ref": "#/components/schemas/TransformDebugStage"
     },
     "load": {
      "$ref": "#/components/schemas/LoadDebugStage"
     },
     "acknowledge": {
      "$ref": "#/components/schemas/AcknowledgeDebugStage"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "record_id",
     "event_timestamp"
    ]
   },
   "LoadDebugResponse": {
    "properties": {
     "records": {
      "items": {
       "$ref": "#/components/schemas/LoadDebugRecord"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "records"
    ]
   },
   "LoadDebugStage": {
    "properties": {
     "last_loaded_at": {
      "type": "string"
     },
     "data": true,
     "error": {
      "$ref": "#/components/schemas/DebugError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "last_loaded_at",
     "data"
    ]
   },
   "TransformDebugStage": {
    "properties": {
     "last_transformed_at": {
      "type": "string"
     },
     "data": true,
     "error": {
      "$ref": "#/components/schemas/DebugError"
     },
     "is_deleted": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "last_transformed_at",
     "data"
    ]
   },
   "HealthCheckResponse": {
    "properties": {
     "version": {
      "type": "string",
      "description": "The Prequel API version."
     },
     "health": {
      "type": "string",
      "description": "The Prequel API health status."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "version",
     "health"
    ]
   },
   "PublicKeyResource": {
    "properties": {
     "id": {
      "type": "string"
     },
     "key_type": {
      "type": "string"
     },
     "public_key": {
      "type": "string",
      "description": "Public key used to verify Prequel-generated signatures. Formatted as a SSH-RSA public key."
     },
     "created_at": {
      "type": "string",
      "format": "date-time",
      "description": "The date and time the public key was created."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "public_key",
     "created_at"
    ]
   },
   "PublicKeyResponse": {
    "properties": {
     "public_key": {
      "$ref": "#/components/schemas/PublicKeyResource"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "public_key"
    ]
   },
   "SSHKeyResponse": {
    "properties": {
     "public_key": {
      "type": "string",
      "description": "Public key used to verify Prequel-generated signatures. Formatted as a SSH-RSA public key."
     },
     "public_key_pkcs8": {
      "type": "string",
      "description": "Public key used to verify Prequel key pair auth. Formatted as a PKCS#8 PEM-encoded public key."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "public_key",
     "public_key_pkcs8"
    ]
   },
   "SourceFormEnumObject": {
    "properties": {
     "key": true,
     "display": {
      "type": "string"
     },
     "icon_url": {
      "type": "string"
     },
     "disabled": {
      "type": "boolean"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "key",
     "display"
    ]
   },
   "SourceFormField": {
    "properties": {
     "path": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "parent": true,
     "type": {
      "type": "string"
     },
     "required": {
      "type": "boolean"
     },
     "read_only": {
      "type": "boolean"
     },
     "refetch_on_change": {
      "type": "boolean"
     },
     "const": true,
     "default": true,
     "enum": {
      "items": {
       "$ref": "#/components/schemas/SourceFormEnumObject"
      },
      "type": "array"
     },
     "attributes": {
      "$ref": "#/components/schemas/SourceFormFieldAttributes"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "path",
     "name",
     "type",
     "required",
     "refetch_on_change",
     "attributes"
    ]
   },
   "SourceFormFieldAttributes": {
    "properties": {
     "label": {
      "type": "string"
     },
     "description": {
      "type": "string"
     },
     "placeholder": {
      "type": "string"
     },
     "form_element": {
      "type": "string"
     },
     "input_type": {
      "type": "string"
     },
     "key_format": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "label",
     "form_element"
    ]
   },
   "SourceFormResponse": {
    "properties": {
     "fields": {
      "items": {
       "$ref": "#/components/schemas/SourceFormField"
      },
      "type": "array"
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "fields"
    ]
   },
   "BigQuerySourceOptionsGCPServiceAccountRole": {
    "properties": {
     "project_id": {
      "$comment": "BigQuery Project IDs must consist of 4-30 lowercase letters, numbers, and hyphens, and must begin with a lowercase letter and end with a lowercase letter or number.",
      "type": "string",
      "pattern": "^[a-z][a-z0-9-]{2,28}[a-z0-9]$",
      "title": "Project ID"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "auth_method": {
      "const": "gcp_service_account_role"
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/GCPServiceAccountRole",
      "title": "GCP Service Account",
      "description": "Required details if authenticating using a GCP service account role."
     }
    },
    "type": "object",
    "required": [
     "project_id",
     "region",
     "auth_method",
     "gcp_service_account_role"
    ],
    "title": "GCP Service Account",
    "unevaluatedProperties": false
   },
   "BigQuerySourceOptionsFederatedGCPServiceAccountRole": {
    "properties": {
     "project_id": {
      "$comment": "BigQuery Project IDs must consist of 4-30 lowercase letters, numbers, and hyphens, and must begin with a lowercase letter and end with a lowercase letter or number.",
      "type": "string",
      "pattern": "^[a-z][a-z0-9-]{2,28}[a-z0-9]$",
      "title": "Project ID"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "auth_method": {
      "const": "federated_gcp_service_account_role"
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/FederatedGCPServiceAccountRole",
      "title": "Federation",
      "description": "Required details if authenticating using a GCP service account role."
     }
    },
    "type": "object",
    "required": [
     "project_id",
     "region",
     "auth_method",
     "federated_gcp_service_account_role"
    ],
    "title": "Federation",
    "unevaluatedProperties": false
   },
   "BigQuerySourceOptionsGCPServiceAccountKey": {
    "properties": {
     "project_id": {
      "$comment": "BigQuery Project IDs must consist of 4-30 lowercase letters, numbers, and hyphens, and must begin with a lowercase letter and end with a lowercase letter or number.",
      "type": "string",
      "pattern": "^[a-z][a-z0-9-]{2,28}[a-z0-9]$",
      "title": "Project ID"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "auth_method": {
      "const": "gcp_service_account_key"
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/GCPSourceServiceAccountKey",
      "title": "Direct Access",
      "description": "Required details if authenticating using a GCP service account key."
     }
    },
    "type": "object",
    "required": [
     "project_id",
     "region",
     "auth_method",
     "gcp_service_account_key"
    ],
    "title": "Direct Access",
    "unevaluatedProperties": false
   },
   "DeltaSharingSourceOptionsBearerToken": {
    "properties": {
     "host": {
      "type": "string",
      "title": "Host",
      "description": "Host address of the Delta Sharing server."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 443
     },
     "auth_method": {
      "const": "bearer_token"
     },
     "bearer_token": {
      "$ref": "#/components/schemas/BearerTokenAuth",
      "title": "Bearer Token",
      "description": "Required details for bearer token authentication."
     }
    },
    "type": "object",
    "required": [
     "host",
     "port",
     "auth_method",
     "bearer_token"
    ],
    "title": "Bearer Token",
    "unevaluatedProperties": false
   },
   "DeltaSharingSourceOptionsOAuth2": {
    "properties": {
     "host": {
      "type": "string",
      "title": "Host",
      "description": "Host address of the Delta Sharing server."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 443
     },
     "auth_method": {
      "const": "oauth2"
     },
     "oauth2": {
      "$ref": "#/components/schemas/OAuthAuth",
      "title": "OAuth2",
      "description": "Required details for OAuth2 authentication."
     }
    },
    "type": "object",
    "required": [
     "host",
     "port",
     "auth_method",
     "oauth2"
    ],
    "title": "OAuth2",
    "unevaluatedProperties": false
   },
   "GCSSourceOptionsGCPServiceAccountRole": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "GCS bucket name"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "auth_method": {
      "const": "gcp_service_account_role"
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/GCPServiceAccountRole",
      "title": "GCP Service Account",
      "description": "Required details if authenticating using a GCP service account role."
     }
    },
    "type": "object",
    "required": [
     "bucket_name",
     "region",
     "auth_method",
     "gcp_service_account_role"
    ],
    "title": "GCP Service Account",
    "unevaluatedProperties": false
   },
   "GCSSourceOptionsFederatedGCPServiceAccountRole": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "GCS bucket name"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "auth_method": {
      "const": "federated_gcp_service_account_role"
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/FederatedGCPServiceAccountRole",
      "title": "Federation",
      "description": "Required details if authenticating using a GCP service account role."
     }
    },
    "type": "object",
    "required": [
     "bucket_name",
     "region",
     "auth_method",
     "federated_gcp_service_account_role"
    ],
    "title": "Federation",
    "unevaluatedProperties": false
   },
   "GCSSourceOptionsGCSHMACKeys": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "GCS bucket name"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "auth_method": {
      "const": "gcs_hmac_keys"
     },
     "gcs_hmac_keys": {
      "$ref": "#/components/schemas/GCSAccessKeys",
      "title": "GCS HMAC Keys",
      "description": "Required details if authenticating using GCS HMAC keys."
     }
    },
    "type": "object",
    "required": [
     "bucket_name",
     "region",
     "auth_method",
     "gcs_hmac_keys"
    ],
    "title": "GCS HMAC Keys",
    "unevaluatedProperties": false
   },
   "GCSSourceOptionsGCPServiceAccountKey": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "GCS bucket name"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "auth_method": {
      "const": "gcp_service_account_key"
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/GCPSourceServiceAccountKey",
      "title": "Direct Access",
      "description": "Required details if authenticating using a GCP service account key."
     }
    },
    "type": "object",
    "required": [
     "bucket_name",
     "region",
     "auth_method",
     "gcp_service_account_key"
    ],
    "title": "Direct Access",
    "unevaluatedProperties": false
   },
   "RedshiftServerlessSourceOptionsAWSAccessKeys": {
    "properties": {
     "host": {
      "type": "string",
      "title": "Host",
      "description": "Host address of the Redshift Serverless workgroup."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 5439
     },
     "database": {
      "type": "string",
      "title": "Database",
      "description": "Name of the database."
     },
     "workgroup": {
      "type": "string",
      "title": "Workgroup",
      "description": "Redshift Serverless Workgroup name"
     },
     "region": {
      "type": "string",
      "title": "Region",
      "description": "AWS Region identifier"
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "disable_ssl": {
      "type": "boolean",
      "title": "Disable SSL"
     },
     "connection_timeout_in_seconds": {
      "type": "integer",
      "minimum": 0,
      "title": "Connection Timeout",
      "description": "Duration to wait for successful connection"
     },
     "auth_method": {
      "const": "aws_access_keys"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/RedshiftAccessKeys",
      "title": "AWS Access Keys",
      "description": "Required details for AWS access keys authentication."
     }
    },
    "type": "object",
    "required": [
     "host",
     "port",
     "database",
     "workgroup",
     "region",
     "auth_method",
     "aws_access_keys"
    ],
    "title": "AWS Access Keys",
    "unevaluatedProperties": false
   },
   "RedshiftServerlessSourceOptionsAWSIAMRole": {
    "properties": {
     "host": {
      "type": "string",
      "title": "Host",
      "description": "Host address of the Redshift Serverless workgroup."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 5439
     },
     "database": {
      "type": "string",
      "title": "Database",
      "description": "Name of the database."
     },
     "workgroup": {
      "type": "string",
      "title": "Workgroup",
      "description": "Redshift Serverless Workgroup name"
     },
     "region": {
      "type": "string",
      "title": "Region",
      "description": "AWS Region identifier"
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "disable_ssl": {
      "type": "boolean",
      "title": "Disable SSL"
     },
     "connection_timeout_in_seconds": {
      "type": "integer",
      "minimum": 0,
      "title": "Connection Timeout",
      "description": "Duration to wait for successful connection"
     },
     "auth_method": {
      "const": "aws_iam_role"
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRole",
      "title": "AWS IAM Role",
      "description": "Required details for AWS IAM role authentication."
     }
    },
    "type": "object",
    "required": [
     "host",
     "port",
     "database",
     "workgroup",
     "region",
     "auth_method",
     "aws_iam_role"
    ],
    "title": "AWS IAM Role",
    "unevaluatedProperties": false
   },
   "RedshiftSourceOptionsAWSAccessKeys": {
    "properties": {
     "host": {
      "type": "string",
      "title": "Host",
      "description": "Host address of the Redshift cluster."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 5439
     },
     "database": {
      "type": "string",
      "title": "Database",
      "description": "Name of the database."
     },
     "cluster": {
      "type": "string",
      "title": "Cluster",
      "description": "Redshift Cluster identifier"
     },
     "region": {
      "type": "string",
      "title": "Region",
      "description": "AWS Region identifier"
     },
     "username": {
      "type": "string",
      "title": "Username"
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "disable_ssl": {
      "type": "boolean",
      "title": "Disable SSL"
     },
     "connection_timeout_in_seconds": {
      "type": "integer",
      "minimum": 0,
      "title": "Connection Timeout",
      "description": "Duration to wait for successful connection"
     },
     "auth_method": {
      "const": "aws_access_keys"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/RedshiftAccessKeys",
      "title": "AWS Access Keys",
      "description": "Required details for AWS access keys authentication."
     }
    },
    "type": "object",
    "required": [
     "host",
     "port",
     "database",
     "cluster",
     "region",
     "username",
     "auth_method",
     "aws_access_keys"
    ],
    "title": "AWS Access Keys",
    "unevaluatedProperties": false
   },
   "RedshiftSourceOptionsAWSIAMRole": {
    "properties": {
     "host": {
      "type": "string",
      "title": "Host",
      "description": "Host address of the Redshift cluster."
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 5439
     },
     "database": {
      "type": "string",
      "title": "Database",
      "description": "Name of the database."
     },
     "cluster": {
      "type": "string",
      "title": "Cluster",
      "description": "Redshift Cluster identifier"
     },
     "region": {
      "type": "string",
      "title": "Region",
      "description": "AWS Region identifier"
     },
     "username": {
      "type": "string",
      "title": "Username"
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "disable_ssl": {
      "type": "boolean",
      "title": "Disable SSL"
     },
     "connection_timeout_in_seconds": {
      "type": "integer",
      "minimum": 0,
      "title": "Connection Timeout",
      "description": "Duration to wait for successful connection"
     },
     "auth_method": {
      "const": "aws_iam_role"
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRole",
      "title": "AWS IAM Role",
      "description": "Required details for AWS IAM role authentication."
     }
    },
    "type": "object",
    "required": [
     "host",
     "port",
     "database",
     "cluster",
     "region",
     "username",
     "auth_method",
     "aws_iam_role"
    ],
    "title": "AWS IAM Role",
    "unevaluatedProperties": false
   },
   "S3SourceOptionsAWSIAMRole": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "S3 bucket name"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "bucket_host": {
      "type": "string",
      "title": "Bucket host"
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "auth_method": {
      "const": "aws_iam_role"
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRole",
      "title": "AWS IAM Role",
      "description": "Required details for AWS IAM role authentication."
     }
    },
    "type": "object",
    "required": [
     "bucket_name",
     "region",
     "auth_method",
     "aws_iam_role"
    ],
    "title": "AWS IAM Role",
    "unevaluatedProperties": false
   },
   "S3SourceOptionsAWSAccessKeys": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "S3 bucket name"
     },
     "region": {
      "type": "string",
      "title": "Region"
     },
     "bucket_host": {
      "type": "string",
      "title": "Bucket host"
     },
     "use_ssh_tunnel": {
      "type": "boolean",
      "title": "Use SSH Tunnel",
      "description": "Whether to use an SSH tunnel for the connection."
     },
     "ssh_tunnel": {
      "$ref": "#/components/schemas/SSHTunnelParams",
      "description": "Required details if using SSH tunneling."
     },
     "auth_method": {
      "const": "aws_access_keys"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/AWSAccessKeys",
      "title": "AWS Access Keys",
      "description": "Required details for AWS access keys authentication."
     }
    },
    "type": "object",
    "required": [
     "bucket_name",
     "region",
     "auth_method",
     "aws_access_keys"
    ],
    "title": "AWS Access Keys",
    "unevaluatedProperties": false
   },
   "SnowflakeSourceOptionsPublicKeyAuth": {
    "properties": {
     "host": {
      "type": "string",
      "pattern": ".*\\.snowflakecomputing.com$",
      "title": "Account host",
      "description": "Host address of the Snowflake account.",
      "default": "account.us-central1.gcp.snowflakecomputing.com"
     },
     "port": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "title": "Port",
      "default": 443
     },
     "database": {
      "type": "string",
      "title": "Database",
      "description": "Name of the database."
     },
     "username": {
      "type": "string",
      "title": "Username"
     },
     "auth_method": {
      "const": "public_key_auth"
     },
     "public_key_auth": {
      "$ref": "#/components/schemas/PublicKeyAuth",
      "title": "Key Pair Authentication",
      "description": "Required details for public key authentication."
     }
    },
    "type": "object",
    "required": [
     "host",
     "port",
     "database",
     "username",
     "auth_method",
     "public_key_auth"
    ],
    "title": "Key Pair Authentication",
    "unevaluatedProperties": false
   },
   "GCSDatalakeResourceGCPServiceAccountRole": {
    "properties": {
     "prefix": {
      "type": "string"
     },
     "bucket_name": {
      "type": "string"
     },
     "bucket_region": {
      "type": "string"
     },
     "auth_method": {
      "const": "gcp_service_account_role"
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/GCPDatalakeServiceAccountRoleResource"
     }
    },
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "auth_method",
     "gcp_service_account_role"
    ],
    "unevaluatedProperties": false
   },
   "GCSDatalakeResourceGCPServiceAccountKey": {
    "properties": {
     "prefix": {
      "type": "string"
     },
     "bucket_name": {
      "type": "string"
     },
     "bucket_region": {
      "type": "string"
     },
     "auth_method": {
      "const": "gcp_service_account_key"
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/GCPDatalakeServiceAccountKeyResource"
     }
    },
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "auth_method",
     "gcp_service_account_key"
    ],
    "unevaluatedProperties": false
   },
   "GCSDatalakeResourceFederatedGCPServiceAccountRole": {
    "properties": {
     "prefix": {
      "type": "string"
     },
     "bucket_name": {
      "type": "string"
     },
     "bucket_region": {
      "type": "string"
     },
     "auth_method": {
      "const": "federated_gcp_service_account_role"
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/FederatedGCPDatalakeServiceAccountRoleResource"
     }
    },
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "auth_method",
     "federated_gcp_service_account_role"
    ],
    "unevaluatedProperties": false
   },
   "S3DatalakeResourceAWSIAMRole": {
    "properties": {
     "prefix": {
      "type": "string"
     },
     "bucket_name": {
      "type": "string"
     },
     "bucket_region": {
      "type": "string"
     },
     "auth_method": {
      "const": "aws_iam_role"
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRoleResource"
     }
    },
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "auth_method",
     "aws_iam_role"
    ],
    "unevaluatedProperties": false
   },
   "S3DatalakeResourceAWSAccessKeys": {
    "properties": {
     "prefix": {
      "type": "string"
     },
     "bucket_name": {
      "type": "string"
     },
     "bucket_region": {
      "type": "string"
     },
     "auth_method": {
      "const": "aws_access_keys"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/AWSAccessKeysResource"
     }
    },
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "auth_method",
     "aws_access_keys"
    ],
    "unevaluatedProperties": false
   },
   "GCSDatalakeOptionsGCPServiceAccountRole": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the GCS bucket."
     },
     "bucket_name": {
      "type": "string",
      "title": "Bucket Name"
     },
     "bucket_region": {
      "type": "string",
      "title": "Region",
      "description": "GCS region (e.g. us-central1)."
     },
     "auth_method": {
      "const": "gcp_service_account_role"
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/GCPDatalakeServiceAccountRole"
     }
    },
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "auth_method",
     "gcp_service_account_role"
    ],
    "unevaluatedProperties": false
   },
   "GCSDatalakeOptionsGCPServiceAccountKey": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the GCS bucket."
     },
     "bucket_name": {
      "type": "string",
      "title": "Bucket Name"
     },
     "bucket_region": {
      "type": "string",
      "title": "Region",
      "description": "GCS region (e.g. us-central1)."
     },
     "auth_method": {
      "const": "gcp_service_account_key"
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/GCPDatalakeServiceAccountKey"
     }
    },
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "auth_method",
     "gcp_service_account_key"
    ],
    "unevaluatedProperties": false
   },
   "GCSDatalakeOptionsFederatedGCPServiceAccountRole": {
    "properties": {
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the GCS bucket."
     },
     "bucket_name": {
      "type": "string",
      "title": "Bucket Name"
     },
     "bucket_region": {
      "type": "string",
      "title": "Region",
      "description": "GCS region (e.g. us-central1)."
     },
     "auth_method": {
      "const": "federated_gcp_service_account_role"
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/FederatedGCPDatalakeServiceAccountRole",
      "description": "Required details if authenticating using Workload Identity Federation."
     }
    },
    "type": "object",
    "required": [
     "prefix",
     "bucket_name",
     "bucket_region",
     "auth_method",
     "federated_gcp_service_account_role"
    ],
    "unevaluatedProperties": false
   },
   "S3DatalakeOptionsAWSIAMRole": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "Bucket Name",
      "description": "Name of the S3 bucket."
     },
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the S3 bucket."
     },
     "bucket_region": {
      "type": "string",
      "title": "Region",
      "description": "AWS region where the bucket is located."
     },
     "auth_method": {
      "const": "aws_iam_role"
     },
     "aws_iam_role": {
      "$ref": "#/components/schemas/AWSIAMRole"
     }
    },
    "type": "object",
    "required": [
     "bucket_name",
     "prefix",
     "bucket_region",
     "auth_method",
     "aws_iam_role"
    ],
    "unevaluatedProperties": false
   },
   "S3DatalakeOptionsAWSAccessKeys": {
    "properties": {
     "bucket_name": {
      "type": "string",
      "title": "Bucket Name",
      "description": "Name of the S3 bucket."
     },
     "prefix": {
      "type": "string",
      "description": "Prefix to use for the S3 bucket."
     },
     "bucket_region": {
      "type": "string",
      "title": "Region",
      "description": "AWS region where the bucket is located."
     },
     "auth_method": {
      "const": "aws_access_keys"
     },
     "aws_access_keys": {
      "$ref": "#/components/schemas/AWSAccessKeys",
      "description": "Required details if authenticating using AWS access keys."
     }
    },
    "type": "object",
    "required": [
     "bucket_name",
     "prefix",
     "bucket_region",
     "auth_method",
     "aws_access_keys"
    ],
    "unevaluatedProperties": false
   },
   "BigQuerySourceResourceGCPServiceAccountRole": {
    "properties": {
     "project_id": {
      "type": "string"
     },
     "region": {
      "type": "string"
     },
     "auth_method": {
      "const": "gcp_service_account_role"
     },
     "gcp_service_account_role": {
      "$ref": "#/components/schemas/GCPServiceAccountRoleResource"
     }
    },
    "type": "object",
    "required": [
     "project_id",
     "region",
     "auth_method",
     "gcp_service_account_role"
    ],
    "unevaluatedProperties": false
   },
   "BigQuerySourceResourceFederatedGCPServiceAccountRole": {
    "properties": {
     "project_id": {
      "type": "string"
     },
     "region": {
      "type": "string"
     },
     "auth_method": {
      "const": "federated_gcp_service_account_role"
     },
     "federated_gcp_service_account_role": {
      "$ref": "#/components/schemas/FederatedGCPServiceAccountRoleResource"
     }
    },
    "type": "object",
    "required": [
     "project_id",
     "region",
     "auth_method",
     "federated_gcp_service_account_role"
    ],
    "unevaluatedProperties": false
   },
   "BigQuerySourceResourceGCPServiceAccountKey": {
    "properties": {
     "project_id": {
      "type": "string"
     },
     "region": {
      "type": "string"
     },
     "auth_method": {
      "const": "gcp_service_account_key"
     },
     "gcp_service_account_key": {
      "$ref": "#/components/schemas/GCPServiceAccountKeyResource"
     }
    },
    "type": "object",
    "required": [
     "project_id",
     "region",
     "auth_method",
     "gcp_service_account_key"
    ],
    "unevaluatedProperties": false
   },
   "DatadogWebhookOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/datadog-webhook-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Descriptive name for webhook."
     },
     "vendor": {
      "type": "string",
      "enum": [
       "datadog"
      ],
      "description": "Webhook destination type. datadog will POST a JSON payload data formatted for the Datadog v1 events endpoint."
     },
     "api_version": {
      "type": "string",
      "description": "The API version to use when rendering events.",
      "default": "2023-10-15"
     },
     "events": {
      "items": {
       "type": "string",
       "enum": [
        "transfer.cancelled",
        "transfer.error",
        "transfer.success",
        "export_source.created",
        "export_source.updated",
        "export_source.deleted",
        "export_destination.created",
        "export_destination.updated",
        "export_destination.deleted",
        "recipient.created",
        "recipient.updated",
        "recipient.deleted",
        "export_magic_link.created",
        "export_magic_link.deleted"
       ]
      },
      "type": "array",
      "description": "The events to receive via webhook."
     },
     "api_key": {
      "type": "string",
      "description": "The API key to use when sending the webhook."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "vendor"
    ]
   },
   "HttpWebhookOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/http-webhook-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Descriptive name for webhook."
     },
     "vendor": {
      "type": "string",
      "enum": [
       "generic_post",
       "generic_get"
      ],
      "description": "Webhook destination type. generic_post will deliver payload data as JSON"
     },
     "api_version": {
      "type": "string",
      "description": "The API version to use when rendering events.",
      "default": "2023-10-15"
     },
     "events": {
      "items": {
       "type": "string",
       "enum": [
        "transfer.cancelled",
        "transfer.error",
        "transfer.success",
        "export_source.created",
        "export_source.updated",
        "export_source.deleted",
        "export_destination.created",
        "export_destination.updated",
        "export_destination.deleted",
        "recipient.created",
        "recipient.updated",
        "recipient.deleted",
        "export_magic_link.created",
        "export_magic_link.deleted"
       ]
      },
      "type": "array",
      "description": "The events to receive via webhook."
     },
     "url": {
      "type": "string",
      "pattern": "^https?://.+$",
      "description": "The URL to send the webhook to."
     },
     "api_key": {
      "type": "string",
      "description": "The API key to use when sending the webhook."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "vendor",
     "url"
    ]
   },
   "PagerDutyWebhookOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/pager-duty-webhook-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Descriptive name for webhook."
     },
     "vendor": {
      "type": "string",
      "enum": [
       "pagerduty"
      ],
      "description": "Webhook destination type. pagerduty will POST a JSON payload data formatted for the enqueue endpoint of the PagerDuty V2 Events API."
     },
     "api_version": {
      "type": "string",
      "description": "The API version to use when rendering events.",
      "default": "2023-10-15"
     },
     "events": {
      "items": {
       "type": "string",
       "enum": [
        "transfer.cancelled",
        "transfer.error",
        "transfer.success",
        "export_source.created",
        "export_source.updated",
        "export_source.deleted",
        "export_destination.created",
        "export_destination.updated",
        "export_destination.deleted",
        "recipient.created",
        "recipient.updated",
        "recipient.deleted",
        "export_magic_link.created",
        "export_magic_link.deleted"
       ]
      },
      "type": "array",
      "description": "The events to receive via webhook."
     },
     "api_key": {
      "type": "string",
      "description": "Integration Key provided by PagerDuty in the Events API Overview of the service configured to monitor these events."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "vendor",
     "api_key"
    ]
   },
   "SensitiveTraceEndpointOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/sensitive-trace-endpoint-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "The name of the sensitive trace endpoint."
     },
     "description": {
      "type": "string",
      "description": "Optional description of the sensitive trace endpoint."
     },
     "url": {
      "type": "string",
      "pattern": "^https?://.+$",
      "description": "The URL to send the sensitive trace to."
     },
     "header_template": {
      "type": "string",
      "description": "Optional template for the headers to send with the sensitive trace. If left empty default headers will be sent."
     },
     "secret": {
      "type": "string",
      "description": "Optional secret to authenticate the sensitive trace endpoint."
     },
     "body_template": {
      "type": "string",
      "description": "Optional template for the body to send with the sensitive trace. If left empty default body will be sent."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "url"
    ]
   },
   "SlackWebhookOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/slack-webhook-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Descriptive name for webhook."
     },
     "vendor": {
      "type": "string",
      "enum": [
       "slack"
      ],
      "description": "Webhook destination type. slack will POST a JSON payload formatted for Slack incoming webhooks."
     },
     "api_version": {
      "type": "string",
      "description": "The API version to use when rendering events.",
      "default": "2023-10-15"
     },
     "events": {
      "items": {
       "type": "string",
       "enum": [
        "transfer.cancelled",
        "transfer.error",
        "transfer.success",
        "export_source.created",
        "export_source.updated",
        "export_source.deleted",
        "export_destination.created",
        "export_destination.updated",
        "export_destination.deleted",
        "recipient.created",
        "recipient.updated",
        "recipient.deleted",
        "export_magic_link.created",
        "export_magic_link.deleted"
       ]
      },
      "type": "array",
      "description": "The events to receive via webhook."
     },
     "url": {
      "type": "string",
      "pattern": "^https://hooks\\.slack\\.com/services/.+$",
      "description": "Destination URL provided by Slack in the form 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'."
     }
    },
    "additionalProperties": false,
    "type": "object",
    "required": [
     "name",
     "vendor",
     "url"
    ]
   },
   "UpdateDatadogWebhookOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/update-datadog-webhook-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Descriptive name for webhook."
     },
     "vendor": {
      "type": "string",
      "enum": [
       "datadog"
      ],
      "description": "Webhook destination type. datadog will POST a JSON payload data formatted for the Datadog v1 events endpoint."
     },
     "events": {
      "items": {
       "type": "string",
       "enum": [
        "transfer.cancelled",
        "transfer.error",
        "transfer.success",
        "export_source.created",
        "export_source.updated",
        "export_source.deleted",
        "export_destination.created",
        "export_destination.updated",
        "export_destination.deleted",
        "recipient.created",
        "recipient.updated",
        "recipient.deleted",
        "export_magic_link.created",
        "export_magic_link.deleted"
       ]
      },
      "type": "array",
      "description": "The events to receive via webhook."
     },
     "api_key": {
      "type": "string",
      "description": "The API key to use when sending the webhook."
     },
     "api_version": {
      "type": "string",
      "description": "The API version to use when rendering events.",
      "default": "2023-10-15"
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateHttpWebhookOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/update-http-webhook-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Descriptive name for webhook."
     },
     "vendor": {
      "type": "string",
      "enum": [
       "generic_post",
       "generic_get"
      ],
      "description": "Webhook destination type. generic_post will deliver payload data as JSON"
     },
     "api_version": {
      "type": "string",
      "description": "The API version to use when rendering events.",
      "default": "2023-10-15"
     },
     "events": {
      "items": {
       "type": "string",
       "enum": [
        "transfer.cancelled",
        "transfer.error",
        "transfer.success",
        "export_source.created",
        "export_source.updated",
        "export_source.deleted",
        "export_destination.created",
        "export_destination.updated",
        "export_destination.deleted",
        "recipient.created",
        "recipient.updated",
        "recipient.deleted",
        "export_magic_link.created",
        "export_magic_link.deleted"
       ]
      },
      "type": "array",
      "description": "The events to receive via webhook."
     },
     "url": {
      "type": "string",
      "pattern": "^https?://.+$",
      "description": "The URL to send the webhook to."
     },
     "api_key": {
      "type": "string",
      "description": "The API key to use when sending the webhook."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdatePagerDutyWebhookOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/update-pager-duty-webhook-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Descriptive name for webhook."
     },
     "vendor": {
      "type": "string",
      "enum": [
       "pagerduty"
      ],
      "description": "Webhook destination type. pagerduty will POST a JSON payload data formatted for the enqueue endpoint of the PagerDuty V2 Events API."
     },
     "api_version": {
      "type": "string",
      "description": "The API version to use when rendering events.",
      "default": "2023-10-15"
     },
     "events": {
      "items": {
       "type": "string",
       "enum": [
        "transfer.cancelled",
        "transfer.error",
        "transfer.success",
        "export_source.created",
        "export_source.updated",
        "export_source.deleted",
        "export_destination.created",
        "export_destination.updated",
        "export_destination.deleted",
        "recipient.created",
        "recipient.updated",
        "recipient.deleted",
        "export_magic_link.created",
        "export_magic_link.deleted"
       ]
      },
      "type": "array",
      "description": "The events to receive via webhook."
     },
     "api_key": {
      "type": "string",
      "description": "Integration Key provided by PagerDuty in the Events API Overview of the service configured to monitor these events."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateSensitiveTraceEndpointOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/update-sensitive-trace-endpoint-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Optional name of the sensitive trace endpoint."
     },
     "description": {
      "type": "string",
      "description": "Optional description of the sensitive trace endpoint."
     },
     "url": {
      "type": "string",
      "pattern": "^https?://.+$",
      "description": "Optional URL to send the sensitive trace to."
     },
     "header_template": {
      "type": "string",
      "description": "Optional template for the headers to send with the sensitive trace. If left empty default headers will be sent."
     },
     "secret": {
      "type": "string",
      "description": "Optional secret to authenticate the sensitive trace endpoint."
     },
     "body_template": {
      "type": "string",
      "description": "Optional template for the body to send with the sensitive trace. If left empty default body will be sent."
     }
    },
    "additionalProperties": false,
    "type": "object"
   },
   "UpdateSlackWebhookOptions": {
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://github.com/prequel-co/datafeed/internal/shared/api/models/update-slack-webhook-options",
    "properties": {
     "name": {
      "type": "string",
      "description": "Descriptive name for webhook."
     },
     "vendor": {
      "type": "string",
      "enum": [
       "slack"
      ],
      "description": "Webhook destination type. slack will POST a JSON payload formatted for Slack incoming webhooks."
     },
     "api_version": {
      "type": "string",
      "description": "The API version to use when rendering events.",
      "default": "2023-10-15"
     },
     "events": {
      "items": {
       "type": "string",
       "enum": [
        "transfer.cancelled",
        "transfer.error",
        "transfer.success",
        "export_source.created",
        "export_source.updated",
        "export_source.deleted",
        "export_destination.created",
        "export_destination.updated",
        "export_destination.deleted",
        "recipient.created",
        "recipient.updated",
        "recipient.deleted",
        "export_magic_link.created",
        "export_magic_link.deleted"
       ]
      },
      "type": "array",
      "description": "The events to receive via webhook."
     },
     "url": {
      "type": "string",
      "pattern": "^https://hooks\\.slack\\.com/services/.+$",
      "description": "Destination URL provided by Slack in the form 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'."
     }
    },
    "additionalProperties": false,
    "type": "object"
   }
  },
  "parameters": {},
  "responses": {
   "BadRequest": {
    "description": "Bad Request",
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/ErrorResponse"
      }
     }
    }
   },
   "Unauthorized": {
    "description": "Unauthorized",
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/ErrorResponse"
      }
     }
    }
   },
   "NotFound": {
    "description": "Not Found",
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/ErrorResponse"
      }
     }
    }
   },
   "InternalServerError": {
    "description": "Internal Server Error",
    "content": {
     "application/json": {
      "schema": {
       "$ref": "#/components/schemas/ErrorResponse"
      }
     }
    }
   }
  },
  "securitySchemes": {
   "ApiKeyAuth": {
    "type": "apiKey",
    "in": "header",
    "name": "X-API-KEY"
   }
  }
 }
}
