diff --git a/airbyte-integrations/connectors/source-nylas/README.md b/airbyte-integrations/connectors/source-nylas/README.md
new file mode 100644
index 000000000000..3ffd3aaff4a3
--- /dev/null
+++ b/airbyte-integrations/connectors/source-nylas/README.md
@@ -0,0 +1,33 @@
+# Nylas
+This directory contains the manifest-only connector for `source-nylas`.
+
+The Nylas platform provides an integration layer that makes it easy to connect and sync email, calendar, and contact data from any email service provider.
+
+## Usage
+There are multiple ways to use this connector:
+- You can use this connector as any other connector in Airbyte Marketplace.
+- You can load this connector in `pyairbyte` using `get_source`!
+- You can open this connector in Connector Builder, edit it, and publish to your workspaces.
+
+Please refer to the manifest-only connector documentation for more details.
+
+## Local Development
+We recommend you use the Connector Builder to edit this connector.
+
+But, if you want to develop this connector locally, you can use the following steps.
+
+### Environment Setup
+You will need `airbyte-ci` installed. You can find the documentation [here](airbyte-ci).
+
+### Build
+This will create a dev image (`source-nylas:dev`) that you can use to test the connector locally.
+```bash
+airbyte-ci connectors --name=source-nylas build
+```
+
+### Test
+This will run the acceptance tests for the connector.
+```bash
+airbyte-ci connectors --name=source-nylas test
+```
+
diff --git a/airbyte-integrations/connectors/source-nylas/acceptance-test-config.yml b/airbyte-integrations/connectors/source-nylas/acceptance-test-config.yml
new file mode 100644
index 000000000000..0402f05fc9f0
--- /dev/null
+++ b/airbyte-integrations/connectors/source-nylas/acceptance-test-config.yml
@@ -0,0 +1,17 @@
+# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference)
+# for more information about how to configure these tests
+connector_image: airbyte/source-nylas:dev
+acceptance_tests:
+ spec:
+ tests:
+ - spec_path: "manifest.yaml"
+ connection:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
+ discovery:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
+ basic_read:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
+ incremental:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
+ full_refresh:
+ bypass_reason: "This is a builder contribution, and we do not have secrets at this time"
diff --git a/airbyte-integrations/connectors/source-nylas/icon.svg b/airbyte-integrations/connectors/source-nylas/icon.svg
new file mode 100644
index 000000000000..d469266a2ce6
--- /dev/null
+++ b/airbyte-integrations/connectors/source-nylas/icon.svg
@@ -0,0 +1 @@
+
diff --git a/airbyte-integrations/connectors/source-nylas/manifest.yaml b/airbyte-integrations/connectors/source-nylas/manifest.yaml
new file mode 100644
index 000000000000..54b39a8be350
--- /dev/null
+++ b/airbyte-integrations/connectors/source-nylas/manifest.yaml
@@ -0,0 +1,1893 @@
+version: 4.6.2
+
+type: DeclarativeSource
+
+description: >-
+ The Nylas platform provides an integration layer that makes it easy to connect
+ and sync email, calendar, and contact data from any email service provider.
+
+check:
+ type: CheckStream
+ stream_names:
+ - connectors
+
+definitions:
+ streams:
+ calendars:
+ type: DeclarativeStream
+ name: calendars
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/calendars
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ partition_router:
+ type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/calendars"
+ connectors:
+ type: DeclarativeStream
+ name: connectors
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/connectors
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/connectors"
+ contacts:
+ type: DeclarativeStream
+ name: contacts
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/contacts
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ partition_router:
+ type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/contacts"
+ contact_groups:
+ type: DeclarativeStream
+ name: contact_groups
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/contacts/groups
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ partition_router:
+ type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/contact_groups"
+ credentials:
+ type: DeclarativeStream
+ name: credentials
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/connectors/{{ stream_partition['provider'] }}/creds
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path: []
+ partition_router:
+ type: ListPartitionRouter
+ values:
+ - google
+ - microsoft
+ - imap
+ - icloud
+ cursor_field: provider
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/credentials"
+ drafts:
+ type: DeclarativeStream
+ name: drafts
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/drafts
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ partition_router:
+ type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ incremental_sync:
+ type: DatetimeBasedCursor
+ cursor_field: date
+ cursor_datetime_formats:
+ - "%s"
+ datetime_format: "%s"
+ start_datetime:
+ type: MinMaxDatetime
+ datetime: '{{ config["start_date"] }}'
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ end_datetime:
+ type: MinMaxDatetime
+ datetime: '{{ config["end_date"] }}'
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/drafts"
+ events:
+ type: DeclarativeStream
+ name: events
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/events
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ partition_router:
+ - type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ - type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ request_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: calendar_id
+ partition_field: calendar_id
+ stream:
+ $ref: "#/definitions/streams/calendars"
+ incremental_sync:
+ type: DatetimeBasedCursor
+ cursor_field: updated_at
+ cursor_datetime_formats:
+ - "%s"
+ datetime_format: "%s"
+ start_datetime:
+ type: MinMaxDatetime
+ datetime: '{{ config["start_date"] }}'
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ start_time_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: start
+ end_time_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: end
+ end_datetime:
+ type: MinMaxDatetime
+ datetime: '{{ config["end_date"] }}'
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/events"
+ folders:
+ type: DeclarativeStream
+ name: folders
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/folders
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ partition_router:
+ type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/folders"
+ grants:
+ type: DeclarativeStream
+ name: grants
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/grants"
+ messages:
+ type: DeclarativeStream
+ name: messages
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/messages
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ partition_router:
+ type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ incremental_sync:
+ type: DatetimeBasedCursor
+ cursor_field: date
+ cursor_datetime_formats:
+ - "%s"
+ datetime_format: "%s"
+ start_datetime:
+ type: MinMaxDatetime
+ datetime: '{{ config["start_date"] }}'
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ start_time_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: received_after
+ end_time_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: received_before
+ end_datetime:
+ type: MinMaxDatetime
+ datetime: '{{ config["end_date"] }}'
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/messages"
+ scheduled_messages:
+ type: DeclarativeStream
+ name: scheduled_messages
+ primary_key:
+ - schedule_id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/messages/schedules
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ partition_router:
+ type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/scheduled_messages"
+ threads:
+ type: DeclarativeStream
+ name: threads
+ primary_key:
+ - id
+ retriever:
+ type: SimpleRetriever
+ requester:
+ $ref: "#/definitions/base_requester"
+ path: /v3/grants/{{ stream_partition['grant_id'] }}/threads
+ http_method: GET
+ record_selector:
+ type: RecordSelector
+ extractor:
+ type: DpathExtractor
+ field_path:
+ - data
+ paginator:
+ type: DefaultPaginator
+ page_token_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: page_token
+ page_size_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: limit
+ pagination_strategy:
+ type: CursorPagination
+ page_size: 50
+ cursor_value: '{{ response.get("next_cursor", {}) }}'
+ stop_condition: '{{ not response.get("next_cursor", {}) }}'
+ partition_router:
+ type: SubstreamPartitionRouter
+ parent_stream_configs:
+ - type: ParentStreamConfig
+ parent_key: id
+ partition_field: grant_id
+ stream:
+ $ref: "#/definitions/streams/grants"
+ incremental_sync:
+ type: DatetimeBasedCursor
+ cursor_field: latest_message_received_date
+ cursor_datetime_formats:
+ - "%s"
+ datetime_format: "%s"
+ start_datetime:
+ type: MinMaxDatetime
+ datetime: '{{ config["start_date"] }}'
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ start_time_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: latest_message_after
+ end_time_option:
+ type: RequestOption
+ inject_into: request_parameter
+ field_name: latest_message_before
+ end_datetime:
+ type: MinMaxDatetime
+ datetime: '{{ config["end_date"] }}'
+ datetime_format: "%Y-%m-%dT%H:%M:%SZ"
+ schema_loader:
+ type: InlineSchemaLoader
+ schema:
+ $ref: "#/schemas/threads"
+ base_requester:
+ type: HttpRequester
+ url_base: https://api.{{ config['api_server'] }}.nylas.com
+ authenticator:
+ type: BearerAuthenticator
+ api_token: '{{ config["api_key"] }}'
+
+streams:
+ - $ref: "#/definitions/streams/calendars"
+ - $ref: "#/definitions/streams/connectors"
+ - $ref: "#/definitions/streams/contacts"
+ - $ref: "#/definitions/streams/contact_groups"
+ - $ref: "#/definitions/streams/credentials"
+ - $ref: "#/definitions/streams/drafts"
+ - $ref: "#/definitions/streams/events"
+ - $ref: "#/definitions/streams/folders"
+ - $ref: "#/definitions/streams/grants"
+ - $ref: "#/definitions/streams/messages"
+ - $ref: "#/definitions/streams/scheduled_messages"
+ - $ref: "#/definitions/streams/threads"
+
+spec:
+ type: Spec
+ connection_specification:
+ type: object
+ $schema: http://json-schema.org/draft-07/schema#
+ required:
+ - api_key
+ - api_server
+ - start_date
+ - end_date
+ properties:
+ api_key:
+ type: string
+ order: 0
+ title: API Key
+ airbyte_secret: true
+ api_server:
+ type: string
+ enum:
+ - us
+ - eu
+ order: 1
+ title: API Server
+ start_date:
+ type: string
+ title: Start date
+ format: date-time
+ pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
+ order: 2
+ end_date:
+ type: string
+ title: End date
+ format: date-time
+ pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$
+ order: 3
+ additionalProperties: true
+
+metadata:
+ autoImportSchema:
+ calendars: true
+ connectors: true
+ contacts: true
+ contact_groups: true
+ credentials: true
+ drafts: true
+ events: true
+ folders: true
+ grants: true
+ messages: true
+ scheduled_messages: true
+ threads: true
+ testedStreams:
+ calendars:
+ streamHash: 8ce376b421dc40756474988a420ba528c517b63b
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ connectors:
+ streamHash: 8860f0729152f057bfd47bf362cdcb3dae1848af
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ contacts:
+ streamHash: c5ea5e2a4567ae654d0cf8d511429d34b45ccdff
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ contact_groups:
+ streamHash: a7b170881039fd54748ed36848eb49afa19ea3eb
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ credentials:
+ streamHash: b8332a933b9a575fd406c98605ff2fcc7ac0455c
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ drafts:
+ streamHash: cc113e910b984b75acd11636e5a0f1e4453eaaac
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ events:
+ streamHash: 33793621acac323eae11fdee060370dc2ede1539
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ folders:
+ streamHash: 4ae4854ad2f394b0682e516d2800fd46fd185381
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ grants:
+ streamHash: fbfb85dfc701727ff86ca59f2a0d1ef9fb1ac80a
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ messages:
+ streamHash: dc5cfd3fec70b6a7cf775320818e6ecb2d206a8b
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ scheduled_messages:
+ streamHash: abc9f94a2d927df38619ce9d32a0bd90cb1fbbd8
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ threads:
+ streamHash: 1c17fe01d8112a4c05c327ca5e9993fbdf857a8a
+ hasResponse: true
+ responsesAreSuccessful: true
+ hasRecords: true
+ primaryKeysArePresent: true
+ primaryKeysAreUnique: true
+ assist: {}
+
+schemas:
+ calendars:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ description:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ hex_color:
+ type:
+ - string
+ - "null"
+ hex_foreground_color:
+ type:
+ - string
+ - "null"
+ id:
+ type: string
+ is_owned_by_user:
+ type:
+ - boolean
+ - "null"
+ is_primary:
+ type:
+ - boolean
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ object:
+ type:
+ - string
+ - "null"
+ read_only:
+ type:
+ - boolean
+ - "null"
+ timezone:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ connectors:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ created_at:
+ type:
+ - number
+ - "null"
+ provider:
+ type:
+ - string
+ - "null"
+ scope:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ settings:
+ type:
+ - object
+ - "null"
+ properties:
+ client_id:
+ type:
+ - string
+ - "null"
+ project_id:
+ type:
+ - string
+ - "null"
+ tenant:
+ type:
+ - string
+ - "null"
+ topic_name:
+ type:
+ - string
+ - "null"
+ updated_at:
+ type:
+ - number
+ - "null"
+ contacts:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ company_name:
+ type:
+ - string
+ - "null"
+ emails:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ given_name:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ groups:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ id:
+ type:
+ - string
+ - "null"
+ id:
+ type: string
+ im_addresses:
+ type:
+ - array
+ - "null"
+ job_title:
+ type:
+ - string
+ - "null"
+ middle_name:
+ type:
+ - string
+ - "null"
+ nickname:
+ type:
+ - string
+ - "null"
+ object:
+ type:
+ - string
+ - "null"
+ phone_numbers:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ type:
+ type:
+ - string
+ - "null"
+ number:
+ type:
+ - string
+ - "null"
+ physical_addresses:
+ type:
+ - array
+ - "null"
+ picture_url:
+ type:
+ - string
+ - "null"
+ source:
+ type:
+ - string
+ - "null"
+ surname:
+ type:
+ - string
+ - "null"
+ updated_at:
+ type:
+ - number
+ - "null"
+ web_pages:
+ type:
+ - array
+ - "null"
+ required:
+ - id
+ contact_groups:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ grant_id:
+ type:
+ - string
+ - "null"
+ group_type:
+ type:
+ - string
+ - "null"
+ id:
+ type: string
+ name:
+ type:
+ - string
+ - "null"
+ object:
+ type:
+ - string
+ - "null"
+ path:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ credentials:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ data:
+ type:
+ - array
+ - "null"
+ request_id:
+ type:
+ - string
+ - "null"
+ drafts:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ attachments:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ content_disposition:
+ type:
+ - string
+ - "null"
+ content_id:
+ type:
+ - string
+ - "null"
+ content_type:
+ type:
+ - string
+ - "null"
+ filename:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ id:
+ type:
+ - string
+ - "null"
+ is_inline:
+ type:
+ - boolean
+ - "null"
+ size:
+ type:
+ - number
+ - "null"
+ bcc:
+ type:
+ - array
+ - "null"
+ body:
+ type:
+ - string
+ - "null"
+ cc:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ date:
+ type: number
+ folders:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ from:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ id:
+ type: string
+ object:
+ type:
+ - string
+ - "null"
+ reply_to:
+ type:
+ - array
+ - "null"
+ snippet:
+ type:
+ - string
+ - "null"
+ starred:
+ type:
+ - boolean
+ - "null"
+ subject:
+ type:
+ - string
+ - "null"
+ thread_id:
+ type:
+ - string
+ - "null"
+ to:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ unread:
+ type:
+ - boolean
+ - "null"
+ required:
+ - id
+ - date
+ events:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ description:
+ type:
+ - string
+ - "null"
+ busy:
+ type:
+ - boolean
+ - "null"
+ calendar_id:
+ type:
+ - string
+ - "null"
+ color_id:
+ type:
+ - string
+ - "null"
+ conferencing:
+ type:
+ - object
+ - "null"
+ properties:
+ details:
+ type:
+ - object
+ - "null"
+ properties:
+ meeting_code:
+ type:
+ - string
+ - "null"
+ password:
+ type:
+ - string
+ - "null"
+ phone:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ pin:
+ type:
+ - string
+ - "null"
+ url:
+ type:
+ - string
+ - "null"
+ provider:
+ type:
+ - string
+ - "null"
+ created_at:
+ type:
+ - number
+ - "null"
+ creator:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ hide_participants:
+ type:
+ - boolean
+ - "null"
+ html_link:
+ type:
+ - string
+ - "null"
+ ical_uid:
+ type:
+ - string
+ - "null"
+ id:
+ type: string
+ location:
+ type:
+ - string
+ - "null"
+ master_event_id:
+ type:
+ - string
+ - "null"
+ object:
+ type:
+ - string
+ - "null"
+ organizer:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ original_start_time:
+ type:
+ - number
+ - "null"
+ participants:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ status:
+ type:
+ - string
+ - "null"
+ read_only:
+ type:
+ - boolean
+ - "null"
+ reminders:
+ type:
+ - object
+ - "null"
+ properties:
+ overrides:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ reminder_method:
+ type:
+ - string
+ - "null"
+ reminder_minutes:
+ type:
+ - number
+ - "null"
+ use_default:
+ type:
+ - boolean
+ - "null"
+ resources:
+ type:
+ - array
+ - "null"
+ sequence:
+ type:
+ - number
+ - "null"
+ status:
+ type:
+ - string
+ - "null"
+ title:
+ type:
+ - string
+ - "null"
+ updated_at:
+ type: number
+ visibility:
+ type:
+ - string
+ - "null"
+ when:
+ type:
+ - object
+ - "null"
+ properties:
+ end_date:
+ type:
+ - string
+ - "null"
+ end_time:
+ type:
+ - number
+ - "null"
+ end_timezone:
+ type:
+ - string
+ - "null"
+ object:
+ type:
+ - string
+ - "null"
+ start_date:
+ type:
+ - string
+ - "null"
+ start_time:
+ type:
+ - number
+ - "null"
+ start_timezone:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ - updated_at
+ folders:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ attributes:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ id:
+ type: string
+ name:
+ type:
+ - string
+ - "null"
+ system_folder:
+ type:
+ - boolean
+ - "null"
+ total_count:
+ type:
+ - number
+ - "null"
+ unread_count:
+ type:
+ - number
+ - "null"
+ required:
+ - id
+ grants:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ created_at:
+ type:
+ - number
+ - "null"
+ email:
+ type:
+ - string
+ - "null"
+ grant_status:
+ type:
+ - string
+ - "null"
+ id:
+ type: string
+ ip:
+ type:
+ - string
+ - "null"
+ provider:
+ type:
+ - string
+ - "null"
+ provider_user_id:
+ type:
+ - string
+ - "null"
+ scope:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ settings:
+ type:
+ - object
+ - "null"
+ updated_at:
+ type:
+ - number
+ - "null"
+ user_agent:
+ type:
+ - string
+ - "null"
+ required:
+ - id
+ messages:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ attachments:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ content_disposition:
+ type:
+ - string
+ - "null"
+ content_id:
+ type:
+ - string
+ - "null"
+ content_type:
+ type:
+ - string
+ - "null"
+ filename:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ id:
+ type:
+ - string
+ - "null"
+ is_inline:
+ type:
+ - boolean
+ - "null"
+ size:
+ type:
+ - number
+ - "null"
+ bcc:
+ type:
+ - array
+ - "null"
+ body:
+ type:
+ - string
+ - "null"
+ cc:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ date:
+ type: number
+ folders:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ from:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ id:
+ type: string
+ object:
+ type:
+ - string
+ - "null"
+ reply_to:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ snippet:
+ type:
+ - string
+ - "null"
+ starred:
+ type:
+ - boolean
+ - "null"
+ subject:
+ type:
+ - string
+ - "null"
+ thread_id:
+ type:
+ - string
+ - "null"
+ to:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ unread:
+ type:
+ - boolean
+ - "null"
+ required:
+ - id
+ - date
+ scheduled_messages:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ close_time:
+ type:
+ - number
+ - "null"
+ schedule_id:
+ type: string
+ status:
+ type:
+ - object
+ - "null"
+ properties:
+ description:
+ type:
+ - string
+ - "null"
+ code:
+ type:
+ - string
+ - "null"
+ reason:
+ type:
+ - string
+ - "null"
+ required:
+ - schedule_id
+ threads:
+ type: object
+ $schema: http://json-schema.org/schema#
+ additionalProperties: true
+ properties:
+ draft_ids:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ earliest_message_date:
+ type:
+ - number
+ - "null"
+ folders:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ has_attachments:
+ type:
+ - boolean
+ - "null"
+ has_drafts:
+ type:
+ - boolean
+ - "null"
+ id:
+ type: string
+ latest_draft_or_message:
+ type:
+ - object
+ - "null"
+ properties:
+ attachments:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ content_disposition:
+ type:
+ - string
+ - "null"
+ content_id:
+ type:
+ - string
+ - "null"
+ content_type:
+ type:
+ - string
+ - "null"
+ filename:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ id:
+ type:
+ - string
+ - "null"
+ is_inline:
+ type:
+ - boolean
+ - "null"
+ size:
+ type:
+ - number
+ - "null"
+ bcc:
+ type:
+ - array
+ - "null"
+ body:
+ type:
+ - string
+ - "null"
+ cc:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ date:
+ type:
+ - number
+ - "null"
+ folders:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ from:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ grant_id:
+ type:
+ - string
+ - "null"
+ id:
+ type:
+ - string
+ - "null"
+ object:
+ type:
+ - string
+ - "null"
+ reply_to:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ snippet:
+ type:
+ - string
+ - "null"
+ starred:
+ type:
+ - boolean
+ - "null"
+ subject:
+ type:
+ - string
+ - "null"
+ thread_id:
+ type:
+ - string
+ - "null"
+ to:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ unread:
+ type:
+ - boolean
+ - "null"
+ latest_message_received_date:
+ type: number
+ latest_message_sent_date:
+ type:
+ - number
+ - "null"
+ message_ids:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - string
+ - "null"
+ object:
+ type:
+ - string
+ - "null"
+ participants:
+ type:
+ - array
+ - "null"
+ items:
+ type:
+ - object
+ - "null"
+ properties:
+ email:
+ type:
+ - string
+ - "null"
+ name:
+ type:
+ - string
+ - "null"
+ snippet:
+ type:
+ - string
+ - "null"
+ starred:
+ type:
+ - boolean
+ - "null"
+ subject:
+ type:
+ - string
+ - "null"
+ unread:
+ type:
+ - boolean
+ - "null"
+ required:
+ - id
+ - latest_message_received_date
diff --git a/airbyte-integrations/connectors/source-nylas/metadata.yaml b/airbyte-integrations/connectors/source-nylas/metadata.yaml
new file mode 100644
index 000000000000..c499e447bb22
--- /dev/null
+++ b/airbyte-integrations/connectors/source-nylas/metadata.yaml
@@ -0,0 +1,35 @@
+metadataSpecVersion: "1.0"
+data:
+ allowedHosts:
+ hosts:
+ - "api.*.nylas.com"
+ registryOverrides:
+ oss:
+ enabled: true
+ cloud:
+ enabled: true
+ remoteRegistries:
+ pypi:
+ enabled: false
+ packageName: airbyte-source-nylas
+ connectorBuildOptions:
+ baseImage: docker.io/airbyte/source-declarative-manifest:4.6.2@sha256:f5fcd3d4703b7590b6166a7853c5ed1686731607cd30a159a8c24e2fe2c1ee98
+ connectorSubtype: api
+ connectorType: source
+ definitionId: 136a1ee6-5b95-4e09-9f3f-5c8df35df690
+ dockerImageTag: 0.0.1
+ dockerRepository: airbyte/source-nylas
+ githubIssueLabel: source-nylas
+ icon: icon.svg
+ license: MIT
+ name: Nylas
+ releaseDate: 2024-09-03
+ releaseStage: alpha
+ supportLevel: community
+ documentationUrl: https://docs.airbyte.com/integrations/sources/nylas
+ tags:
+ - language:manifest-only
+ - cdk:low-code
+ ab_internal:
+ ql: 100
+ sl: 100
diff --git a/docs/integrations/sources/nylas.md b/docs/integrations/sources/nylas.md
new file mode 100644
index 000000000000..c1fc02724ca1
--- /dev/null
+++ b/docs/integrations/sources/nylas.md
@@ -0,0 +1,38 @@
+# Nylas
+The Nylas platform provides an integration layer that makes it easy to connect and sync email, calendar, and contact data from any email service provider.
+
+## Configuration
+
+| Input | Type | Description | Default Value |
+|-------|------|-------------|---------------|
+| `api_key` | `string` | API Key. | |
+| `api_server` | `string` | API Server. | |
+| `start_date` | `string` | Start date. | |
+| `end_date` | `string` | End date. | |
+
+## Streams
+| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental |
+|-------------|-------------|------------|---------------------|----------------------|
+| calendars | id | DefaultPaginator | ✅ | ❌ |
+| connectors | | No pagination | ✅ | ❌ |
+| contacts | id | DefaultPaginator | ✅ | ❌ |
+| contact_groups | id | DefaultPaginator | ✅ | ❌ |
+| credentials | | No pagination | ✅ | ❌ |
+| drafts | id | DefaultPaginator | ✅ | ✅ |
+| events | id | DefaultPaginator | ✅ | ✅ |
+| folders | id | DefaultPaginator | ✅ | ❌ |
+| grants | id | DefaultPaginator | ✅ | ❌ |
+| messages | id | DefaultPaginator | ✅ | ✅ |
+| scheduled_messages | schedule_id | No pagination | ✅ | ❌ |
+| threads | id | DefaultPaginator | ✅ | ✅ |
+
+## Changelog
+
+
+ Expand to review
+
+| Version | Date | Subject |
+|------------------|------------|----------------|
+| 0.0.1 | 2024-09-03 | Initial release by [@topefolorunso](https://github.com/topefolorunso) via Connector Builder|
+
+
\ No newline at end of file