version: 6.4.0 type: DeclarativeSource description: >- Elasticemail is an email delivery and marketing platform. Using this connector we extract data from streams such as campaigns , contacts , lists and statistics! Docs : https://elasticemail.com/developers/api-documentation/rest-api check: type: CheckStream stream_names: - campaigns definitions: streams: campaigns: type: DeclarativeStream name: campaigns primary_key: - Name retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: campaigns http_method: GET record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] paginator: type: DefaultPaginator page_token_option: type: RequestOption inject_into: request_parameter field_name: offset page_size_option: type: RequestOption field_name: limit inject_into: request_parameter pagination_strategy: type: OffsetIncrement page_size: 100 inject_on_first_request: true schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/campaigns" contacts: type: DeclarativeStream name: contacts primary_key: - Email retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: contacts http_method: GET record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] paginator: type: DefaultPaginator page_token_option: type: RequestOption inject_into: request_parameter field_name: offset page_size_option: type: RequestOption field_name: limit inject_into: request_parameter pagination_strategy: type: OffsetIncrement page_size: 100 inject_on_first_request: true schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/contacts" events: type: DeclarativeStream name: events retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: events http_method: GET record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] paginator: type: DefaultPaginator page_token_option: type: RequestOption inject_into: request_parameter field_name: offset page_size_option: type: RequestOption field_name: limit inject_into: request_parameter pagination_strategy: type: OffsetIncrement page_size: 100 inject_on_first_request: true incremental_sync: type: DatetimeBasedCursor cursor_field: EventDate cursor_datetime_formats: - "%Y-%m-%dT%H:%M:%SZ" datetime_format: "%Y-%m-%dT%H:%M:%SZ" 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: from end_time_option: type: RequestOption inject_into: request_parameter field_name: to end_datetime: type: MinMaxDatetime datetime: "{{ now_utc().strftime('%Y-%m-%dT%H:%M:%SZ') }}" datetime_format: "%Y-%m-%dT%H:%M:%SZ" schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/events" files: type: DeclarativeStream name: files retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: files http_method: GET record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] paginator: type: DefaultPaginator page_token_option: type: RequestOption inject_into: request_parameter field_name: offset page_size_option: type: RequestOption field_name: limit inject_into: request_parameter pagination_strategy: type: OffsetIncrement page_size: 100 inject_on_first_request: true schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/files" inboundroute: type: DeclarativeStream name: inboundroute retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: inboundroute http_method: GET record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/inboundroute" lists: type: DeclarativeStream name: lists retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: lists http_method: GET record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] paginator: type: DefaultPaginator page_token_option: type: RequestOption inject_into: request_parameter field_name: offset page_size_option: type: RequestOption field_name: limit inject_into: request_parameter pagination_strategy: type: OffsetIncrement page_size: 100 inject_on_first_request: true schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/lists" segments: type: DeclarativeStream name: segments retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: segments http_method: GET record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] paginator: type: DefaultPaginator page_token_option: type: RequestOption inject_into: request_parameter field_name: offset page_size_option: type: RequestOption field_name: limit inject_into: request_parameter pagination_strategy: type: OffsetIncrement page_size: 100 inject_on_first_request: true schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/segments" statistics: type: DeclarativeStream name: statistics retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: statistics http_method: GET request_parameters: from: "{{ config['from'] }}" error_handler: type: CompositeErrorHandler error_handlers: - type: DefaultErrorHandler response_filters: - type: HttpResponseFilter action: FAIL http_codes: - 400 error_message: Please enter " FROM " error_message_contains: Missing required parameter - from record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] paginator: type: DefaultPaginator page_token_option: type: RequestOption inject_into: request_parameter field_name: offset page_size_option: type: RequestOption field_name: limit inject_into: request_parameter pagination_strategy: type: OffsetIncrement page_size: 100 inject_on_first_request: true schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/statistics" templates: type: DeclarativeStream name: templates retriever: type: SimpleRetriever requester: $ref: "#/definitions/base_requester" path: templates http_method: GET request_parameters: scopeType: "{{ config['scope_type'] }}" error_handler: type: CompositeErrorHandler error_handlers: - type: DefaultErrorHandler response_filters: - type: HttpResponseFilter action: FAIL http_codes: - 400 error_message: Please enter scope type error_message_contains: Missing required parameter - scopeType record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: [] paginator: type: DefaultPaginator page_token_option: type: RequestOption inject_into: request_parameter field_name: offset page_size_option: type: RequestOption field_name: limit inject_into: request_parameter pagination_strategy: type: OffsetIncrement page_size: 100 inject_on_first_request: true schema_loader: type: InlineSchemaLoader schema: $ref: "#/schemas/templates" base_requester: type: HttpRequester url_base: https://api.elasticemail.com/v4/ authenticator: type: ApiKeyAuthenticator api_token: "{{ config[\"api_key\"] }}" inject_into: type: RequestOption field_name: X-ElasticEmail-ApiKey inject_into: header streams: - $ref: "#/definitions/streams/campaigns" - $ref: "#/definitions/streams/contacts" - $ref: "#/definitions/streams/events" - $ref: "#/definitions/streams/files" - $ref: "#/definitions/streams/inboundroute" - $ref: "#/definitions/streams/lists" - $ref: "#/definitions/streams/segments" - $ref: "#/definitions/streams/statistics" - $ref: "#/definitions/streams/templates" spec: type: Spec connection_specification: type: object $schema: http://json-schema.org/draft-07/schema# required: - api_key - start_date properties: api_key: type: string order: 0 title: API Key airbyte_secret: true scope_type: type: string enum: - Personal - Global order: 1 title: scope type from: type: string order: 2 title: From format: date-time pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$ 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: 3 additionalProperties: true metadata: autoImportSchema: campaigns: true contacts: true events: true files: true inboundroute: true lists: true segments: true statistics: true templates: true testedStreams: campaigns: streamHash: 710dfed26ba909aa8a827eb0f01f0d7637b91654 hasResponse: true responsesAreSuccessful: true hasRecords: true primaryKeysArePresent: true primaryKeysAreUnique: true contacts: hasRecords: true streamHash: 1f12a61f26afd232c3f30930ab2e4d0f03c3c2ff hasResponse: true primaryKeysAreUnique: true primaryKeysArePresent: true responsesAreSuccessful: true events: streamHash: 31b475a5f62ca0631118a6abcace8b2ff4df5fc4 hasResponse: true responsesAreSuccessful: true hasRecords: true primaryKeysArePresent: true primaryKeysAreUnique: true files: hasRecords: true streamHash: 8f885dddf20aee665691852cb3cb3c1a2d1d9bde hasResponse: true primaryKeysAreUnique: true primaryKeysArePresent: true responsesAreSuccessful: true inboundroute: hasRecords: true streamHash: 7b2c797f57d0ee3ea1d0b517768535ea3cbbdbfa hasResponse: true primaryKeysAreUnique: true primaryKeysArePresent: true responsesAreSuccessful: true lists: hasRecords: true streamHash: 3380bc055963d77b500814a2918a339bfffaddc1 hasResponse: true primaryKeysAreUnique: true primaryKeysArePresent: true responsesAreSuccessful: true segments: hasRecords: true streamHash: 7b70d5ab087b477ec5ae5fc14debb32a91443084 hasResponse: true primaryKeysAreUnique: true primaryKeysArePresent: true responsesAreSuccessful: true statistics: hasRecords: true streamHash: 582a9673808200009b054803e616e352da909451 hasResponse: true primaryKeysAreUnique: true primaryKeysArePresent: true responsesAreSuccessful: true templates: hasRecords: true streamHash: f6aa0b75ced8878e0c39f13696d93a1ec5d77083 hasResponse: true primaryKeysAreUnique: true primaryKeysArePresent: true responsesAreSuccessful: true assist: {} schemas: campaigns: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: Content: type: - array - "null" items: type: - object - "null" properties: From: type: - string - "null" Poolname: type: - string - "null" ReplyTo: type: - string - "null" Subject: type: - string - "null" TemplateName: type: - string - "null" Utm: type: - object - "null" properties: {} Name: type: string Options: type: - object - "null" properties: DeliveryOptimization: type: - string - "null" ScheduleFor: type: - string - "null" SplitOptions: type: - object - "null" properties: OptimizeFor: type: - string - "null" OptimizePeriodMinutes: type: - number - "null" TriggerCount: type: - number - "null" TriggerFrequency: type: - number - "null" Recipients: type: - object - "null" properties: ListNames: type: - array - "null" items: type: - string - "null" Status: type: - string - "null" required: - Name contacts: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: Activity: type: - object - "null" properties: FriendlyErrorMessage: type: - string - "null" LastIP: type: - string - "null" LastSent: type: - string - "null" TotalClicked: type: - number - "null" TotalFailed: type: - number - "null" TotalOpened: type: - number - "null" TotalSent: type: - number - "null" Consent: type: - object - "null" properties: ConsentDate: type: - string - "null" ConsentIP: type: - string - "null" ConsentTracking: type: - string - "null" CustomFields: type: - object - "null" DateAdded: type: - string - "null" DateUpdated: type: - string - "null" Email: type: string FirstName: type: - string - "null" LastName: type: - string - "null" Source: type: - number - string - "null" Status: type: - string - "null" StatusChangeDate: type: - string - "null" required: - Email events: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: ChannelName: type: - string - "null" EventDate: type: string EventType: type: - string - "null" FromEmail: type: - string - "null" IPAddress: type: - string - "null" Message: type: - string - "null" MessageCategory: type: - string - "null" MsgID: type: - string - "null" PoolName: type: - string - "null" Subject: type: - string - "null" To: type: - string - "null" TransactionID: type: - string - "null" required: - EventDate files: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: ContentType: type: - string - "null" DateAdded: type: - string - "null" ExpirationDate: type: - string - "null" FileID: type: - number - "null" FileName: type: - string - "null" Size: type: - number - "null" inboundroute: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: ActionParameter: type: - string - "null" ActionType: type: - string - "null" Filter: type: - string - "null" FilterType: type: - string - "null" Name: type: - string - "null" PublicId: type: - string - "null" SortOrder: type: - number - "null" lists: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: AllowUnsubscribe: type: - boolean - "null" DateAdded: type: - string - "null" ListName: type: - string - "null" PublicListID: type: - string - "null" segments: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: Name: type: - string - "null" Rule: type: - string - "null" statistics: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: Bounced: type: - number - "null" Clicked: type: - number - "null" Complaints: type: - number - "null" Delivered: type: - number - "null" EmailTotal: type: - number - "null" InProgress: type: - number - "null" Inbound: type: - number - "null" ManualCancel: type: - number - "null" NotDelivered: type: - number - "null" Opened: type: - number - "null" Recipients: type: - number - "null" SmsTotal: type: - number - "null" Unsubscribed: type: - number - "null" templates: type: object $schema: http://json-schema.org/schema# additionalProperties: true properties: Body: type: - array - "null" DateAdded: type: - string - "null" Name: type: - string - "null" Subject: type: - string - "null" TemplateScope: type: - string - "null" TemplateType: type: - string - "null"