902 lines
22 KiB
YAML
902 lines
22 KiB
YAML
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"
|