diff --git a/api/app_public.json b/api/app_public.json index 310fa17..078c29b 100644 --- a/api/app_public.json +++ b/api/app_public.json @@ -4971,6 +4971,11 @@ "$ref": "#/components/schemas/SourceConfigTemplateMode", "default": "REPLICATION" }, + "is_experimental": { + "type": "boolean", + "title": "Is Experimental", + "default": false + }, "created_at": { "anyOf": [ { @@ -5953,6 +5958,11 @@ "$ref": "#/components/schemas/SourceConfigTemplateMode", "default": "REPLICATION" }, + "is_experimental": { + "type": "boolean", + "title": "Is Experimental", + "default": false + }, "created_at": { "anyOf": [ { @@ -6229,6 +6239,11 @@ "$ref": "#/components/schemas/SourceConfigTemplateMode", "default": "REPLICATION" }, + "is_experimental": { + "type": "boolean", + "title": "Is Experimental", + "default": false + }, "created_at": { "anyOf": [ { @@ -6538,6 +6553,11 @@ "$ref": "#/components/schemas/SourceConfigTemplateMode", "default": "REPLICATION" }, + "is_experimental": { + "type": "boolean", + "title": "Is Experimental", + "default": false + }, "created_at": { "anyOf": [ { diff --git a/internal/spec/extracted_gen.go b/internal/spec/extracted_gen.go index 6f12ca7..4d3cca0 100644 --- a/internal/spec/extracted_gen.go +++ b/internal/spec/extracted_gen.go @@ -30,7 +30,7 @@ var schemas = map[string]RouteSchema{ Summary: "Get a connector", Description: "**Requires an Access Token as the bearer token.**\n\nGet an end user's configured connector.", Parameters: json.RawMessage(`[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","title":"Id","type":"string"}},{"description":"The organization ID to target for this request","in":"header","name":"x-organization-id","required":false,"schema":{"description":"The organization ID to target for this request","format":"uuid","title":"X-Organization-Id","type":"string"}}]`), - Response: json.RawMessage(`{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"entities":{"anyOf":[{"items":{"properties":{"entity":{"title":"Entity","type":"string"},"modes":{"anyOf":[{"items":{"enum":["read","write"],"title":"RequestedEntityMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Modes"}},"required":["entity"],"title":"RequestedEntity","type":"object"},"type":"array"},{"type":"null"}],"description":"User-selected entity/mode pairs that constrain stream selection.","title":"Entities"},"id":{"format":"uuid","title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"replication_config":{"additionalProperties":true,"title":"Replication Config","type":"object"},"source_template":{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"customization":{"anyOf":[{"properties":{"stream_customizations":{"anyOf":[{"additionalProperties":{"properties":{"cursor_field":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cursor Field"},"primary_key_fields":{"anyOf":[{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Primary Key Fields"}},"title":"StreamCustomization","type":"object"},"type":"object"},{"type":"null"}],"title":"Stream Customizations"},"stream_mappers":{"anyOf":[{"additionalProperties":{"items":{"discriminator":{"mapping":{"encryption":"#/components/schemas/EncryptionMapper","field-filtering":"#/components/schemas/FieldFilteringMapper","field-renaming":"#/components/schemas/FieldRenamingMapper","hashing":"#/components/schemas/HashingMapper","row-filtering":"#/components/schemas/RowFilteringMapper-Output"},"propertyName":"type"},"oneOf":[{"description":"Hashing mapper - converts field values to cryptographic hashes.\n\nApplies a hash function (SHA256, SHA512, or MD5) to transform field values.\nCan either replace the original field or create a new field with a suffix.","properties":{"mapper_configuration":{"description":"Configuration for hashing mapper - uses snake_case.\n\nTransforms a field value by applying a cryptographic hash function.\nThe original field is replaced with the hashed value, or a new field\ncan be created with a suffix.","properties":{"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional suffix for new field with hashed value","title":"Field Name Suffix"},"method":{"description":"Hashing algorithm to use","enum":["SHA256","SHA512","MD5"],"title":"Method","type":"string"},"target_field":{"description":"Field to hash","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","method"],"title":"HashingMapperConfig","type":"object"},"type":{"const":"hashing","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"HashingMapper","type":"object"},{"description":"Field renaming mapper - renames a single field per configuration.\n\nRenames one field in the data stream (original_field_name → new_field_name).\nUseful for standardizing field names across different data sources.","properties":{"mapper_configuration":{"description":"Configuration for field renaming mapper - uses snake_case.\n\nRenames a single field in the data stream.","properties":{"new_field_name":{"description":"New name for the field","minLength":1,"title":"New Field Name","type":"string"},"original_field_name":{"description":"Original field name to rename","minLength":1,"title":"Original Field Name","type":"string"}},"required":["original_field_name","new_field_name"],"title":"FieldRenamingMapperConfig","type":"object"},"type":{"const":"field-renaming","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldRenamingMapper","type":"object"},{"description":"Field filtering mapper - removes a specific field from each record.\n\nFilters out a single specified field from the data stream. The targeted\nfield is removed from all records in the output stream.\n\nNote: This currently supports removing a single field (denylist approach).\nTo support allowlist filtering (keeping only specified fields), the config\nwould need to be extended with an allowed_fields list instead of target_field.","properties":{"mapper_configuration":{"description":"Configuration for field filtering mapper - uses snake_case.\n\nFilters out a specific field from the data stream.","properties":{"target_field":{"description":"Field to filter out","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field"],"title":"FieldFilteringMapperConfig","type":"object"},"type":{"const":"field-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldFilteringMapper","type":"object"},{"description":"Row filtering mapper - filters rows based on field equality.\n\nOnly keeps rows where a specific field equals a given value. Rows that\ndon't match the condition are excluded from the output.","properties":{"mapper_configuration":{"description":"Configuration for row filtering mapper - uses snake_case.\n\nFilters rows based on a condition. Only rows where the specified field\nequals the provided value are kept.","properties":{"conditions":{"description":"Filtering condition","properties":{"comparison_value":{"description":"Value to compare against","minLength":1,"title":"Comparison Value","type":"string"},"field_name":{"description":"Field to check","minLength":1,"title":"Field Name","type":"string"},"type":{"const":"equal","description":"Type of comparison","title":"Type","type":"string"}},"required":["type","field_name","comparison_value"],"title":"RowFilterCondition","type":"object"}},"required":["conditions"],"title":"RowFilteringMapperConfig","type":"object"},"type":{"const":"row-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"RowFilteringMapper","type":"object"},{"description":"Encryption mapper - encrypts sensitive fields with RSA.\n\nEncrypts specified fields using RSA public key encryption. The encrypted\nvalues replace the original field values in the output stream.\n\nNote: Only RSA encryption is supported. AES is not available due to\nsecrets hydration issues in the Airbyte platform.","properties":{"mapper_configuration":{"description":"Configuration for encryption mapper - uses snake_case.\n\nEncrypts a specified field using RSA (OAEP-SHA256). The encrypted value\nreplaces the original field value or is emitted with the configured suffix.\n\nNOTE: Symmetric AES is NOT supported in this API.\n\nWhy we don't support AES:\n- Secrets hydration for AES mappers is not currently supported in the platform\n- AES requires symmetric key management which doesn't align well with\n Sonar's secrets management architecture\n- RSA with public keys is more appropriate for this use case as it\n allows encryption without exposing private keys in the configuration\n\nIf you need AES encryption, this must be resolved at the platform level\nwith proper secrets storage and hydration support before we can add it here.","properties":{"algorithm":{"const":"RSA","default":"RSA","description":"Encryption algorithm (RSA only)","title":"Algorithm","type":"string"},"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"_encrypted","description":"Optional suffix for encrypted field","title":"Field Name Suffix"},"oaep_hash":{"const":"SHA256","default":"SHA256","description":"Hash function for OAEP padding","title":"Oaep Hash","type":"string"},"output_encoding":{"default":"base64","description":"Encoding for ciphertext bytes","enum":["base64","hex"],"title":"Output Encoding","type":"string"},"padding":{"const":"RSA-OAEP","default":"RSA-OAEP","description":"RSA padding mode","title":"Padding","type":"string"},"public_key":{"description":"RSA public key in PEM format","minLength":1,"title":"Public Key","type":"string"},"target_field":{"description":"Field to encrypt","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","public_key"],"title":"EncryptionMapperConfig","type":"object"},"type":{"const":"encryption","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"EncryptionMapper","type":"object"}]},"type":"array"},"type":"object"},{"type":"null"}],"title":"Stream Mappers"},"stream_selection_mode":{"default":"suggested","description":"Strategy for selecting streams when creating connections","enum":["all","suggested","whitelist"],"title":"StreamSelectionMode","type":"string"},"stream_whitelist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stream Whitelist"}},"title":"SourceTemplateCustomization","type":"object"},{"type":"null"}],"description":"\nCustomizations for the source template. If stream_whitelist is provided, only the specified streams will be synced.\nIf stream_customizations are provided, and stream fields specified will override the default settings for only that\nfield. Where any streams fields are not specified, the default settings will be used.\n"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"id":{"format":"uuid","title":"Id","type":"string"},"mode":{"default":"REPLICATION","enum":["DIRECT","REPLICATION","MULTI"],"title":"SourceConfigTemplateMode","type":"string"},"name":{"title":"Name","type":"string"},"partial_default_config":{"additionalProperties":true,"title":"Partial Default Config","type":"object"},"source_definition_id":{"format":"uuid","title":"Source Definition Id","type":"string"},"tags":{"items":{"type":"string"},"title":"Tags","type":"array"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"},"user_config_spec":{"properties":{"advanced_auth":{"anyOf":[{"properties":{"auth_flow_type":{"title":"Auth Flow Type","type":"string"},"oauth_config_specification":{"properties":{"complete_oauth_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Output Specification","type":"object"},"complete_oauth_server_input_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Input Specification","type":"object"},"complete_oauth_server_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Output Specification","type":"object"},"oauth_connector_input_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth Connector Input Specification"},"oauth_user_input_from_connector_config_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth User Input From Connector Config Specification"}},"title":"OAuthConfigSpecification","type":"object"},"predicate_key":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Predicate Key"},"predicate_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Predicate Value"}},"required":["auth_flow_type","oauth_config_specification"],"title":"AdvancedAuth","type":"object"},{"type":"null"}]},"connectionSpecification":{"properties":{"$schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"$Schema"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"properties":{"additionalProperties":true,"title":"Properties","type":"object"},"required":{"items":{"type":"string"},"title":"Required","type":"array"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"title":"Type","type":"string"}},"required":["type"],"title":"ConnectionSpecification","type":"object"},"documentationUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentationurl"},"supported_destination_sync_modes":{"anyOf":[{"items":{"enum":["append","append_dedup","overwrite","overwrite_dedup","soft_delete","update"],"title":"DestinationSyncMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Destination Sync Modes"}},"required":["connectionSpecification"],"title":"ConnectorSpecification","type":"object"}},"required":["id","name","source_definition_id","user_config_spec","partial_default_config"],"title":"DetailedSourceTemplate","type":"object"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"}},"required":["id","name","source_template","replication_config"],"title":"ConnectorSourceGetResponse","type":"object"}`), + Response: json.RawMessage(`{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"entities":{"anyOf":[{"items":{"properties":{"entity":{"title":"Entity","type":"string"},"modes":{"anyOf":[{"items":{"enum":["read","write"],"title":"RequestedEntityMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Modes"}},"required":["entity"],"title":"RequestedEntity","type":"object"},"type":"array"},{"type":"null"}],"description":"User-selected entity/mode pairs that constrain stream selection.","title":"Entities"},"id":{"format":"uuid","title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"replication_config":{"additionalProperties":true,"title":"Replication Config","type":"object"},"source_template":{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"customization":{"anyOf":[{"properties":{"stream_customizations":{"anyOf":[{"additionalProperties":{"properties":{"cursor_field":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cursor Field"},"primary_key_fields":{"anyOf":[{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Primary Key Fields"}},"title":"StreamCustomization","type":"object"},"type":"object"},{"type":"null"}],"title":"Stream Customizations"},"stream_mappers":{"anyOf":[{"additionalProperties":{"items":{"discriminator":{"mapping":{"encryption":"#/components/schemas/EncryptionMapper","field-filtering":"#/components/schemas/FieldFilteringMapper","field-renaming":"#/components/schemas/FieldRenamingMapper","hashing":"#/components/schemas/HashingMapper","row-filtering":"#/components/schemas/RowFilteringMapper-Output"},"propertyName":"type"},"oneOf":[{"description":"Hashing mapper - converts field values to cryptographic hashes.\n\nApplies a hash function (SHA256, SHA512, or MD5) to transform field values.\nCan either replace the original field or create a new field with a suffix.","properties":{"mapper_configuration":{"description":"Configuration for hashing mapper - uses snake_case.\n\nTransforms a field value by applying a cryptographic hash function.\nThe original field is replaced with the hashed value, or a new field\ncan be created with a suffix.","properties":{"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional suffix for new field with hashed value","title":"Field Name Suffix"},"method":{"description":"Hashing algorithm to use","enum":["SHA256","SHA512","MD5"],"title":"Method","type":"string"},"target_field":{"description":"Field to hash","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","method"],"title":"HashingMapperConfig","type":"object"},"type":{"const":"hashing","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"HashingMapper","type":"object"},{"description":"Field renaming mapper - renames a single field per configuration.\n\nRenames one field in the data stream (original_field_name → new_field_name).\nUseful for standardizing field names across different data sources.","properties":{"mapper_configuration":{"description":"Configuration for field renaming mapper - uses snake_case.\n\nRenames a single field in the data stream.","properties":{"new_field_name":{"description":"New name for the field","minLength":1,"title":"New Field Name","type":"string"},"original_field_name":{"description":"Original field name to rename","minLength":1,"title":"Original Field Name","type":"string"}},"required":["original_field_name","new_field_name"],"title":"FieldRenamingMapperConfig","type":"object"},"type":{"const":"field-renaming","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldRenamingMapper","type":"object"},{"description":"Field filtering mapper - removes a specific field from each record.\n\nFilters out a single specified field from the data stream. The targeted\nfield is removed from all records in the output stream.\n\nNote: This currently supports removing a single field (denylist approach).\nTo support allowlist filtering (keeping only specified fields), the config\nwould need to be extended with an allowed_fields list instead of target_field.","properties":{"mapper_configuration":{"description":"Configuration for field filtering mapper - uses snake_case.\n\nFilters out a specific field from the data stream.","properties":{"target_field":{"description":"Field to filter out","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field"],"title":"FieldFilteringMapperConfig","type":"object"},"type":{"const":"field-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldFilteringMapper","type":"object"},{"description":"Row filtering mapper - filters rows based on field equality.\n\nOnly keeps rows where a specific field equals a given value. Rows that\ndon't match the condition are excluded from the output.","properties":{"mapper_configuration":{"description":"Configuration for row filtering mapper - uses snake_case.\n\nFilters rows based on a condition. Only rows where the specified field\nequals the provided value are kept.","properties":{"conditions":{"description":"Filtering condition","properties":{"comparison_value":{"description":"Value to compare against","minLength":1,"title":"Comparison Value","type":"string"},"field_name":{"description":"Field to check","minLength":1,"title":"Field Name","type":"string"},"type":{"const":"equal","description":"Type of comparison","title":"Type","type":"string"}},"required":["type","field_name","comparison_value"],"title":"RowFilterCondition","type":"object"}},"required":["conditions"],"title":"RowFilteringMapperConfig","type":"object"},"type":{"const":"row-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"RowFilteringMapper","type":"object"},{"description":"Encryption mapper - encrypts sensitive fields with RSA.\n\nEncrypts specified fields using RSA public key encryption. The encrypted\nvalues replace the original field values in the output stream.\n\nNote: Only RSA encryption is supported. AES is not available due to\nsecrets hydration issues in the Airbyte platform.","properties":{"mapper_configuration":{"description":"Configuration for encryption mapper - uses snake_case.\n\nEncrypts a specified field using RSA (OAEP-SHA256). The encrypted value\nreplaces the original field value or is emitted with the configured suffix.\n\nNOTE: Symmetric AES is NOT supported in this API.\n\nWhy we don't support AES:\n- Secrets hydration for AES mappers is not currently supported in the platform\n- AES requires symmetric key management which doesn't align well with\n Sonar's secrets management architecture\n- RSA with public keys is more appropriate for this use case as it\n allows encryption without exposing private keys in the configuration\n\nIf you need AES encryption, this must be resolved at the platform level\nwith proper secrets storage and hydration support before we can add it here.","properties":{"algorithm":{"const":"RSA","default":"RSA","description":"Encryption algorithm (RSA only)","title":"Algorithm","type":"string"},"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"_encrypted","description":"Optional suffix for encrypted field","title":"Field Name Suffix"},"oaep_hash":{"const":"SHA256","default":"SHA256","description":"Hash function for OAEP padding","title":"Oaep Hash","type":"string"},"output_encoding":{"default":"base64","description":"Encoding for ciphertext bytes","enum":["base64","hex"],"title":"Output Encoding","type":"string"},"padding":{"const":"RSA-OAEP","default":"RSA-OAEP","description":"RSA padding mode","title":"Padding","type":"string"},"public_key":{"description":"RSA public key in PEM format","minLength":1,"title":"Public Key","type":"string"},"target_field":{"description":"Field to encrypt","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","public_key"],"title":"EncryptionMapperConfig","type":"object"},"type":{"const":"encryption","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"EncryptionMapper","type":"object"}]},"type":"array"},"type":"object"},{"type":"null"}],"title":"Stream Mappers"},"stream_selection_mode":{"default":"suggested","description":"Strategy for selecting streams when creating connections","enum":["all","suggested","whitelist"],"title":"StreamSelectionMode","type":"string"},"stream_whitelist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stream Whitelist"}},"title":"SourceTemplateCustomization","type":"object"},{"type":"null"}],"description":"\nCustomizations for the source template. If stream_whitelist is provided, only the specified streams will be synced.\nIf stream_customizations are provided, and stream fields specified will override the default settings for only that\nfield. Where any streams fields are not specified, the default settings will be used.\n"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"id":{"format":"uuid","title":"Id","type":"string"},"is_experimental":{"default":false,"title":"Is Experimental","type":"boolean"},"mode":{"default":"REPLICATION","enum":["DIRECT","REPLICATION","MULTI"],"title":"SourceConfigTemplateMode","type":"string"},"name":{"title":"Name","type":"string"},"partial_default_config":{"additionalProperties":true,"title":"Partial Default Config","type":"object"},"source_definition_id":{"format":"uuid","title":"Source Definition Id","type":"string"},"tags":{"items":{"type":"string"},"title":"Tags","type":"array"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"},"user_config_spec":{"properties":{"advanced_auth":{"anyOf":[{"properties":{"auth_flow_type":{"title":"Auth Flow Type","type":"string"},"oauth_config_specification":{"properties":{"complete_oauth_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Output Specification","type":"object"},"complete_oauth_server_input_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Input Specification","type":"object"},"complete_oauth_server_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Output Specification","type":"object"},"oauth_connector_input_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth Connector Input Specification"},"oauth_user_input_from_connector_config_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth User Input From Connector Config Specification"}},"title":"OAuthConfigSpecification","type":"object"},"predicate_key":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Predicate Key"},"predicate_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Predicate Value"}},"required":["auth_flow_type","oauth_config_specification"],"title":"AdvancedAuth","type":"object"},{"type":"null"}]},"connectionSpecification":{"properties":{"$schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"$Schema"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"properties":{"additionalProperties":true,"title":"Properties","type":"object"},"required":{"items":{"type":"string"},"title":"Required","type":"array"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"title":"Type","type":"string"}},"required":["type"],"title":"ConnectionSpecification","type":"object"},"documentationUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentationurl"},"supported_destination_sync_modes":{"anyOf":[{"items":{"enum":["append","append_dedup","overwrite","overwrite_dedup","soft_delete","update"],"title":"DestinationSyncMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Destination Sync Modes"}},"required":["connectionSpecification"],"title":"ConnectorSpecification","type":"object"}},"required":["id","name","source_definition_id","user_config_spec","partial_default_config"],"title":"DetailedSourceTemplate","type":"object"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"}},"required":["id","name","source_template","replication_config"],"title":"ConnectorSourceGetResponse","type":"object"}`), }, "GET /api/v1/integrations/templates/sources": { Path: "/api/v1/integrations/templates/sources", @@ -55,7 +55,7 @@ var schemas = map[string]RouteSchema{ Description: "**Requires an Access Token as the bearer token.**\n\nCreate an end user's configured connector, config should be validated before.", Parameters: json.RawMessage(`[{"description":"The organization ID to target for this request","in":"header","name":"x-organization-id","required":false,"schema":{"description":"The organization ID to target for this request","format":"uuid","title":"X-Organization-Id","type":"string"}}]`), RequestBody: json.RawMessage("{\"description\":\"Request model for creating a connector source.\\n\\nUses `replication_config` instead of `source_config` for clearer semantics.\\nFor REPLICATION mode: pass the full config in `replication_config`\\nFor MULTI/DIRECT mode: pass `credentials` + `environment` + optional `replication_config` overrides\\nFor OAuth: pass `secret_id` from OAuth callback instead of credentials\",\"properties\":{\"connector_type\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"description\":\"Connector name (case-insensitive exact match, e.g., 'Hubspot', 'hubspot', 'HUBSPOT').\",\"title\":\"Connector Type\"},\"credentials\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"description\":\"Authentication configuration for the source. Required for DIRECT/MULTI mode sources. At least one of replication_config, credentials, or server_side_oauth_secret_id must be provided.\",\"title\":\"Credentials\"},\"definition_id\":{\"anyOf\":[{\"format\":\"uuid\",\"type\":\"string\"},{\"type\":\"null\"}],\"description\":\"Actor definition ID for the connector.\",\"title\":\"Definition Id\"},\"entities\":{\"anyOf\":[{\"items\":{\"properties\":{\"entity\":{\"title\":\"Entity\",\"type\":\"string\"},\"modes\":{\"anyOf\":[{\"items\":{\"enum\":[\"read\",\"write\"],\"title\":\"RequestedEntityMode\",\"type\":\"string\"},\"type\":\"array\"},{\"type\":\"null\"}],\"title\":\"Modes\"}},\"required\":[\"entity\"],\"title\":\"RequestedEntity\",\"type\":\"object\"},\"type\":\"array\"},{\"type\":\"null\"}],\"description\":\"Optional entity/mode pairs used to constrain stream selection. For OAuth connectors, also used to determine requested scopes.\",\"title\":\"Entities\"},\"environment\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"description\":\"User-provided configuration for the source. Used for DIRECT/MULTI mode sources (can be empty dict).\",\"title\":\"Environment\"},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"description\":\"The name of the source.\",\"title\":\"Name\"},\"replication_config\":{\"anyOf\":[{\"additionalProperties\":true,\"type\":\"object\"},{\"type\":\"null\"}],\"description\":\"The configuration for the replication connector. For REPLICATION mode, this is the full config. For MULTI/DIRECT mode, this can contain replication-specific settings like start_date, lookback_window, etc. that will be merged with credentials and environment. At least one of replication_config, credentials, or server_side_oauth_secret_id must be provided.\",\"title\":\"Replication Config\"},\"selected_connection_template_tags\":{\"description\":\"Optional list of tags to filter which connection templates will be used for this source.\",\"items\":{\"type\":\"string\"},\"title\":\"Selected Connection Template Tags\",\"type\":\"array\"},\"selected_connection_template_tags_mode\":{\"default\":\"any\",\"description\":\"Tag selection mode for connection templates: 'all' (must have all tags) or 'any' (must have at least one tag). Defaults to 'any'.\",\"enum\":[\"all\",\"any\"],\"title\":\"TagSelectionMode\",\"type\":\"string\"},\"server_side_oauth_secret_id\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}],\"description\":\"OAuth secret ID obtained from the initiateOAuth redirect callback. When provided, credentials are not required as OAuth handles authentication.\",\"title\":\"Server Side Oauth Secret Id\"},\"source_template_id\":{\"anyOf\":[{\"format\":\"uuid\",\"type\":\"string\"},{\"type\":\"null\"}],\"description\":\"Source template ID. Optional when only one template exists for the connector type. Required when multiple templates exist for the same connector type.\",\"title\":\"Source Template Id\"},\"workspace_name\":{\"description\":\"Workspace name. Previously named customer_name / external_user_id.\",\"title\":\"Workspace Name\",\"type\":\"string\"}},\"required\":[\"workspace_name\"],\"title\":\"ConnectorSourceCreateRequest\",\"type\":\"object\"}"), - Response: json.RawMessage(`{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"entities":{"anyOf":[{"items":{"properties":{"entity":{"title":"Entity","type":"string"},"modes":{"anyOf":[{"items":{"enum":["read","write"],"title":"RequestedEntityMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Modes"}},"required":["entity"],"title":"RequestedEntity","type":"object"},"type":"array"},{"type":"null"}],"description":"User-selected entity/mode pairs that constrain stream selection.","title":"Entities"},"id":{"format":"uuid","title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"replication_config":{"additionalProperties":true,"title":"Replication Config","type":"object"},"source_template":{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"customization":{"anyOf":[{"properties":{"stream_customizations":{"anyOf":[{"additionalProperties":{"properties":{"cursor_field":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cursor Field"},"primary_key_fields":{"anyOf":[{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Primary Key Fields"}},"title":"StreamCustomization","type":"object"},"type":"object"},{"type":"null"}],"title":"Stream Customizations"},"stream_mappers":{"anyOf":[{"additionalProperties":{"items":{"discriminator":{"mapping":{"encryption":"#/components/schemas/EncryptionMapper","field-filtering":"#/components/schemas/FieldFilteringMapper","field-renaming":"#/components/schemas/FieldRenamingMapper","hashing":"#/components/schemas/HashingMapper","row-filtering":"#/components/schemas/RowFilteringMapper-Output"},"propertyName":"type"},"oneOf":[{"description":"Hashing mapper - converts field values to cryptographic hashes.\n\nApplies a hash function (SHA256, SHA512, or MD5) to transform field values.\nCan either replace the original field or create a new field with a suffix.","properties":{"mapper_configuration":{"description":"Configuration for hashing mapper - uses snake_case.\n\nTransforms a field value by applying a cryptographic hash function.\nThe original field is replaced with the hashed value, or a new field\ncan be created with a suffix.","properties":{"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional suffix for new field with hashed value","title":"Field Name Suffix"},"method":{"description":"Hashing algorithm to use","enum":["SHA256","SHA512","MD5"],"title":"Method","type":"string"},"target_field":{"description":"Field to hash","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","method"],"title":"HashingMapperConfig","type":"object"},"type":{"const":"hashing","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"HashingMapper","type":"object"},{"description":"Field renaming mapper - renames a single field per configuration.\n\nRenames one field in the data stream (original_field_name → new_field_name).\nUseful for standardizing field names across different data sources.","properties":{"mapper_configuration":{"description":"Configuration for field renaming mapper - uses snake_case.\n\nRenames a single field in the data stream.","properties":{"new_field_name":{"description":"New name for the field","minLength":1,"title":"New Field Name","type":"string"},"original_field_name":{"description":"Original field name to rename","minLength":1,"title":"Original Field Name","type":"string"}},"required":["original_field_name","new_field_name"],"title":"FieldRenamingMapperConfig","type":"object"},"type":{"const":"field-renaming","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldRenamingMapper","type":"object"},{"description":"Field filtering mapper - removes a specific field from each record.\n\nFilters out a single specified field from the data stream. The targeted\nfield is removed from all records in the output stream.\n\nNote: This currently supports removing a single field (denylist approach).\nTo support allowlist filtering (keeping only specified fields), the config\nwould need to be extended with an allowed_fields list instead of target_field.","properties":{"mapper_configuration":{"description":"Configuration for field filtering mapper - uses snake_case.\n\nFilters out a specific field from the data stream.","properties":{"target_field":{"description":"Field to filter out","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field"],"title":"FieldFilteringMapperConfig","type":"object"},"type":{"const":"field-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldFilteringMapper","type":"object"},{"description":"Row filtering mapper - filters rows based on field equality.\n\nOnly keeps rows where a specific field equals a given value. Rows that\ndon't match the condition are excluded from the output.","properties":{"mapper_configuration":{"description":"Configuration for row filtering mapper - uses snake_case.\n\nFilters rows based on a condition. Only rows where the specified field\nequals the provided value are kept.","properties":{"conditions":{"description":"Filtering condition","properties":{"comparison_value":{"description":"Value to compare against","minLength":1,"title":"Comparison Value","type":"string"},"field_name":{"description":"Field to check","minLength":1,"title":"Field Name","type":"string"},"type":{"const":"equal","description":"Type of comparison","title":"Type","type":"string"}},"required":["type","field_name","comparison_value"],"title":"RowFilterCondition","type":"object"}},"required":["conditions"],"title":"RowFilteringMapperConfig","type":"object"},"type":{"const":"row-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"RowFilteringMapper","type":"object"},{"description":"Encryption mapper - encrypts sensitive fields with RSA.\n\nEncrypts specified fields using RSA public key encryption. The encrypted\nvalues replace the original field values in the output stream.\n\nNote: Only RSA encryption is supported. AES is not available due to\nsecrets hydration issues in the Airbyte platform.","properties":{"mapper_configuration":{"description":"Configuration for encryption mapper - uses snake_case.\n\nEncrypts a specified field using RSA (OAEP-SHA256). The encrypted value\nreplaces the original field value or is emitted with the configured suffix.\n\nNOTE: Symmetric AES is NOT supported in this API.\n\nWhy we don't support AES:\n- Secrets hydration for AES mappers is not currently supported in the platform\n- AES requires symmetric key management which doesn't align well with\n Sonar's secrets management architecture\n- RSA with public keys is more appropriate for this use case as it\n allows encryption without exposing private keys in the configuration\n\nIf you need AES encryption, this must be resolved at the platform level\nwith proper secrets storage and hydration support before we can add it here.","properties":{"algorithm":{"const":"RSA","default":"RSA","description":"Encryption algorithm (RSA only)","title":"Algorithm","type":"string"},"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"_encrypted","description":"Optional suffix for encrypted field","title":"Field Name Suffix"},"oaep_hash":{"const":"SHA256","default":"SHA256","description":"Hash function for OAEP padding","title":"Oaep Hash","type":"string"},"output_encoding":{"default":"base64","description":"Encoding for ciphertext bytes","enum":["base64","hex"],"title":"Output Encoding","type":"string"},"padding":{"const":"RSA-OAEP","default":"RSA-OAEP","description":"RSA padding mode","title":"Padding","type":"string"},"public_key":{"description":"RSA public key in PEM format","minLength":1,"title":"Public Key","type":"string"},"target_field":{"description":"Field to encrypt","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","public_key"],"title":"EncryptionMapperConfig","type":"object"},"type":{"const":"encryption","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"EncryptionMapper","type":"object"}]},"type":"array"},"type":"object"},{"type":"null"}],"title":"Stream Mappers"},"stream_selection_mode":{"default":"suggested","description":"Strategy for selecting streams when creating connections","enum":["all","suggested","whitelist"],"title":"StreamSelectionMode","type":"string"},"stream_whitelist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stream Whitelist"}},"title":"SourceTemplateCustomization","type":"object"},{"type":"null"}],"description":"\nCustomizations for the source template. If stream_whitelist is provided, only the specified streams will be synced.\nIf stream_customizations are provided, and stream fields specified will override the default settings for only that\nfield. Where any streams fields are not specified, the default settings will be used.\n"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"id":{"format":"uuid","title":"Id","type":"string"},"mode":{"default":"REPLICATION","enum":["DIRECT","REPLICATION","MULTI"],"title":"SourceConfigTemplateMode","type":"string"},"name":{"title":"Name","type":"string"},"partial_default_config":{"additionalProperties":true,"title":"Partial Default Config","type":"object"},"source_definition_id":{"format":"uuid","title":"Source Definition Id","type":"string"},"tags":{"items":{"type":"string"},"title":"Tags","type":"array"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"},"user_config_spec":{"properties":{"advanced_auth":{"anyOf":[{"properties":{"auth_flow_type":{"title":"Auth Flow Type","type":"string"},"oauth_config_specification":{"properties":{"complete_oauth_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Output Specification","type":"object"},"complete_oauth_server_input_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Input Specification","type":"object"},"complete_oauth_server_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Output Specification","type":"object"},"oauth_connector_input_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth Connector Input Specification"},"oauth_user_input_from_connector_config_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth User Input From Connector Config Specification"}},"title":"OAuthConfigSpecification","type":"object"},"predicate_key":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Predicate Key"},"predicate_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Predicate Value"}},"required":["auth_flow_type","oauth_config_specification"],"title":"AdvancedAuth","type":"object"},{"type":"null"}]},"connectionSpecification":{"properties":{"$schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"$Schema"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"properties":{"additionalProperties":true,"title":"Properties","type":"object"},"required":{"items":{"type":"string"},"title":"Required","type":"array"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"title":"Type","type":"string"}},"required":["type"],"title":"ConnectionSpecification","type":"object"},"documentationUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentationurl"},"supported_destination_sync_modes":{"anyOf":[{"items":{"enum":["append","append_dedup","overwrite","overwrite_dedup","soft_delete","update"],"title":"DestinationSyncMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Destination Sync Modes"}},"required":["connectionSpecification"],"title":"ConnectorSpecification","type":"object"}},"required":["id","name","source_definition_id","user_config_spec","partial_default_config"],"title":"DetailedSourceTemplate","type":"object"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"}},"required":["id","name","source_template","replication_config"],"title":"ConnectorSourceCreateResponse","type":"object"}`), + Response: json.RawMessage(`{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"entities":{"anyOf":[{"items":{"properties":{"entity":{"title":"Entity","type":"string"},"modes":{"anyOf":[{"items":{"enum":["read","write"],"title":"RequestedEntityMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Modes"}},"required":["entity"],"title":"RequestedEntity","type":"object"},"type":"array"},{"type":"null"}],"description":"User-selected entity/mode pairs that constrain stream selection.","title":"Entities"},"id":{"format":"uuid","title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"replication_config":{"additionalProperties":true,"title":"Replication Config","type":"object"},"source_template":{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"customization":{"anyOf":[{"properties":{"stream_customizations":{"anyOf":[{"additionalProperties":{"properties":{"cursor_field":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cursor Field"},"primary_key_fields":{"anyOf":[{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Primary Key Fields"}},"title":"StreamCustomization","type":"object"},"type":"object"},{"type":"null"}],"title":"Stream Customizations"},"stream_mappers":{"anyOf":[{"additionalProperties":{"items":{"discriminator":{"mapping":{"encryption":"#/components/schemas/EncryptionMapper","field-filtering":"#/components/schemas/FieldFilteringMapper","field-renaming":"#/components/schemas/FieldRenamingMapper","hashing":"#/components/schemas/HashingMapper","row-filtering":"#/components/schemas/RowFilteringMapper-Output"},"propertyName":"type"},"oneOf":[{"description":"Hashing mapper - converts field values to cryptographic hashes.\n\nApplies a hash function (SHA256, SHA512, or MD5) to transform field values.\nCan either replace the original field or create a new field with a suffix.","properties":{"mapper_configuration":{"description":"Configuration for hashing mapper - uses snake_case.\n\nTransforms a field value by applying a cryptographic hash function.\nThe original field is replaced with the hashed value, or a new field\ncan be created with a suffix.","properties":{"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional suffix for new field with hashed value","title":"Field Name Suffix"},"method":{"description":"Hashing algorithm to use","enum":["SHA256","SHA512","MD5"],"title":"Method","type":"string"},"target_field":{"description":"Field to hash","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","method"],"title":"HashingMapperConfig","type":"object"},"type":{"const":"hashing","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"HashingMapper","type":"object"},{"description":"Field renaming mapper - renames a single field per configuration.\n\nRenames one field in the data stream (original_field_name → new_field_name).\nUseful for standardizing field names across different data sources.","properties":{"mapper_configuration":{"description":"Configuration for field renaming mapper - uses snake_case.\n\nRenames a single field in the data stream.","properties":{"new_field_name":{"description":"New name for the field","minLength":1,"title":"New Field Name","type":"string"},"original_field_name":{"description":"Original field name to rename","minLength":1,"title":"Original Field Name","type":"string"}},"required":["original_field_name","new_field_name"],"title":"FieldRenamingMapperConfig","type":"object"},"type":{"const":"field-renaming","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldRenamingMapper","type":"object"},{"description":"Field filtering mapper - removes a specific field from each record.\n\nFilters out a single specified field from the data stream. The targeted\nfield is removed from all records in the output stream.\n\nNote: This currently supports removing a single field (denylist approach).\nTo support allowlist filtering (keeping only specified fields), the config\nwould need to be extended with an allowed_fields list instead of target_field.","properties":{"mapper_configuration":{"description":"Configuration for field filtering mapper - uses snake_case.\n\nFilters out a specific field from the data stream.","properties":{"target_field":{"description":"Field to filter out","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field"],"title":"FieldFilteringMapperConfig","type":"object"},"type":{"const":"field-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldFilteringMapper","type":"object"},{"description":"Row filtering mapper - filters rows based on field equality.\n\nOnly keeps rows where a specific field equals a given value. Rows that\ndon't match the condition are excluded from the output.","properties":{"mapper_configuration":{"description":"Configuration for row filtering mapper - uses snake_case.\n\nFilters rows based on a condition. Only rows where the specified field\nequals the provided value are kept.","properties":{"conditions":{"description":"Filtering condition","properties":{"comparison_value":{"description":"Value to compare against","minLength":1,"title":"Comparison Value","type":"string"},"field_name":{"description":"Field to check","minLength":1,"title":"Field Name","type":"string"},"type":{"const":"equal","description":"Type of comparison","title":"Type","type":"string"}},"required":["type","field_name","comparison_value"],"title":"RowFilterCondition","type":"object"}},"required":["conditions"],"title":"RowFilteringMapperConfig","type":"object"},"type":{"const":"row-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"RowFilteringMapper","type":"object"},{"description":"Encryption mapper - encrypts sensitive fields with RSA.\n\nEncrypts specified fields using RSA public key encryption. The encrypted\nvalues replace the original field values in the output stream.\n\nNote: Only RSA encryption is supported. AES is not available due to\nsecrets hydration issues in the Airbyte platform.","properties":{"mapper_configuration":{"description":"Configuration for encryption mapper - uses snake_case.\n\nEncrypts a specified field using RSA (OAEP-SHA256). The encrypted value\nreplaces the original field value or is emitted with the configured suffix.\n\nNOTE: Symmetric AES is NOT supported in this API.\n\nWhy we don't support AES:\n- Secrets hydration for AES mappers is not currently supported in the platform\n- AES requires symmetric key management which doesn't align well with\n Sonar's secrets management architecture\n- RSA with public keys is more appropriate for this use case as it\n allows encryption without exposing private keys in the configuration\n\nIf you need AES encryption, this must be resolved at the platform level\nwith proper secrets storage and hydration support before we can add it here.","properties":{"algorithm":{"const":"RSA","default":"RSA","description":"Encryption algorithm (RSA only)","title":"Algorithm","type":"string"},"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"_encrypted","description":"Optional suffix for encrypted field","title":"Field Name Suffix"},"oaep_hash":{"const":"SHA256","default":"SHA256","description":"Hash function for OAEP padding","title":"Oaep Hash","type":"string"},"output_encoding":{"default":"base64","description":"Encoding for ciphertext bytes","enum":["base64","hex"],"title":"Output Encoding","type":"string"},"padding":{"const":"RSA-OAEP","default":"RSA-OAEP","description":"RSA padding mode","title":"Padding","type":"string"},"public_key":{"description":"RSA public key in PEM format","minLength":1,"title":"Public Key","type":"string"},"target_field":{"description":"Field to encrypt","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","public_key"],"title":"EncryptionMapperConfig","type":"object"},"type":{"const":"encryption","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"EncryptionMapper","type":"object"}]},"type":"array"},"type":"object"},{"type":"null"}],"title":"Stream Mappers"},"stream_selection_mode":{"default":"suggested","description":"Strategy for selecting streams when creating connections","enum":["all","suggested","whitelist"],"title":"StreamSelectionMode","type":"string"},"stream_whitelist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stream Whitelist"}},"title":"SourceTemplateCustomization","type":"object"},{"type":"null"}],"description":"\nCustomizations for the source template. If stream_whitelist is provided, only the specified streams will be synced.\nIf stream_customizations are provided, and stream fields specified will override the default settings for only that\nfield. Where any streams fields are not specified, the default settings will be used.\n"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"id":{"format":"uuid","title":"Id","type":"string"},"is_experimental":{"default":false,"title":"Is Experimental","type":"boolean"},"mode":{"default":"REPLICATION","enum":["DIRECT","REPLICATION","MULTI"],"title":"SourceConfigTemplateMode","type":"string"},"name":{"title":"Name","type":"string"},"partial_default_config":{"additionalProperties":true,"title":"Partial Default Config","type":"object"},"source_definition_id":{"format":"uuid","title":"Source Definition Id","type":"string"},"tags":{"items":{"type":"string"},"title":"Tags","type":"array"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"},"user_config_spec":{"properties":{"advanced_auth":{"anyOf":[{"properties":{"auth_flow_type":{"title":"Auth Flow Type","type":"string"},"oauth_config_specification":{"properties":{"complete_oauth_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Output Specification","type":"object"},"complete_oauth_server_input_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Input Specification","type":"object"},"complete_oauth_server_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Output Specification","type":"object"},"oauth_connector_input_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth Connector Input Specification"},"oauth_user_input_from_connector_config_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth User Input From Connector Config Specification"}},"title":"OAuthConfigSpecification","type":"object"},"predicate_key":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Predicate Key"},"predicate_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Predicate Value"}},"required":["auth_flow_type","oauth_config_specification"],"title":"AdvancedAuth","type":"object"},{"type":"null"}]},"connectionSpecification":{"properties":{"$schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"$Schema"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"properties":{"additionalProperties":true,"title":"Properties","type":"object"},"required":{"items":{"type":"string"},"title":"Required","type":"array"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"title":"Type","type":"string"}},"required":["type"],"title":"ConnectionSpecification","type":"object"},"documentationUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentationurl"},"supported_destination_sync_modes":{"anyOf":[{"items":{"enum":["append","append_dedup","overwrite","overwrite_dedup","soft_delete","update"],"title":"DestinationSyncMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Destination Sync Modes"}},"required":["connectionSpecification"],"title":"ConnectorSpecification","type":"object"}},"required":["id","name","source_definition_id","user_config_spec","partial_default_config"],"title":"DetailedSourceTemplate","type":"object"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"}},"required":["id","name","source_template","replication_config"],"title":"ConnectorSourceCreateResponse","type":"object"}`), }, "POST /api/v1/integrations/connectors/{id}/execute": { Path: "/api/v1/integrations/connectors/{id}/execute", @@ -73,6 +73,6 @@ var schemas = map[string]RouteSchema{ Description: "**Requires an Access Token as the bearer token.**\n\nUpdate an end user's configured connector, config should be validated before.", Parameters: json.RawMessage(`[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","title":"Id","type":"string"}},{"description":"The organization ID to target for this request","in":"header","name":"x-organization-id","required":false,"schema":{"description":"The organization ID to target for this request","format":"uuid","title":"X-Organization-Id","type":"string"}}]`), RequestBody: json.RawMessage(`{"properties":{"entities":{"anyOf":[{"items":{"properties":{"entity":{"title":"Entity","type":"string"},"modes":{"anyOf":[{"items":{"enum":["read","write"],"title":"RequestedEntityMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Modes"}},"required":["entity"],"title":"RequestedEntity","type":"object"},"type":"array"},{"type":"null"}],"description":"Entity selection to apply to the source. Omitting preserves existing selection; explicit [] clears it.","title":"Entities"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"replication_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"description":"The configuration for the replication connector.","title":"Replication Config"}},"title":"ConnectorSourceUpdateRequest","type":"object"}`), - Response: json.RawMessage(`{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"entities":{"anyOf":[{"items":{"properties":{"entity":{"title":"Entity","type":"string"},"modes":{"anyOf":[{"items":{"enum":["read","write"],"title":"RequestedEntityMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Modes"}},"required":["entity"],"title":"RequestedEntity","type":"object"},"type":"array"},{"type":"null"}],"description":"User-selected entity/mode pairs that constrain stream selection.","title":"Entities"},"id":{"format":"uuid","title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"replication_config":{"additionalProperties":true,"title":"Replication Config","type":"object"},"source_template":{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"customization":{"anyOf":[{"properties":{"stream_customizations":{"anyOf":[{"additionalProperties":{"properties":{"cursor_field":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cursor Field"},"primary_key_fields":{"anyOf":[{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Primary Key Fields"}},"title":"StreamCustomization","type":"object"},"type":"object"},{"type":"null"}],"title":"Stream Customizations"},"stream_mappers":{"anyOf":[{"additionalProperties":{"items":{"discriminator":{"mapping":{"encryption":"#/components/schemas/EncryptionMapper","field-filtering":"#/components/schemas/FieldFilteringMapper","field-renaming":"#/components/schemas/FieldRenamingMapper","hashing":"#/components/schemas/HashingMapper","row-filtering":"#/components/schemas/RowFilteringMapper-Output"},"propertyName":"type"},"oneOf":[{"description":"Hashing mapper - converts field values to cryptographic hashes.\n\nApplies a hash function (SHA256, SHA512, or MD5) to transform field values.\nCan either replace the original field or create a new field with a suffix.","properties":{"mapper_configuration":{"description":"Configuration for hashing mapper - uses snake_case.\n\nTransforms a field value by applying a cryptographic hash function.\nThe original field is replaced with the hashed value, or a new field\ncan be created with a suffix.","properties":{"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional suffix for new field with hashed value","title":"Field Name Suffix"},"method":{"description":"Hashing algorithm to use","enum":["SHA256","SHA512","MD5"],"title":"Method","type":"string"},"target_field":{"description":"Field to hash","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","method"],"title":"HashingMapperConfig","type":"object"},"type":{"const":"hashing","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"HashingMapper","type":"object"},{"description":"Field renaming mapper - renames a single field per configuration.\n\nRenames one field in the data stream (original_field_name → new_field_name).\nUseful for standardizing field names across different data sources.","properties":{"mapper_configuration":{"description":"Configuration for field renaming mapper - uses snake_case.\n\nRenames a single field in the data stream.","properties":{"new_field_name":{"description":"New name for the field","minLength":1,"title":"New Field Name","type":"string"},"original_field_name":{"description":"Original field name to rename","minLength":1,"title":"Original Field Name","type":"string"}},"required":["original_field_name","new_field_name"],"title":"FieldRenamingMapperConfig","type":"object"},"type":{"const":"field-renaming","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldRenamingMapper","type":"object"},{"description":"Field filtering mapper - removes a specific field from each record.\n\nFilters out a single specified field from the data stream. The targeted\nfield is removed from all records in the output stream.\n\nNote: This currently supports removing a single field (denylist approach).\nTo support allowlist filtering (keeping only specified fields), the config\nwould need to be extended with an allowed_fields list instead of target_field.","properties":{"mapper_configuration":{"description":"Configuration for field filtering mapper - uses snake_case.\n\nFilters out a specific field from the data stream.","properties":{"target_field":{"description":"Field to filter out","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field"],"title":"FieldFilteringMapperConfig","type":"object"},"type":{"const":"field-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldFilteringMapper","type":"object"},{"description":"Row filtering mapper - filters rows based on field equality.\n\nOnly keeps rows where a specific field equals a given value. Rows that\ndon't match the condition are excluded from the output.","properties":{"mapper_configuration":{"description":"Configuration for row filtering mapper - uses snake_case.\n\nFilters rows based on a condition. Only rows where the specified field\nequals the provided value are kept.","properties":{"conditions":{"description":"Filtering condition","properties":{"comparison_value":{"description":"Value to compare against","minLength":1,"title":"Comparison Value","type":"string"},"field_name":{"description":"Field to check","minLength":1,"title":"Field Name","type":"string"},"type":{"const":"equal","description":"Type of comparison","title":"Type","type":"string"}},"required":["type","field_name","comparison_value"],"title":"RowFilterCondition","type":"object"}},"required":["conditions"],"title":"RowFilteringMapperConfig","type":"object"},"type":{"const":"row-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"RowFilteringMapper","type":"object"},{"description":"Encryption mapper - encrypts sensitive fields with RSA.\n\nEncrypts specified fields using RSA public key encryption. The encrypted\nvalues replace the original field values in the output stream.\n\nNote: Only RSA encryption is supported. AES is not available due to\nsecrets hydration issues in the Airbyte platform.","properties":{"mapper_configuration":{"description":"Configuration for encryption mapper - uses snake_case.\n\nEncrypts a specified field using RSA (OAEP-SHA256). The encrypted value\nreplaces the original field value or is emitted with the configured suffix.\n\nNOTE: Symmetric AES is NOT supported in this API.\n\nWhy we don't support AES:\n- Secrets hydration for AES mappers is not currently supported in the platform\n- AES requires symmetric key management which doesn't align well with\n Sonar's secrets management architecture\n- RSA with public keys is more appropriate for this use case as it\n allows encryption without exposing private keys in the configuration\n\nIf you need AES encryption, this must be resolved at the platform level\nwith proper secrets storage and hydration support before we can add it here.","properties":{"algorithm":{"const":"RSA","default":"RSA","description":"Encryption algorithm (RSA only)","title":"Algorithm","type":"string"},"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"_encrypted","description":"Optional suffix for encrypted field","title":"Field Name Suffix"},"oaep_hash":{"const":"SHA256","default":"SHA256","description":"Hash function for OAEP padding","title":"Oaep Hash","type":"string"},"output_encoding":{"default":"base64","description":"Encoding for ciphertext bytes","enum":["base64","hex"],"title":"Output Encoding","type":"string"},"padding":{"const":"RSA-OAEP","default":"RSA-OAEP","description":"RSA padding mode","title":"Padding","type":"string"},"public_key":{"description":"RSA public key in PEM format","minLength":1,"title":"Public Key","type":"string"},"target_field":{"description":"Field to encrypt","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","public_key"],"title":"EncryptionMapperConfig","type":"object"},"type":{"const":"encryption","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"EncryptionMapper","type":"object"}]},"type":"array"},"type":"object"},{"type":"null"}],"title":"Stream Mappers"},"stream_selection_mode":{"default":"suggested","description":"Strategy for selecting streams when creating connections","enum":["all","suggested","whitelist"],"title":"StreamSelectionMode","type":"string"},"stream_whitelist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stream Whitelist"}},"title":"SourceTemplateCustomization","type":"object"},{"type":"null"}],"description":"\nCustomizations for the source template. If stream_whitelist is provided, only the specified streams will be synced.\nIf stream_customizations are provided, and stream fields specified will override the default settings for only that\nfield. Where any streams fields are not specified, the default settings will be used.\n"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"id":{"format":"uuid","title":"Id","type":"string"},"mode":{"default":"REPLICATION","enum":["DIRECT","REPLICATION","MULTI"],"title":"SourceConfigTemplateMode","type":"string"},"name":{"title":"Name","type":"string"},"partial_default_config":{"additionalProperties":true,"title":"Partial Default Config","type":"object"},"source_definition_id":{"format":"uuid","title":"Source Definition Id","type":"string"},"tags":{"items":{"type":"string"},"title":"Tags","type":"array"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"},"user_config_spec":{"properties":{"advanced_auth":{"anyOf":[{"properties":{"auth_flow_type":{"title":"Auth Flow Type","type":"string"},"oauth_config_specification":{"properties":{"complete_oauth_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Output Specification","type":"object"},"complete_oauth_server_input_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Input Specification","type":"object"},"complete_oauth_server_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Output Specification","type":"object"},"oauth_connector_input_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth Connector Input Specification"},"oauth_user_input_from_connector_config_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth User Input From Connector Config Specification"}},"title":"OAuthConfigSpecification","type":"object"},"predicate_key":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Predicate Key"},"predicate_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Predicate Value"}},"required":["auth_flow_type","oauth_config_specification"],"title":"AdvancedAuth","type":"object"},{"type":"null"}]},"connectionSpecification":{"properties":{"$schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"$Schema"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"properties":{"additionalProperties":true,"title":"Properties","type":"object"},"required":{"items":{"type":"string"},"title":"Required","type":"array"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"title":"Type","type":"string"}},"required":["type"],"title":"ConnectionSpecification","type":"object"},"documentationUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentationurl"},"supported_destination_sync_modes":{"anyOf":[{"items":{"enum":["append","append_dedup","overwrite","overwrite_dedup","soft_delete","update"],"title":"DestinationSyncMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Destination Sync Modes"}},"required":["connectionSpecification"],"title":"ConnectorSpecification","type":"object"}},"required":["id","name","source_definition_id","user_config_spec","partial_default_config"],"title":"DetailedSourceTemplate","type":"object"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"}},"required":["id","name","source_template","replication_config"],"title":"ConnectorSourceUpdateResponse","type":"object"}`), + Response: json.RawMessage(`{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"entities":{"anyOf":[{"items":{"properties":{"entity":{"title":"Entity","type":"string"},"modes":{"anyOf":[{"items":{"enum":["read","write"],"title":"RequestedEntityMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Modes"}},"required":["entity"],"title":"RequestedEntity","type":"object"},"type":"array"},{"type":"null"}],"description":"User-selected entity/mode pairs that constrain stream selection.","title":"Entities"},"id":{"format":"uuid","title":"Id","type":"string"},"name":{"title":"Name","type":"string"},"replication_config":{"additionalProperties":true,"title":"Replication Config","type":"object"},"source_template":{"properties":{"created_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Created At"},"customization":{"anyOf":[{"properties":{"stream_customizations":{"anyOf":[{"additionalProperties":{"properties":{"cursor_field":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cursor Field"},"primary_key_fields":{"anyOf":[{"items":{"items":{"type":"string"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Primary Key Fields"}},"title":"StreamCustomization","type":"object"},"type":"object"},{"type":"null"}],"title":"Stream Customizations"},"stream_mappers":{"anyOf":[{"additionalProperties":{"items":{"discriminator":{"mapping":{"encryption":"#/components/schemas/EncryptionMapper","field-filtering":"#/components/schemas/FieldFilteringMapper","field-renaming":"#/components/schemas/FieldRenamingMapper","hashing":"#/components/schemas/HashingMapper","row-filtering":"#/components/schemas/RowFilteringMapper-Output"},"propertyName":"type"},"oneOf":[{"description":"Hashing mapper - converts field values to cryptographic hashes.\n\nApplies a hash function (SHA256, SHA512, or MD5) to transform field values.\nCan either replace the original field or create a new field with a suffix.","properties":{"mapper_configuration":{"description":"Configuration for hashing mapper - uses snake_case.\n\nTransforms a field value by applying a cryptographic hash function.\nThe original field is replaced with the hashed value, or a new field\ncan be created with a suffix.","properties":{"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional suffix for new field with hashed value","title":"Field Name Suffix"},"method":{"description":"Hashing algorithm to use","enum":["SHA256","SHA512","MD5"],"title":"Method","type":"string"},"target_field":{"description":"Field to hash","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","method"],"title":"HashingMapperConfig","type":"object"},"type":{"const":"hashing","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"HashingMapper","type":"object"},{"description":"Field renaming mapper - renames a single field per configuration.\n\nRenames one field in the data stream (original_field_name → new_field_name).\nUseful for standardizing field names across different data sources.","properties":{"mapper_configuration":{"description":"Configuration for field renaming mapper - uses snake_case.\n\nRenames a single field in the data stream.","properties":{"new_field_name":{"description":"New name for the field","minLength":1,"title":"New Field Name","type":"string"},"original_field_name":{"description":"Original field name to rename","minLength":1,"title":"Original Field Name","type":"string"}},"required":["original_field_name","new_field_name"],"title":"FieldRenamingMapperConfig","type":"object"},"type":{"const":"field-renaming","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldRenamingMapper","type":"object"},{"description":"Field filtering mapper - removes a specific field from each record.\n\nFilters out a single specified field from the data stream. The targeted\nfield is removed from all records in the output stream.\n\nNote: This currently supports removing a single field (denylist approach).\nTo support allowlist filtering (keeping only specified fields), the config\nwould need to be extended with an allowed_fields list instead of target_field.","properties":{"mapper_configuration":{"description":"Configuration for field filtering mapper - uses snake_case.\n\nFilters out a specific field from the data stream.","properties":{"target_field":{"description":"Field to filter out","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field"],"title":"FieldFilteringMapperConfig","type":"object"},"type":{"const":"field-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"FieldFilteringMapper","type":"object"},{"description":"Row filtering mapper - filters rows based on field equality.\n\nOnly keeps rows where a specific field equals a given value. Rows that\ndon't match the condition are excluded from the output.","properties":{"mapper_configuration":{"description":"Configuration for row filtering mapper - uses snake_case.\n\nFilters rows based on a condition. Only rows where the specified field\nequals the provided value are kept.","properties":{"conditions":{"description":"Filtering condition","properties":{"comparison_value":{"description":"Value to compare against","minLength":1,"title":"Comparison Value","type":"string"},"field_name":{"description":"Field to check","minLength":1,"title":"Field Name","type":"string"},"type":{"const":"equal","description":"Type of comparison","title":"Type","type":"string"}},"required":["type","field_name","comparison_value"],"title":"RowFilterCondition","type":"object"}},"required":["conditions"],"title":"RowFilteringMapperConfig","type":"object"},"type":{"const":"row-filtering","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"RowFilteringMapper","type":"object"},{"description":"Encryption mapper - encrypts sensitive fields with RSA.\n\nEncrypts specified fields using RSA public key encryption. The encrypted\nvalues replace the original field values in the output stream.\n\nNote: Only RSA encryption is supported. AES is not available due to\nsecrets hydration issues in the Airbyte platform.","properties":{"mapper_configuration":{"description":"Configuration for encryption mapper - uses snake_case.\n\nEncrypts a specified field using RSA (OAEP-SHA256). The encrypted value\nreplaces the original field value or is emitted with the configured suffix.\n\nNOTE: Symmetric AES is NOT supported in this API.\n\nWhy we don't support AES:\n- Secrets hydration for AES mappers is not currently supported in the platform\n- AES requires symmetric key management which doesn't align well with\n Sonar's secrets management architecture\n- RSA with public keys is more appropriate for this use case as it\n allows encryption without exposing private keys in the configuration\n\nIf you need AES encryption, this must be resolved at the platform level\nwith proper secrets storage and hydration support before we can add it here.","properties":{"algorithm":{"const":"RSA","default":"RSA","description":"Encryption algorithm (RSA only)","title":"Algorithm","type":"string"},"field_name_suffix":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"_encrypted","description":"Optional suffix for encrypted field","title":"Field Name Suffix"},"oaep_hash":{"const":"SHA256","default":"SHA256","description":"Hash function for OAEP padding","title":"Oaep Hash","type":"string"},"output_encoding":{"default":"base64","description":"Encoding for ciphertext bytes","enum":["base64","hex"],"title":"Output Encoding","type":"string"},"padding":{"const":"RSA-OAEP","default":"RSA-OAEP","description":"RSA padding mode","title":"Padding","type":"string"},"public_key":{"description":"RSA public key in PEM format","minLength":1,"title":"Public Key","type":"string"},"target_field":{"description":"Field to encrypt","minLength":1,"title":"Target Field","type":"string"}},"required":["target_field","public_key"],"title":"EncryptionMapperConfig","type":"object"},"type":{"const":"encryption","title":"Type","type":"string"}},"required":["type","mapper_configuration"],"title":"EncryptionMapper","type":"object"}]},"type":"array"},"type":"object"},{"type":"null"}],"title":"Stream Mappers"},"stream_selection_mode":{"default":"suggested","description":"Strategy for selecting streams when creating connections","enum":["all","suggested","whitelist"],"title":"StreamSelectionMode","type":"string"},"stream_whitelist":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Stream Whitelist"}},"title":"SourceTemplateCustomization","type":"object"},{"type":"null"}],"description":"\nCustomizations for the source template. If stream_whitelist is provided, only the specified streams will be synced.\nIf stream_customizations are provided, and stream fields specified will override the default settings for only that\nfield. Where any streams fields are not specified, the default settings will be used.\n"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"},"id":{"format":"uuid","title":"Id","type":"string"},"is_experimental":{"default":false,"title":"Is Experimental","type":"boolean"},"mode":{"default":"REPLICATION","enum":["DIRECT","REPLICATION","MULTI"],"title":"SourceConfigTemplateMode","type":"string"},"name":{"title":"Name","type":"string"},"partial_default_config":{"additionalProperties":true,"title":"Partial Default Config","type":"object"},"source_definition_id":{"format":"uuid","title":"Source Definition Id","type":"string"},"tags":{"items":{"type":"string"},"title":"Tags","type":"array"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"},"user_config_spec":{"properties":{"advanced_auth":{"anyOf":[{"properties":{"auth_flow_type":{"title":"Auth Flow Type","type":"string"},"oauth_config_specification":{"properties":{"complete_oauth_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Output Specification","type":"object"},"complete_oauth_server_input_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Input Specification","type":"object"},"complete_oauth_server_output_specification":{"additionalProperties":true,"default":{},"title":"Complete Oauth Server Output Specification","type":"object"},"oauth_connector_input_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth Connector Input Specification"},"oauth_user_input_from_connector_config_specification":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Oauth User Input From Connector Config Specification"}},"title":"OAuthConfigSpecification","type":"object"},"predicate_key":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Predicate Key"},"predicate_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Predicate Value"}},"required":["auth_flow_type","oauth_config_specification"],"title":"AdvancedAuth","type":"object"},{"type":"null"}]},"connectionSpecification":{"properties":{"$schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"$Schema"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"properties":{"additionalProperties":true,"title":"Properties","type":"object"},"required":{"items":{"type":"string"},"title":"Required","type":"array"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"type":{"title":"Type","type":"string"}},"required":["type"],"title":"ConnectionSpecification","type":"object"},"documentationUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Documentationurl"},"supported_destination_sync_modes":{"anyOf":[{"items":{"enum":["append","append_dedup","overwrite","overwrite_dedup","soft_delete","update"],"title":"DestinationSyncMode","type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Destination Sync Modes"}},"required":["connectionSpecification"],"title":"ConnectorSpecification","type":"object"}},"required":["id","name","source_definition_id","user_config_spec","partial_default_config"],"title":"DetailedSourceTemplate","type":"object"},"updated_at":{"anyOf":[{"format":"date-time","type":"string"},{"type":"null"}],"title":"Updated At"}},"required":["id","name","source_template","replication_config"],"title":"ConnectorSourceUpdateResponse","type":"object"}`), }, }