diff --git a/src/_data/catalog/destination_categories.yml b/src/_data/catalog/destination_categories.yml
index 7f7a928abe..e5da00375c 100644
--- a/src/_data/catalog/destination_categories.yml
+++ b/src/_data/catalog/destination_categories.yml
@@ -1,5 +1,5 @@
# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT
-# destination categories last updated 2025-03-20
+# destination categories last updated 2025-03-27
items:
- display_name: A/B Testing
slug: a-b-testing
diff --git a/src/_data/catalog/destinations.yml b/src/_data/catalog/destinations.yml
index 20961f93f2..05564a579e 100644
--- a/src/_data/catalog/destinations.yml
+++ b/src/_data/catalog/destinations.yml
@@ -1,5 +1,5 @@
# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT
-# destination data last updated 2025-03-20
+# destination data last updated 2025-03-27
items:
- id: 637e8d185e2dec264895ea89
display_name: 1Flow
@@ -5848,15 +5848,15 @@ items:
name: Conversion Events
slug: conversionEvents
description: >-
- In ecommerce, conversions are purchase events often but not always
- involving multiple products. Outside of a conversion can be any positive
- signal associated with an index record. Query ID is optional and indicates
- that the view events is the result of a search query.
+ In ecommerce, conversions are purchase or add-to-cart events often but not
+ always involving multiple products. Outside of ecommerce, a conversion can
+ be any positive signal associated with an index record. Query ID is
+ optional and indicates that the event is the result of a search query.
platform: CLOUD
hidden: false
defaultTrigger: type = "track" and event = "Order Completed"
fields:
- - id: jyYQsHrUC3z5aTkmmrpJsP
+ - id: bzPDcwFKachfkx3rSDQR4X
sortOrder: 0
fieldKey: eventSubtype
label: Event Subtype
@@ -5873,7 +5873,7 @@ items:
value: addToCart
dynamic: false
allowNull: false
- - id: r1ajnZpoosrfWMKPEt11Aj
+ - id: oi7UAXBM9m22uBxzHj6ZtU
sortOrder: 1
fieldKey: products
label: Product Details
@@ -5901,7 +5901,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: bk1j5r61xNWoQwwywLrnor
+ - id: 97cVdQq1euH9xy7CBxBFnt
sortOrder: 2
fieldKey: index
label: Index
@@ -5915,7 +5915,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: akcPLa9TcmmKuwPbwUXZsq
+ - id: 8zHC4XKT6zw1fSEVNCkpXx
sortOrder: 3
fieldKey: queryID
label: Query ID
@@ -5935,7 +5935,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: xzLoCGn2gHpSUyxeBfLenv
+ - id: ue7YzadGXzJeh4ehdM3WCk
sortOrder: 4
fieldKey: userToken
label: User Token
@@ -5955,7 +5955,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: oYhL6BB1Kp8bS1zEtK25vD
+ - id: h9Z14o4tJtwWSijrZHUKEX
sortOrder: 5
fieldKey: timestamp
label: Timestamp
@@ -5969,7 +5969,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: bWn4BApB8KTnwC862E1rKQ
+ - id: 27h7UbwYBziAv55r7BkqVq
sortOrder: 6
fieldKey: value
label: Value
@@ -5983,7 +5983,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 7Z1JEcXeSZZBrrvCSkmft8
+ - id: hNuSorFNTweWTihYZJpApn
sortOrder: 7
fieldKey: currency
label: Currency
@@ -5999,7 +5999,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 5u1aVjjqYbtv7RxfACpwfE
+ - id: i2QrLsoBAwJdZmyJioFtpK
sortOrder: 8
fieldKey: extraProperties
label: Extra Properties
@@ -6015,7 +6015,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: eHmtysvj6uaFsdLHvqyE2b
+ - id: cLo6E8qcNBWbtyqQAitdz2
sortOrder: 9
fieldKey: eventName
label: Event Name
@@ -6028,7 +6028,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 3zPARwpa5CszETXSmqN9kg
+ - id: 3jgcs9xg89MqesYUtgLue2
sortOrder: 10
fieldKey: eventType
label: Event Type
@@ -6058,7 +6058,7 @@ items:
hidden: false
defaultTrigger: type = "track" and event = "Product Viewed"
fields:
- - id: e56vXfr6pKJjDFgGCF6iCx
+ - id: kBPaEg6EPdnmtzYsTupfZr
sortOrder: 0
fieldKey: objectID
label: Product ID
@@ -6072,7 +6072,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: hYjGsna7UPmqX4BN1BJ5zo
+ - id: uLVFmBiX7RrJgCa7wNRcyQ
sortOrder: 1
fieldKey: index
label: Index
@@ -6086,7 +6086,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: dDtYnmTYZFDFQN7N947wvp
+ - id: tnVBeTQnKAV4vTSJTs91Qn
sortOrder: 2
fieldKey: queryID
label: Query ID
@@ -6106,7 +6106,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: adBN78A1KLgWJkHSi5maah
+ - id: wZ3jvuLQnN2dVs4sVShBNo
sortOrder: 3
fieldKey: userToken
label: User Token
@@ -6126,7 +6126,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 2MWUJEnJqfMF8n5x9CYtJg
+ - id: j19bZs6RrEFxHDLZThr31C
sortOrder: 4
fieldKey: timestamp
label: Timestamp
@@ -6140,7 +6140,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: pGAFCyYUafTs9YxYDK2oz9
+ - id: eBpLKV7MGxZ7DYenVQFTKz
sortOrder: 5
fieldKey: extraProperties
label: Extra Properties
@@ -6156,7 +6156,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: cjsUEHEhiy42Yt4xy39rNM
+ - id: oj4J9zP5sQ4sFQQL4syinC
sortOrder: 6
fieldKey: eventName
label: Event Name
@@ -6171,7 +6171,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 3VXCJqtaYt49YGTUi9WNVK
+ - id: 3oJL4pbiUzCXyZ9iTQUAzb
sortOrder: 7
fieldKey: eventType
label: Event Type
@@ -6200,7 +6200,7 @@ items:
hidden: false
defaultTrigger: type = "track" and event = "Product Clicked"
fields:
- - id: 8LGqUWkJAkWrxrBGyUyBwQ
+ - id: 6YQw3RMv6kYGb4figikT71
sortOrder: 0
fieldKey: objectID
label: Product ID
@@ -6216,7 +6216,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: b1V93CR2pWXssrVURST4Fq
+ - id: 4jQBych2ueuNKAi5E2La56
sortOrder: 1
fieldKey: index
label: Index
@@ -6230,7 +6230,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 7iWzC63jRmjA6UaiecahtP
+ - id: htzkQqY5Uph1JVem4j51px
sortOrder: 2
fieldKey: queryID
label: Query ID
@@ -6250,7 +6250,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: kmntVxdG5pSrQwAuABxa6P
+ - id: gy2vySb7QycbC4LZ9MSFvy
sortOrder: 3
fieldKey: position
label: Position
@@ -6264,7 +6264,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: feFBuZR1LriwvkDuQjzSsL
+ - id: uqWsGp6kZPvWMU9CQ7BFgg
sortOrder: 4
fieldKey: userToken
label: User Token
@@ -6284,7 +6284,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: b1pjQGZZyVse4MtLM9MU75
+ - id: cfNrCrUkHAvMsCCN7LueqU
sortOrder: 5
fieldKey: timestamp
label: Timestamp
@@ -6298,7 +6298,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: oRQ968LvhBcuifgcvMc1mG
+ - id: kG3GmRo7pCVjCCmHZRjFeA
sortOrder: 6
fieldKey: extraProperties
label: Extra Properties
@@ -6314,7 +6314,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 25b7CSZJB1z6BEDFReCiKt
+ - id: oqvq1M17zZzV5zeRTiv1G1
sortOrder: 7
fieldKey: eventName
label: Event Name
@@ -6329,7 +6329,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: jRBNsFkRhke4ZmyZdf9pej
+ - id: qfoQBYmM87Rraj6sRkXiE8
sortOrder: 8
fieldKey: eventType
label: Event Type
@@ -6356,7 +6356,7 @@ items:
hidden: false
defaultTrigger: type = "track" and event = "Product List Filtered"
fields:
- - id: rL2dr9rjCayRKrj4REtuGB
+ - id: wBhy3BLj2GZioNeA7nGX7T
sortOrder: 0
fieldKey: filters
label: Filters
@@ -6378,7 +6378,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: byjxTdgpbCLjGuPdKvhA2A
+ - id: cdLZgYVZfvRZjHqvwHWrNd
sortOrder: 1
fieldKey: index
label: Index
@@ -6392,7 +6392,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 5mRcubZda23iwBzDJGAePJ
+ - id: tcBcsVgS3uz9EAXwwPmfDw
sortOrder: 2
fieldKey: queryID
label: Query ID
@@ -6412,7 +6412,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 9sE5aPsZYb7c2NB5ALs784
+ - id: uco5QWszWopGfGWdPS8Fj3
sortOrder: 3
fieldKey: userToken
label: User Token
@@ -6432,7 +6432,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: dT811KKgopaU1rYjgC69E4
+ - id: nkPn7t5FJRzkLJQdKYBHCj
sortOrder: 4
fieldKey: timestamp
label: Timestamp
@@ -6446,7 +6446,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: uEEcggxFZwTRe4Nh1Xttny
+ - id: v9ka7FqZXtiCME7QtFAqsq
sortOrder: 5
fieldKey: extraProperties
label: Extra Properties
@@ -6462,7 +6462,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: vxtGErF73oypm77JmD22bG
+ - id: bJuE2GvAw8FfgQ5PY7FS5o
sortOrder: 6
fieldKey: eventName
label: Event Name
@@ -6477,7 +6477,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: khMVMfBDSkQHqWHUuK8BLP
+ - id: 3assDR2KSKnAQrGjQ39Pvh
sortOrder: 7
fieldKey: eventType
label: Event Type
@@ -6497,17 +6497,18 @@ items:
dynamic: false
allowNull: false
- id: jBtAWFiwa9ovR5HvbNDMbf
- name: Product Added Events
+ name: '[Deprecated] Product Added Events'
slug: productAddedEvents
description: >-
Product added events for ecommerce use cases for a customer adding an item
to their cart. Query ID is optional and indicates that the event was the
- result of a search query.
+ result of a search query. **Important** This Action is deprecated. Use the
+ **Conversion Events** Action instead.
platform: CLOUD
hidden: false
defaultTrigger: type = "track" and event = "Product Added"
fields:
- - id: kM4ksMhSVgjF4KsyMXw3Sx
+ - id: k8ChFgusnwjkvRNmHiWVtx
sortOrder: 0
fieldKey: product
label: Product ID
@@ -6523,7 +6524,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: ivdLsdCEXHGVRbEci3DLqA
+ - id: 8fApLYemLJfTkkNx5XTydm
sortOrder: 1
fieldKey: index
label: Index
@@ -6537,7 +6538,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: rVjDxhbfTdV369Mz8SJUx1
+ - id: bGwhTz3JsscNZtnAqy7yU8
sortOrder: 2
fieldKey: queryID
label: Query ID
@@ -6557,7 +6558,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 3BJosBmTeXvEnBq2doC7o3
+ - id: hYo2PDRg33itLQZFskNWZn
sortOrder: 3
fieldKey: userToken
label: User Token
@@ -6577,7 +6578,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: gsWk1KjvZpH1EZQ19iMANd
+ - id: 7aGbKTfjfJtaRwNR4fczE1
sortOrder: 4
fieldKey: timestamp
label: Timestamp
@@ -6591,7 +6592,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 9kxdRNtGagtRS2Ux6vjc3R
+ - id: qfZrHXESR69peBrqEtpsci
sortOrder: 5
fieldKey: extraProperties
label: Extra Properties
@@ -6607,7 +6608,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: nAtWL5z6umVFLiM5rMUYNs
+ - id: tSXZbMv3ixmEZYXRTx9jZw
sortOrder: 6
fieldKey: eventName
label: Event Name
@@ -6620,7 +6621,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: ipYUnxWpDrfQxK4ciJ18KA
+ - id: jWbAM4fsyHif2ZfLPoPn1p
sortOrder: 7
fieldKey: eventType
label: Event Type
@@ -6650,11 +6651,23 @@ items:
type = "alias"
fields: []
presets:
- - actionId: 63BBDy2TNprpH9uExRJKop
- name: Send product viewed events to Algolia
+ - actionId: 2KEUSgKKYG2W82DdaBGsF4
+ name: Send purchase events to Algolia
fields:
- objectID:
- '@path': $.properties.product_id
+ eventSubtype: purchase
+ products:
+ '@arrayPath':
+ - $.properties.products
+ - product_id:
+ '@path': $.product_id
+ price:
+ '@path': $.price
+ quantity:
+ '@path': $.quantity
+ discount:
+ '@path': $.discount
+ queryID:
+ '@path': $.queryID
index:
'@path': $.properties.search_index
queryID:
@@ -6675,15 +6688,19 @@ items:
'@path': $.anonymousId
timestamp:
'@path': $.timestamp
+ value:
+ '@path': $.properties.value
+ currency:
+ '@path': $.properties.currency
extraProperties:
'@path': $.properties
- eventName: Product Viewed
- eventType: view
- trigger: type = "track" and event = "Product Viewed"
- - actionId: jBtAWFiwa9ovR5HvbNDMbf
- name: Send product added events to Algolia
+ eventName: Conversion Event
+ eventType: conversion
+ trigger: type = "track" and event = "Order Completed"
+ - actionId: etbKXm8QsQyQAo83znMszn
+ name: Send product clicked events to Algolia
fields:
- product:
+ objectID:
'@path': $.properties.product_id
index:
'@path': $.properties.search_index
@@ -6695,6 +6712,8 @@ items:
'@path': $.properties.query_id
else:
'@path': $.integrations.Algolia Insights (Actions).query_id
+ position:
+ '@path': $.properties.position
userToken:
'@if':
exists:
@@ -6707,17 +6726,11 @@ items:
'@path': $.timestamp
extraProperties:
'@path': $.properties
- eventName: Add to cart
- eventType: conversion
- trigger: type = "track" and event = "Product Added"
- - actionId: pMj2PGgP2c3hHzLMae4iBb
- name: Algolia Plugin
- fields: {}
- trigger: >-
- type = "track" or type = "identify" or type = "group" or type = "page" or
- type = "alias"
- - actionId: etbKXm8QsQyQAo83znMszn
- name: Send product clicked events to Algolia
+ eventName: Product Clicked
+ eventType: click
+ trigger: type = "track" and event = "Product Clicked"
+ - actionId: 63BBDy2TNprpH9uExRJKop
+ name: Send product viewed events to Algolia
fields:
objectID:
'@path': $.properties.product_id
@@ -6731,8 +6744,6 @@ items:
'@path': $.properties.query_id
else:
'@path': $.integrations.Algolia Insights (Actions).query_id
- position:
- '@path': $.properties.position
userToken:
'@if':
exists:
@@ -6745,9 +6756,9 @@ items:
'@path': $.timestamp
extraProperties:
'@path': $.properties
- eventName: Product Clicked
- eventType: click
- trigger: type = "track" and event = "Product Clicked"
+ eventName: Product Viewed
+ eventType: view
+ trigger: type = "track" and event = "Product Viewed"
- actionId: amxZNcsLHjUhJTRP5YHwaE
name: Send product list filtered events to Algolia
fields:
@@ -6784,9 +6795,9 @@ items:
eventType: click
trigger: type = "track" and event = "Product List Filtered"
- actionId: 2KEUSgKKYG2W82DdaBGsF4
- name: Send conversion events to Algolia
+ name: Send add-to-cart events to Algolia
fields:
- eventSubtype: purchase
+ eventSubtype: addToCart
products:
'@arrayPath':
- $.properties.products
@@ -6828,7 +6839,13 @@ items:
'@path': $.properties
eventName: Conversion Event
eventType: conversion
- trigger: type = "track" and event = "Order Completed"
+ trigger: type = "track" and event = "Product Added"
+ - actionId: pMj2PGgP2c3hHzLMae4iBb
+ name: Algolia Plugin
+ fields: {}
+ trigger: >-
+ type = "track" or type = "identify" or type = "group" or type = "page" or
+ type = "alias"
partnerOwned: true
- id: 66543798b2fb3cb3e9ff992c
display_name: Amazon Ads DSP and AMC
@@ -24612,7 +24629,7 @@ items:
hidden: false
defaultTrigger: event = "Audience Entered" or event = "Audience Exited"
fields:
- - id: x53nX9sScgCzLdFpxshPqV
+ - id: MYWx7cbqiDEtU3oMu4uZp
sortOrder: 0
fieldKey: external_id
label: External User ID
@@ -24631,7 +24648,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: 4yo6yvyVzW67E5Ci8dmH9m
+ - id: dmoSCo2UqPKRx6eqY7J4mn
sortOrder: 1
fieldKey: user_alias
label: User Alias Object
@@ -24648,7 +24665,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: k1qCv78j49HNUiDfv9DUMs
+ - id: rzBuJ21aYq1uQdKZCoizBH
sortOrder: 2
fieldKey: device_id
label: Device ID
@@ -24664,7 +24681,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: jYZzGtHsu9Kg7eGdzxtpQ7
+ - id: vnSpRMiHSMieY4V19FQ3dP
sortOrder: 5
fieldKey: enable_batching
label: Enable Batching
@@ -24678,7 +24695,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: 3Y3GygGwnrUh4ncoKPRNqm
+ - id: 37hRwjbqcqtLa8ZiUAvPhE
sortOrder: 6
fieldKey: personas_audience_key
label: Segment Engage Audience Key
@@ -24694,29 +24711,6 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: t4mKB7BJAhijBgbpHB596r
- sortOrder: 7
- fieldKey: event_properties
- label: Event Properties
- type: OBJECT
- description: >-
- Displays properties of the event to add/remove users to a cohort and the
- traits of the specific user
- placeholder: ''
- defaultValue:
- '@if':
- exists:
- '@path': $.properties
- then:
- '@path': $.properties
- else:
- '@path': $.traits
- required: true
- multiple: false
- choices: null
- dynamic: false
- allowNull: false
- hidden: false
presets: []
partnerOwned: false
- id: 60fb01aec459242d3b6f20c1
@@ -30463,6 +30457,12 @@ items:
description: Your Criteo API client secret
required: true
label: API Client Secret
+ - name: enable_batching
+ type: boolean
+ defaultValue: true
+ description: 'Important: This setting should remain enabled!'
+ required: false
+ label: Enable Batching
actions:
- id: i1hNum2eXrRDke1x4b9Jn6
name: Remove users from Audience
@@ -30472,7 +30472,7 @@ items:
hidden: false
defaultTrigger: type = "track" and event = "Audience Exited"
fields:
- - id: 9TuG4fb3DeFRn3bTksy46o
+ - id: pvW4CibYBwEGgfxfZfXh85
sortOrder: 0
fieldKey: audience_key
label: Audience key
@@ -30487,7 +30487,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: hQ46BST86zt2yCssvjTsvq
+ - id: 62rLxvUKZJaXYM1eyfReSQ
sortOrder: 1
fieldKey: event
label: Event name
@@ -30502,7 +30502,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: fEBbjDhiDzQSbcyXgy5jdX
+ - id: cgFW7QiYXTQrz8WDJkrenk
sortOrder: 2
fieldKey: email
label: Email
@@ -30517,7 +30517,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: myfR2g1ondo3CV5D5uKyQc
+ - id: 5YJHvHqrWD1DEdotrKS3He
sortOrder: 3
fieldKey: hash_emails
label: Hash Emails
@@ -30534,7 +30534,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: 48UG5pCmVJYuQZfpeWNqHB
+ - id: 2zw36yjEgDdHDivz1GF6XN
sortOrder: 4
fieldKey: enable_batching
label: Enable Batching?
@@ -30554,7 +30554,7 @@ items:
hidden: false
defaultTrigger: type = "track" and event = "Audience Entered"
fields:
- - id: 4WwVWm1hzvy7JqarCbMJir
+ - id: 6APzV8AJGTNmUhtubUH4kX
sortOrder: 0
fieldKey: audience_key
label: Audience key
@@ -30569,7 +30569,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: qAAEHg71NgxcSc3jxJMYoh
+ - id: tf6QTage6RqtuffuSkydtE
sortOrder: 1
fieldKey: event
label: Event name
@@ -30584,7 +30584,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: 5dTYi6v1kKV4W1BqGJ3yH7
+ - id: s5FsjXJB5GQEZZTfvNZ1eN
sortOrder: 2
fieldKey: email
label: Email
@@ -30599,7 +30599,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: tDySYCbVen29KtGiu892jz
+ - id: eQypK4Yt5Rc7PXened4SaB
sortOrder: 3
fieldKey: hash_emails
label: Hash Emails
@@ -30616,7 +30616,7 @@ items:
dynamic: false
allowNull: false
hidden: false
- - id: fkRfFZemCKGVz9f8y5jHzQ
+ - id: qAiMkshChZhhByLgNdVKa3
sortOrder: 4
fieldKey: enable_batching
label: Enable Batching?
@@ -72133,7 +72133,7 @@ items:
type: boolean
defaultValue: true
description: Indicates if SSL should be enabled.
- required: true
+ required: false
label: SSL Enabled
- name: ssl_key
type: string
@@ -72150,7 +72150,7 @@ items:
description: >-
Whether to reject unauthorized CAs or not. This can be useful when
testing, but is unadvised in Production.
- required: true
+ required: false
label: SSL - Reject Unauthorized Certificate Authority
- name: username
type: string
@@ -72171,7 +72171,7 @@ items:
type = "track" or type = "identify" or type = "page" or type = "screen" or
type = "group"
fields:
- - id: iGoSy97kN5Jagq7RCWiqh9
+ - id: rpZx7yusdJ9rDLNZWpqKbp
sortOrder: 0
fieldKey: topic
label: Topic
@@ -72185,7 +72185,7 @@ items:
choices: null
dynamic: true
allowNull: false
- - id: pq2rTH6nhfdJKc9skbVF3y
+ - id: jek3rN3NM43ABDQwNGDj6T
sortOrder: 1
fieldKey: payload
label: Payload
@@ -72199,7 +72199,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 8o9pF9931iv1T657Z6fMJr
+ - id: 6wcAra8MykYWL5WbsLYtSb
sortOrder: 2
fieldKey: headers
label: Headers
@@ -72213,7 +72213,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: wEGVh8neXojm1kJHX78GfM
+ - id: mvT1o1a3d5974wRxa181HV
sortOrder: 3
fieldKey: partition
label: Partition
@@ -72225,7 +72225,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: w1QoTBCDDL64zV5Gof2Ukk
+ - id: eXphzZzwSWdBg46Be7dXVN
sortOrder: 4
fieldKey: default_partition
label: Default Partition
@@ -72237,7 +72237,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: iUYVDApt8vV7SUEJ8WUENi
+ - id: 6TULjFrtM8YnhWkHTmCRhh
sortOrder: 5
fieldKey: key
label: Message Key
@@ -72249,7 +72249,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: rgJqFN42iDcaDzDTGrMzgE
+ - id: mo6Msbirr6sPEMvspmeafb
sortOrder: 6
fieldKey: enable_batching
label: Enable Batching?
@@ -106045,7 +106045,7 @@ items:
hidden: false
defaultTrigger: type = "identify"
fields:
- - id: msLYhTzSiH9frKQypk39j7
+ - id: 7bcUDgjmbVCwE79YLWzN9Q
sortOrder: 0
fieldKey: contactKey
label: Contact Key
@@ -106071,7 +106071,7 @@ items:
hidden: false
defaultTrigger: null
fields:
- - id: ghafCSxbPa4YnJ5wvTtnNk
+ - id: wB4GwXmo6BVQAhRopCcyYZ
sortOrder: 0
fieldKey: eventDefinitionKey
label: Event Definition Key
@@ -106085,7 +106085,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: bLxSxMj6A2SPBvN4KoTEmC
+ - id: 85Zaq8eDPfKZVkyPX8EdRp
sortOrder: 1
fieldKey: contactKey
label: Contact Key
@@ -106099,7 +106099,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 4A7PLdbdqJHtHKGGXVHqgd
+ - id: rDwpaCDgtgAj9K9eTVu5KT
sortOrder: 2
fieldKey: data
label: Event Data
@@ -106126,7 +106126,7 @@ items:
hidden: false
defaultTrigger: null
fields:
- - id: kNSQHQwm64spyAdqch3dhQ
+ - id: rJ8t3SNQwreVFTqwmZRB2q
sortOrder: 0
fieldKey: key
label: Data Extension Key
@@ -106141,7 +106141,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: wdoPweXHmqyrx7xJXxnU3v
+ - id: pwTAP6HA2brVctvwzoCY9t
sortOrder: 1
fieldKey: id
label: Data Extension ID
@@ -106156,7 +106156,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: udmLA78M6Yhx2QJ9iDbPaT
+ - id: sg8cHv3HeuoMfxf1FUL7on
sortOrder: 2
fieldKey: keys
label: Data Extension Primary Keys
@@ -106173,7 +106173,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 2cai2ov124dX1pQcQeapf6
+ - id: c4arDnmkkUgnAouYAGRJXq
sortOrder: 3
fieldKey: values
label: Data Extension Fields
@@ -106191,7 +106191,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: v6UonL8VGaCbs3qem3t7j6
+ - id: fQX5mLRvmbcJWQkm6UgAfR
sortOrder: 4
fieldKey: enable_batching
label: Batch data to SFMC
@@ -106214,7 +106214,7 @@ items:
hidden: false
defaultTrigger: type = "identify"
fields:
- - id: 7ZbXQMmYsVmpV4RA81Lu2H
+ - id: cRB4mpG2673nwJkpsKKhud
sortOrder: 0
fieldKey: key
label: Data Extension Key
@@ -106229,7 +106229,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 389oJtq61F6G5RcHpDY7wu
+ - id: ahyjmWLu24HAekxwLKhYN4
sortOrder: 1
fieldKey: id
label: Data Extension ID
@@ -106244,7 +106244,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: i6tbKHJz5djGNVqNQd9S7L
+ - id: 9LmLt2Dxduisbd9t8AdbhR
sortOrder: 2
fieldKey: keys
label: Data Extension Primary Keys
@@ -106264,7 +106264,7 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: 2MJqS6xURYZe7osGZoFr3V
+ - id: xcAmN3NasKGtgMF5gN4ZM6
sortOrder: 3
fieldKey: values
label: Contact Fields
@@ -106281,8 +106281,404 @@ items:
choices: null
dynamic: false
allowNull: false
- - id: rP3kMRC9L1vhPE7kb6suZR
+ - id: p9yt1KGUFEca1kF1a6jXH5
+ sortOrder: 4
+ fieldKey: enable_batching
+ label: Batch data to SFMC
+ type: BOOLEAN
+ description: If true, data is batched before sending to the SFMC Data Extension.
+ placeholder: ''
+ defaultValue: false
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: 2ZQ3y7DJqFGYwCxcpypA1P
+ name: Send Event to Data Extension (V2)
+ slug: dataExtensionV2
+ description: >-
+ Upsert events as rows into an existing data extension in Salesforce
+ Marketing Cloud.
+ platform: CLOUD
+ hidden: false
+ defaultTrigger: null
+ fields:
+ - id: rmgeYjf8zx8CxrPHi3Ng1Q
+ sortOrder: 0
+ fieldKey: keys
+ label: Data Extension Primary Keys
+ type: OBJECT
+ description: >-
+ The primary key(s) that uniquely identify a row in the data extension.
+ On the left-hand side, input the SFMC key name. On the right-hand side,
+ map the Segment field that contains the corresponding value. When
+ multiple primary keys are provided, SFMC will update an existing row if
+ all primary keys match, otherwise a new row will be created
+ placeholder: ''
+ required: true
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: 7RBWa4CrPJNyTYkfE1dLd2
+ sortOrder: 1
+ fieldKey: values
+ label: Data Extension Fields
+ type: OBJECT
+ description: >-
+ The fields in the data extension that contain data about an event, such
+ as Product Name, Revenue, Event Time, etc. Fields must be created in the
+ data extension before sending data for it. On the left-hand side, input
+ the SFMC field name exactly how it appears in the data extension. On the
+ right-hand side, map the Segment field that contains the corresponding
+ value.
+ placeholder: ''
+ required: true
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: 8BvhrUXiey5iutkfuKCxKk
+ sortOrder: 2
+ fieldKey: enable_batching
+ label: Batch data to SFMC
+ type: BOOLEAN
+ description: If true, data is batched before sending to the SFMC Data Extension.
+ placeholder: ''
+ defaultValue: false
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: shtWQ25AGQcpE1tdmP1n9G
sortOrder: 4
+ fieldKey: operation
+ label: Operation
+ type: STRING
+ description: >-
+ Whether to create a new data extension or select an existing one for
+ data delivery.
+ placeholder: ''
+ required: true
+ multiple: false
+ choices:
+ - label: Create a new Data Extension
+ value: create
+ - label: Select an existing Data Extension
+ value: select
+ dynamic: false
+ allowNull: false
+ - id: 4DbMJDATSkDtK8LYRJR45B
+ sortOrder: 5
+ fieldKey: dataExtensionId
+ label: Data Extension ID
+ type: STRING
+ description: The identifier for the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: 9HQGivpCgKw5pNcQvxMDa3
+ sortOrder: 6
+ fieldKey: categoryId
+ label: Category ID (Folder ID)
+ type: STRING
+ description: The identifier for the folder that contains the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: suxU3f7Tpi5gs23Kqcg2w7
+ sortOrder: 7
+ fieldKey: name
+ label: Data Extension Name
+ type: STRING
+ description: The name of the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: 26EAQuxkb5rdDL9CgUpuKG
+ sortOrder: 8
+ fieldKey: description
+ label: Data Extension Description
+ type: STRING
+ description: The description of the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: tYQvYiMxZxDFCjhEu56PyL
+ sortOrder: 9
+ fieldKey: isSendable
+ label: Is Sendable
+ type: BOOLEAN
+ description: >-
+ Indicates whether the custom object can be used to send messages. If the
+ value of this property is true, then the custom object is sendable
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: 2T5WVnJJBoBS71pXebXtuX
+ sortOrder: 10
+ fieldKey: sendableCustomObjectField
+ label: Sendable Custom Object Field
+ type: STRING
+ description: >-
+ The field on this data extension which is sendable. This must be a field
+ that is present on this data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: b5CeLAQ6gs4WKyfVMeEgzS
+ sortOrder: 11
+ fieldKey: sendableSubscriberField
+ label: Sendable Subscriber Field
+ type: STRING
+ description: >-
+ The relationship with "Subscribers" for the Sendable Custom Object
+ Field.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices:
+ - label: Subscriber Key
+ value: _SubscriberKey
+ - label: Subscriber ID
+ value: _SubscriberID
+ dynamic: false
+ allowNull: false
+ - id: 6YHFzPAwH7H8mwDTxtbhk
+ sortOrder: 12
+ fieldKey: columns
+ label: Data Extension Fields
+ type: OBJECT
+ description: A list of fields to create in the data extension.
+ placeholder: ''
+ required: false
+ multiple: true
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: bTKKS7Lw93ETX8WvPokCsU
+ sortOrder: 13
+ fieldKey: retlOnMappingSave
+ label: Create or Select Data Extension
+ type: OBJECT
+ description: >-
+ Connect to an existing data extension or create a new one in Salesforce
+ Marketing Cloud.
+ defaultValue: null
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ hidden: false
+ - id: vk4qzR1jutUuga82iQFmcV
+ sortOrder: 14
+ fieldKey: operation
+ label: Operation
+ type: STRING
+ description: >-
+ Whether to create a new data extension or select an existing one for
+ data delivery.
+ placeholder: ''
+ required: true
+ multiple: false
+ choices:
+ - label: Create a new Data Extension
+ value: create
+ - label: Select an existing Data Extension
+ value: select
+ dynamic: false
+ allowNull: false
+ - id: qbaCm2NMPzxZfEJCGfDMjt
+ sortOrder: 15
+ fieldKey: dataExtensionId
+ label: Data Extension ID
+ type: STRING
+ description: The identifier for the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: hff9VkRMW2TCC2yWPfD5Tb
+ sortOrder: 16
+ fieldKey: categoryId
+ label: Category ID (Folder ID)
+ type: STRING
+ description: The identifier for the folder that contains the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: dAjP9ByPaFExBEUctT9nPq
+ sortOrder: 17
+ fieldKey: name
+ label: Data Extension Name
+ type: STRING
+ description: The name of the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: qmdGzHA1NGusRFMd5uoFd5
+ sortOrder: 18
+ fieldKey: description
+ label: Data Extension Description
+ type: STRING
+ description: The description of the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: tMUcq99j4VdoFZnbX3w1RM
+ sortOrder: 19
+ fieldKey: isSendable
+ label: Is Sendable
+ type: BOOLEAN
+ description: >-
+ Indicates whether the custom object can be used to send messages. If the
+ value of this property is true, then the custom object is sendable
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: ssrHTeEKAv269uxcdRaYMt
+ sortOrder: 20
+ fieldKey: sendableCustomObjectField
+ label: Sendable Custom Object Field
+ type: STRING
+ description: >-
+ The field on this data extension which is sendable. This must be a field
+ that is present on this data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: qp6bPgwiB83vBHemFXBsJX
+ sortOrder: 21
+ fieldKey: sendableSubscriberField
+ label: Sendable Subscriber Field
+ type: STRING
+ description: >-
+ The relationship with "Subscribers" for the Sendable Custom Object
+ Field.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices:
+ - label: Subscriber Key
+ value: _SubscriberKey
+ - label: Subscriber ID
+ value: _SubscriberID
+ dynamic: false
+ allowNull: false
+ - id: 4jgm72jg3sXSV6bpWS5j23
+ sortOrder: 22
+ fieldKey: columns
+ label: Data Extension Fields
+ type: OBJECT
+ description: A list of fields to create in the data extension.
+ placeholder: ''
+ required: false
+ multiple: true
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: mt6hTj8jiUs3Jk4ZF5pWRj
+ sortOrder: 23
+ fieldKey: onMappingSave
+ label: Create or Select Data Extension
+ type: OBJECT
+ description: >-
+ Connect to an existing data extension or create a new one in Salesforce
+ Marketing Cloud.
+ defaultValue: null
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ hidden: false
+ - id: 451LG7JMoSEQQZaB4ENmfp
+ name: Send Contact to Data Extension (V2)
+ slug: contactDataExtensionV2
+ description: >-
+ Upsert contact data as rows into an existing data extension in Salesforce
+ Marketing Cloud.
+ platform: CLOUD
+ hidden: false
+ defaultTrigger: type = "identify"
+ fields:
+ - id: nHJELWgpAfybPmzdkiBzhD
+ sortOrder: 0
+ fieldKey: keys
+ label: Data Extension Primary Keys
+ type: OBJECT
+ description: >-
+ The primary key(s) that uniquely identify a row in the data extension.
+ On the left-hand side, input the SFMC key name. On the right-hand side,
+ map the Segment field that contains the corresponding value. When
+ multiple primary keys are provided, SFMC will update an existing row if
+ all primary keys match, otherwise a new row will be created
+ placeholder: ''
+ defaultValue:
+ contactKey:
+ '@path': $.userId
+ required: true
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: c5sL6KM65fucNpcWfXYurR
+ sortOrder: 1
+ fieldKey: values
+ label: Contact Fields
+ type: OBJECT
+ description: >-
+ The fields in the data extension that contain data about a contact, such
+ as Email, Last Name, etc. Fields must be created in the data extension
+ before sending data for it. On the left-hand side, input the SFMC field
+ name exactly how it appears in the data extension. On the right-hand
+ side, map the Segment field that contains the corresponding value.
+ placeholder: ''
+ required: true
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: 844ctQZXVLtWJ26Fx8TPNK
+ sortOrder: 2
fieldKey: enable_batching
label: Batch data to SFMC
type: BOOLEAN
@@ -106294,6 +106690,284 @@ items:
choices: null
dynamic: false
allowNull: false
+ - id: sB8Dvkoio4a4AG2rkGcg6B
+ sortOrder: 4
+ fieldKey: operation
+ label: Operation
+ type: STRING
+ description: >-
+ Whether to create a new data extension or select an existing one for
+ data delivery.
+ placeholder: ''
+ required: true
+ multiple: false
+ choices:
+ - label: Create a new Data Extension
+ value: create
+ - label: Select an existing Data Extension
+ value: select
+ dynamic: false
+ allowNull: false
+ - id: JfbT7D7L7YYAESN3AL6zA
+ sortOrder: 5
+ fieldKey: dataExtensionId
+ label: Data Extension ID
+ type: STRING
+ description: The identifier for the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: dHLENaRwJiwaarUCvPpahi
+ sortOrder: 6
+ fieldKey: categoryId
+ label: Category ID (Folder ID)
+ type: STRING
+ description: The identifier for the folder that contains the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: kdGyRB8vLpTr1UaoathKFt
+ sortOrder: 7
+ fieldKey: name
+ label: Data Extension Name
+ type: STRING
+ description: The name of the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: n1bg8W6QDZFbqwBM69d9y3
+ sortOrder: 8
+ fieldKey: description
+ label: Data Extension Description
+ type: STRING
+ description: The description of the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: eBPeJJJeoDe7rztA8nMPfJ
+ sortOrder: 9
+ fieldKey: isSendable
+ label: Is Sendable
+ type: BOOLEAN
+ description: >-
+ Indicates whether the custom object can be used to send messages. If the
+ value of this property is true, then the custom object is sendable
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: hd5Zykihm9PTmiXjfMHT75
+ sortOrder: 10
+ fieldKey: sendableCustomObjectField
+ label: Sendable Custom Object Field
+ type: STRING
+ description: >-
+ The field on this data extension which is sendable. This must be a field
+ that is present on this data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: iTxYgoESWBjr98ZT7Cqv6t
+ sortOrder: 11
+ fieldKey: sendableSubscriberField
+ label: Sendable Subscriber Field
+ type: STRING
+ description: >-
+ The relationship with "Subscribers" for the Sendable Custom Object
+ Field.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices:
+ - label: Subscriber Key
+ value: _SubscriberKey
+ - label: Subscriber ID
+ value: _SubscriberID
+ dynamic: false
+ allowNull: false
+ - id: pxx9XUV664rTK51ZMWoxs7
+ sortOrder: 12
+ fieldKey: columns
+ label: Data Extension Fields
+ type: OBJECT
+ description: A list of fields to create in the data extension.
+ placeholder: ''
+ required: false
+ multiple: true
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: eycpCdFAVUbFRjx69Y5swJ
+ sortOrder: 13
+ fieldKey: retlOnMappingSave
+ label: Create or Select Data Extension
+ type: OBJECT
+ description: >-
+ Connect to an existing data extension or create a new one in Salesforce
+ Marketing Cloud.
+ defaultValue: null
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ hidden: false
+ - id: vEMuUkY8WJgwmaRpx451k5
+ sortOrder: 14
+ fieldKey: operation
+ label: Operation
+ type: STRING
+ description: >-
+ Whether to create a new data extension or select an existing one for
+ data delivery.
+ placeholder: ''
+ required: true
+ multiple: false
+ choices:
+ - label: Create a new Data Extension
+ value: create
+ - label: Select an existing Data Extension
+ value: select
+ dynamic: false
+ allowNull: false
+ - id: cEaf3ptqCuU2739uoHSMAe
+ sortOrder: 15
+ fieldKey: dataExtensionId
+ label: Data Extension ID
+ type: STRING
+ description: The identifier for the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: 2XMuaNAMaGRii6Hq5K6UzV
+ sortOrder: 16
+ fieldKey: categoryId
+ label: Category ID (Folder ID)
+ type: STRING
+ description: The identifier for the folder that contains the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: true
+ allowNull: false
+ - id: sUxep19wmuPGp6QZkE2TnS
+ sortOrder: 17
+ fieldKey: name
+ label: Data Extension Name
+ type: STRING
+ description: The name of the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: fKmViPQn4eQLX5aqgMPeLW
+ sortOrder: 18
+ fieldKey: description
+ label: Data Extension Description
+ type: STRING
+ description: The description of the data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: kjJL4n4WhgB1ygCWJWfaTy
+ sortOrder: 19
+ fieldKey: isSendable
+ label: Is Sendable
+ type: BOOLEAN
+ description: >-
+ Indicates whether the custom object can be used to send messages. If the
+ value of this property is true, then the custom object is sendable
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: cJmx59Qi6hUq7eqkfoA74t
+ sortOrder: 20
+ fieldKey: sendableCustomObjectField
+ label: Sendable Custom Object Field
+ type: STRING
+ description: >-
+ The field on this data extension which is sendable. This must be a field
+ that is present on this data extension.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: 9rLexRWHxFyZDfdtpFhVpD
+ sortOrder: 21
+ fieldKey: sendableSubscriberField
+ label: Sendable Subscriber Field
+ type: STRING
+ description: >-
+ The relationship with "Subscribers" for the Sendable Custom Object
+ Field.
+ placeholder: ''
+ required: false
+ multiple: false
+ choices:
+ - label: Subscriber Key
+ value: _SubscriberKey
+ - label: Subscriber ID
+ value: _SubscriberID
+ dynamic: false
+ allowNull: false
+ - id: h1PuRt8zm8pLEzTZq7TuQn
+ sortOrder: 22
+ fieldKey: columns
+ label: Data Extension Fields
+ type: OBJECT
+ description: A list of fields to create in the data extension.
+ placeholder: ''
+ required: false
+ multiple: true
+ choices: null
+ dynamic: false
+ allowNull: false
+ - id: kzQErgZKER7tbhSwf1cgrX
+ sortOrder: 23
+ fieldKey: onMappingSave
+ label: Create or Select Data Extension
+ type: OBJECT
+ description: >-
+ Connect to an existing data extension or create a new one in Salesforce
+ Marketing Cloud.
+ defaultValue: null
+ required: false
+ multiple: false
+ choices: null
+ dynamic: false
+ allowNull: false
+ hidden: false
presets: []
partnerOwned: false
- id: 560a21320a20f4e22f0fb5ca
diff --git a/src/_data/catalog/destinations_private.yml b/src/_data/catalog/destinations_private.yml
index de179b1305..56c8da38cf 100644
--- a/src/_data/catalog/destinations_private.yml
+++ b/src/_data/catalog/destinations_private.yml
@@ -1,5 +1,5 @@
# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT
-# destination data last updated 2025-03-20
+# destination data last updated 2025-03-27
items:
- id: 54521fd925e721e32a72eee1
display_name: Pardot
diff --git a/src/_data/catalog/regional-supported.yml b/src/_data/catalog/regional-supported.yml
index fdfd71f47f..68e87896aa 100644
--- a/src/_data/catalog/regional-supported.yml
+++ b/src/_data/catalog/regional-supported.yml
@@ -287,7 +287,7 @@ sources:
- us
- id: UYaQxaZO3a
display_name: Editable Profile Source Metadata
- hidden: false
+ hidden: true
slug: editable-profile-source-metadata
url: connections/sources/catalog/cloud-apps/editable-profile-source-metadata
regions:
diff --git a/src/_data/catalog/source_categories.yml b/src/_data/catalog/source_categories.yml
index 2ffc32c9a1..db77ab9e74 100644
--- a/src/_data/catalog/source_categories.yml
+++ b/src/_data/catalog/source_categories.yml
@@ -1,5 +1,5 @@
# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT
-# source categories last updated 2025-03-20
+# source categories last updated 2025-03-27
items:
- display_name: A/B Testing
slug: a-b-testing
diff --git a/src/_data/catalog/sources.yml b/src/_data/catalog/sources.yml
index 0d230d6bdd..e113d9e5f1 100644
--- a/src/_data/catalog/sources.yml
+++ b/src/_data/catalog/sources.yml
@@ -1,5 +1,5 @@
# AUTOGENERATED FROM PUBLIC API. DO NOT EDIT
-# sources last updated 2025-03-20
+# sources last updated 2025-03-27
items:
- id: 8HWbgPTt3k
display_name: .NET
diff --git a/src/_data/sidenav/main.yml b/src/_data/sidenav/main.yml
index 0ed1d80825..0e442607d6 100644
--- a/src/_data/sidenav/main.yml
+++ b/src/_data/sidenav/main.yml
@@ -414,8 +414,6 @@ sections:
title: Introduction
- path: '/engage/quickstart'
title: Foundations Onboarding
- - path: '/engage/onboarding'
- title: Premier Onboarding
- path: '/engage/use-cases'
title: Use Cases
- section_title: User Subscriptions
diff --git a/src/connections/destinations/actions.md b/src/connections/destinations/actions.md
index e235093fa9..50b5f0e810 100644
--- a/src/connections/destinations/actions.md
+++ b/src/connections/destinations/actions.md
@@ -210,6 +210,14 @@ The coalesce function takes a primary value and uses it if it is available. If t
The replace function allows you to replace a string, integer, or boolean with a new value. You have the option to replace up to two values within a single field.
+### Concatenate function
+
+To combine two values in the event variable field, you can concatenate them using plain text and variables together. For example, to prepend the country code to a phone number, enter `+1{{Phone Number}}`.
+
+Segment evaluates this field as a string, so placing text next to a variable automatically concatenates them.
+
+
+
### Flatten function
The flatten function allows you to flatten a nested object to an object with a depth of 1. Keys are delimited by the configured separator. For example, an object like {a: { b: { c: 1 }, d: 2 } } will be converted to { 'a.b.c': 1, 'a.d': 2 }.
@@ -219,7 +227,6 @@ The flatten function allows you to flatten a nested object to an object with a d
> info ""
> Self-service users can add a maximum of two conditions per Trigger.
-
Mapping fields are case-sensitive. The following type filters and operators are available to help you build conditions:
- **Event type** (`is`/`is not`). This allows you to filter by the [event types in the Segment Spec](/docs/connections/spec).
diff --git a/src/connections/destinations/catalog/actions-stackadapt-audiences/index.md b/src/connections/destinations/catalog/actions-stackadapt-audiences/index.md
index 5af4925171..efc13d9fee 100644
--- a/src/connections/destinations/catalog/actions-stackadapt-audiences/index.md
+++ b/src/connections/destinations/catalog/actions-stackadapt-audiences/index.md
@@ -11,13 +11,13 @@ hidden: true
[StackAdapt](https://www.stackadapt.com/){:target="_blank"} is a programmatic advertising platform specializing in audience engagement. StackAdapt enables marketers to deliver high-performing advertising campaigns across channels through real-time bidding, detailed audience targeting, and data-driven insights. StackAdapt’s integration with Twilio Engage helps you sync user data to optimize targeting and improve your campaign outcomes.
-This destination is maintained by StackAdapt. For any issues with the destination, please [submit a ticket to StackFAdapt's support team](https://support.stackadapt.com/hc/en-us/requests/new?ticket_form_id=360006572593){:target="_blank"}.
+This destination is maintained by StackAdapt. For any issues with the destination, please [submit a ticket to StackAdapt's support team](https://support.stackadapt.com/hc/en-us/requests/new?ticket_form_id=360006572593){:target="_blank"}.
## Getting started
### Getting your StackAdapt GraphQL Token
-If you do not have an existing StackAdapt API key, [reach out to the StackAdapt team for help](https://support.stackadapt.com/hc/en-us/requests/new?ticket_form_id=360006572593){:target="_blank"}.
+If you do not have an existing StackAdapt read & write API key, [reach out to the StackAdapt team for help](https://support.stackadapt.com/hc/en-us/requests/new?ticket_form_id=360006572593){:target="_blank"}.
### Setting up the StackAdapt Audience destination in Segment Engage
@@ -42,7 +42,9 @@ To sync an Engage audience with StackAdapt:
4. On the Mappings tab, click **New Mapping** and select **Forward Audience Event**.
5. Under Define event trigger, click **Add Condition** and add this condition: Event Type is `Track` or `Identify`.
6. Under **Map fields**, select the advertiser you want to sync the audience with. You can identify a specific advertiser by finding its ID in StackAdapt.
- 
+ > When you're on StackAdapt platform, navigate to `Execute` (or `Overview`), then click on `Advertiser`. Next, select an advertiser from the `Filter` section at the top. You can find the advertiser ID in the URL after `advertiser=`.
+
+
On StackAdapt platform:
diff --git a/src/connections/destinations/images/mapping-concatenation.png b/src/connections/destinations/images/mapping-concatenation.png
new file mode 100644
index 0000000000..5dfba562b1
Binary files /dev/null and b/src/connections/destinations/images/mapping-concatenation.png differ
diff --git a/src/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup.md b/src/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup.md
index 04695300ea..42fe99565d 100644
--- a/src/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup.md
+++ b/src/connections/reverse-etl/reverse-etl-source-setup-guides/postgres-setup.md
@@ -40,4 +40,10 @@ To set up Postgres with Reverse ETL:
* Give the `segment` user write permissions for the Segment managed schema (`__SEGMENT_REVERSE_ETL`), which keeps track of changes to the query results.
-After you've successfully added your Postgres source, [add a model](/docs/connections/reverse-etl/setup/#step-2-add-a-model) and follow the rest of the steps in the Reverse ETL setup guide.
\ No newline at end of file
+After you've successfully added your Postgres source, [add a model](/docs/connections/reverse-etl/setup/#step-2-add-a-model) and follow the rest of the steps in the Reverse ETL setup guide.
+
+### How to use the same user for a Postgres destination and Reverse ETL source
+If you’re using the same database user for both a Segment [Postgres warehouse destination](/docs/connections/storage/catalog/postgres/) (where Segment writes data into Postgres) and Reverse ETL source (where Segment reads data from Postgres), make sure the user has:
+- SELECT or READ access on all source tables for Reverse ETL
+- CREATE SCHEMA `__SEGMENT_REVERSE_ETL` permission (or ability to use an existing schema)
+- INSERT, UPDATE, and DELETE permissions on tables within `__SEGMENT_REVERSE_ETL`
diff --git a/src/connections/sources/catalog/libraries/mobile/android/android-faqs.md b/src/connections/sources/catalog/libraries/mobile/android/android-faqs.md
index 5ae67b2af6..f4be8545ab 100644
--- a/src/connections/sources/catalog/libraries/mobile/android/android-faqs.md
+++ b/src/connections/sources/catalog/libraries/mobile/android/android-faqs.md
@@ -1,8 +1,14 @@
---
title: 'Analytics-Android frequently asked questions'
strat: android
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-Android in March 2026"
+> End-of-support for the Analytics-Android SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/) SDK. If you'd like to upgrade to Analytics-Kotlin, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/).
+
## What is the latest version of the library?
Analytics-Android is published to [Maven Central](http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.segment.analytics.android%22%20AND%20a%3A%22analytics%22) where you can see all published releases.
diff --git a/src/connections/sources/catalog/libraries/mobile/android/changelog.md b/src/connections/sources/catalog/libraries/mobile/android/changelog.md
index 7a2bc56345..651dd6b48d 100644
--- a/src/connections/sources/catalog/libraries/mobile/android/changelog.md
+++ b/src/connections/sources/catalog/libraries/mobile/android/changelog.md
@@ -2,5 +2,8 @@
title: Analytics-Android Changelog
repo: analytics-android
strat: android
+custom_ranking:
+ heading: 0
+ position: 99999
---
{% include content/changelog.html %}
\ No newline at end of file
diff --git a/src/connections/sources/catalog/libraries/mobile/android/index.md b/src/connections/sources/catalog/libraries/mobile/android/index.md
index 818392abc1..34470ffb10 100644
--- a/src/connections/sources/catalog/libraries/mobile/android/index.md
+++ b/src/connections/sources/catalog/libraries/mobile/android/index.md
@@ -2,16 +2,19 @@
title: 'Analytics-Android'
strat: android
repo: analytics-android
-support_type: maintenance
+support_type: community
id: wXNairW5xX
+custom_ranking:
+ heading: 0
+ position: 99999
---
Analytics-Android makes it easier for you to send data to any tool without having to learn, test or implement a new API every time.
Analytics-Android only supports any Android device running API 14 (Android 4.0) and higher. This includes Amazon Fire devices.
-> info "Analytics-Kotlin"
-> The Analytics-Kotlin library is in General Availability. You can use Analytics-Kotlin for [mobile](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/) or [server](/docs/connections/sources/catalog/libraries/server/kotlin) applications. If you'd like to upgrade to Analytics-Kotlin, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/). Segment's future development efforts concentrate on the new Analytics-Kotlin SDK, and will only ship security updates for the Analytics-Android SDK.
+> warning "End-of-Support for Analytics-Android in March 2026"
+> End-of-support for the Analytics-Android SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/) SDK. If you'd like to upgrade to Analytics-Kotlin, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/).
> success ""
> In addition to the documentation here, you can also [read the Javadocs for all versions of Analytics-Android on Javadoc.io](https://javadoc.io/doc/com.segment.analytics.android/analytics/latest/index.html).
diff --git a/src/connections/sources/catalog/libraries/mobile/android/middleware.md b/src/connections/sources/catalog/libraries/mobile/android/middleware.md
index a336962f35..b786f26601 100644
--- a/src/connections/sources/catalog/libraries/mobile/android/middleware.md
+++ b/src/connections/sources/catalog/libraries/mobile/android/middleware.md
@@ -1,8 +1,14 @@
---
title: 'Middleware for Analytics-Android'
strat: android
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-Android in March 2026"
+> End-of-support for the Analytics-Android SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/) SDK. If you'd like to upgrade to Analytics-Kotlin, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/).
+
Middlewares are a powerful mechanism that can augment the events collected by the SDK. A middleware is a simple function that is invoked by the Segment SDK and can be used to monitor, modify, augment or reject events. Source Middleware are available on analytics-android 4.3.0 and later. Destination Middleware are available on analytics-android 4.7.0 and later.
You can register source middleware during construction with the `.useSourceMiddleware` method on the builder. These middleware are invoked for all events, including automatically tracked events, and external event sources like Adjust and Optimizely.
diff --git a/src/connections/sources/catalog/libraries/mobile/android/quickstart.md b/src/connections/sources/catalog/libraries/mobile/android/quickstart.md
index f26b9eccbc..e75e23018b 100644
--- a/src/connections/sources/catalog/libraries/mobile/android/quickstart.md
+++ b/src/connections/sources/catalog/libraries/mobile/android/quickstart.md
@@ -2,8 +2,14 @@
title: 'Quickstart: Analytics-Android'
hidden: true
strat: android
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-Android in March 2026"
+> End-of-support for the Analytics-Android SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/) SDK. If you'd like to upgrade to Analytics-Kotlin, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/).
+
[](https://maven-badges.herokuapp.com/maven-central/com.segment.analytics.android/analytics)
This tutorial will help you start sending analytics data from your Android app to Segment and any of our destinations, using our Android library. As soon as you're set up you'll be able to turn on any new destinations with the flip of a switch!
diff --git a/src/connections/sources/catalog/libraries/mobile/android/troubleshooting.md b/src/connections/sources/catalog/libraries/mobile/android/troubleshooting.md
index b7d4d3b611..802b3b23ee 100644
--- a/src/connections/sources/catalog/libraries/mobile/android/troubleshooting.md
+++ b/src/connections/sources/catalog/libraries/mobile/android/troubleshooting.md
@@ -1,8 +1,14 @@
---
title: 'Troubleshooting Analytics-Android'
strat: android
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-Android in March 2026"
+> End-of-support for the Analytics-Android SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/) SDK. If you'd like to upgrade to Analytics-Kotlin, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/).
+
## No events in my debugger
1. Check that you followed all of the [Getting Started](/docs/connections/sources/catalog/libraries/mobile/android/#getting-started) steps correctly
diff --git a/src/connections/sources/catalog/libraries/mobile/android/wear.md b/src/connections/sources/catalog/libraries/mobile/android/wear.md
index 4e8727560d..e9ec90f0ee 100644
--- a/src/connections/sources/catalog/libraries/mobile/android/wear.md
+++ b/src/connections/sources/catalog/libraries/mobile/android/wear.md
@@ -2,8 +2,14 @@
title: 'Analytics-Android Wear'
strat: android
hidden: true
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-Android in March 2026"
+> End-of-support for the Analytics-Android SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/) SDK. If you'd like to upgrade to Analytics-Kotlin, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/migration/).
+
Analytics-Android Wear makes it simple to send your data to any tool without having to learn, test, or implement a new API every time.
All of Segment's client libraries are open-source, so you can [view Analytics-Android on GitHub](https://github.com/segmentio/analytics-android), or check out our [browser and server-side libraries](/docs/connections/sources/catalog/) too.
diff --git a/src/connections/sources/catalog/libraries/mobile/ios/changelog.md b/src/connections/sources/catalog/libraries/mobile/ios/changelog.md
index e364e2df7a..85a8312245 100644
--- a/src/connections/sources/catalog/libraries/mobile/ios/changelog.md
+++ b/src/connections/sources/catalog/libraries/mobile/ios/changelog.md
@@ -2,5 +2,8 @@
title: Analytics-iOS Changelog
repo: analytics-ios
strat: ios
+custom_ranking:
+ heading: 0
+ position: 99999
---
{% include content/changelog.html %}
\ No newline at end of file
diff --git a/src/connections/sources/catalog/libraries/mobile/ios/index.md b/src/connections/sources/catalog/libraries/mobile/ios/index.md
index 2d224e2cb4..4e8d09d9c6 100644
--- a/src/connections/sources/catalog/libraries/mobile/ios/index.md
+++ b/src/connections/sources/catalog/libraries/mobile/ios/index.md
@@ -2,21 +2,24 @@
title: Analytics-iOS
strat: ios
repo: analytics-ios
-support_type: maintenance
+support_type: community
id: UBrsG9RVzw
+custom_ranking:
+ heading: 0
+ position: 99999
---
With Analytics-iOS, you can send your data to analytics or marketing tool, without needing to learn, test, or implement a new API with each update or addition.
+> warning "End-of-Support for Analytics-iOS in March 2026"
+> End-of-support for the Analytics-iOS SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Swift](/docs/connections/sources/catalog/libraries/mobile/swift/){:target="_blank”} SDK. If you'd like to migrate to Analytics-Swift, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/swift/migration/){:target="_blank”}.
+
> info "Watchkit extensions currently unsupported"
> Segment does not currently support tracking of watchkit extensions for the Apple Watch. [Email Segment](https://segment.com/requests/integrations/){:target="_blank”}. if you're interested in a Watchkit SDK. For now Segment recommends tracking watch interactions using the iPhone app code.
-> info "Analytics-Swift"
-> The [Analytics-Swift](/docs/connections/sources/catalog/libraries/mobile/swift/){:target="_blank”}. library is in General Availability. If you'd like to migrate to Analytics-Swift, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/swift/migration/){:target="_blank”}.. Segment's future development efforts concentrate on the new Analytics-Kotlin SDK, and will only ship security updates for the Analytics-Android SDK.
-
## Analytics-iOS and Unique Identifiers
One of the most important parts of any analytics platform is the ability to consistently and accurately identify users. To do this, the platform must assign and persist some form of identification on the device, so you can analyze user actions effectively. This is especially important for funnel conversion analysis and retention analysis.
diff --git a/src/connections/sources/catalog/libraries/mobile/ios/ios-faqs.md b/src/connections/sources/catalog/libraries/mobile/ios/ios-faqs.md
index 3edf802f60..93004e11aa 100644
--- a/src/connections/sources/catalog/libraries/mobile/ios/ios-faqs.md
+++ b/src/connections/sources/catalog/libraries/mobile/ios/ios-faqs.md
@@ -1,8 +1,14 @@
---
title: Analytics-iOS Frequently asked questions
strat: ios
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-iOS in March 2026"
+> End-of-support for the Analytics-iOS SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Swift](/docs/connections/sources/catalog/libraries/mobile/swift/){:target="_blank”} SDK. If you'd like to migrate to Analytics-Swift, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/swift/migration/){:target="_blank”}.
+
## How big is the Segment SDK?
The core Segment SDK is extremely lightweight. It weighs in at about 212KB.
diff --git a/src/connections/sources/catalog/libraries/mobile/ios/ios14-guide.md b/src/connections/sources/catalog/libraries/mobile/ios/ios14-guide.md
index 78ce64d22a..c05be97519 100644
--- a/src/connections/sources/catalog/libraries/mobile/ios/ios14-guide.md
+++ b/src/connections/sources/catalog/libraries/mobile/ios/ios14-guide.md
@@ -1,8 +1,14 @@
---
title: iOS 14 Guide
strat: ios
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-iOS in March 2026"
+> End-of-support for the Analytics-iOS SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Swift](/docs/connections/sources/catalog/libraries/mobile/swift/){:target="_blank”} SDK. If you'd like to migrate to Analytics-Swift, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/swift/migration/){:target="_blank”}.
+
> warning ""
> You should update your `analytics-ios` and device-mode destinations to adapt to iOS 14 changes explained in this guide. For information about iOS 14.5, see [What's new in iOS 14.5](#whats-new-with-ios-145) below.
diff --git a/src/connections/sources/catalog/libraries/mobile/ios/middleware.md b/src/connections/sources/catalog/libraries/mobile/ios/middleware.md
index 7afe275a69..129d4654bc 100644
--- a/src/connections/sources/catalog/libraries/mobile/ios/middleware.md
+++ b/src/connections/sources/catalog/libraries/mobile/ios/middleware.md
@@ -1,8 +1,14 @@
---
title: Middleware for iOS
strat: ios
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-iOS in March 2026"
+> End-of-support (EoS) for the Analytics-iOS SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Swift](/docs/connections/sources/catalog/libraries/mobile/swift/){:target="_blank”} SDK. If you'd like to migrate to Analytics-Swift, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/swift/migration/){:target="_blank”}.
+
Middlewares are simple functions invoked by the Segment libraries, which give you a way to add information to the events you collect using the Segment SDKs. They can be used to monitor, modify, or reject events. Source Middlewares are available on `analytics-ios` 3.6.0 and later.
You can access the middleware API in both Objective-C and Swift.
diff --git a/src/connections/sources/catalog/libraries/mobile/ios/quickstart.md b/src/connections/sources/catalog/libraries/mobile/ios/quickstart.md
index 6ff95a8a3f..8e393b8acc 100644
--- a/src/connections/sources/catalog/libraries/mobile/ios/quickstart.md
+++ b/src/connections/sources/catalog/libraries/mobile/ios/quickstart.md
@@ -2,8 +2,14 @@
title: 'Quickstart: iOS'
hidden: true
strat: ios
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-iOS in March 2026"
+> End-of-support for the Analytics-iOS SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Swift](/docs/connections/sources/catalog/libraries/mobile/swift/){:target="_blank”} SDK. If you'd like to migrate to Analytics-Swift, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/swift/migration/){:target="_blank”}.
+
This tutorial gets you started sending data from your iOS app to Segment. When you're done you can turn on [any of Segment's destinations](/docs/connections/destinations/) with the flip of a switch! No more waiting for App Store approval.
If you want to dive deeper at any point, check out the [iOS Library Reference](/docs/connections/sources/catalog/libraries/mobile/ios/).
diff --git a/src/connections/sources/catalog/libraries/mobile/ios/troubleshooting.md b/src/connections/sources/catalog/libraries/mobile/ios/troubleshooting.md
index 4f51dd8f55..6557997b51 100644
--- a/src/connections/sources/catalog/libraries/mobile/ios/troubleshooting.md
+++ b/src/connections/sources/catalog/libraries/mobile/ios/troubleshooting.md
@@ -1,8 +1,14 @@
---
title: Troubleshooting Analytics-iOS
strat: ios
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics-iOS in March 2026"
+> End-of-support for the Analytics-iOS SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-Swift](/docs/connections/sources/catalog/libraries/mobile/swift/){:target="_blank”} SDK. If you'd like to migrate to Analytics-Swift, see the [migration guide](/docs/connections/sources/catalog/libraries/mobile/swift/migration/){:target="_blank”}.
+
## Target has transitive dependencies that include static binaries
This was due to an old [CocoaPods limitation](https://github.com/CocoaPods/CocoaPods/issues/2926).
diff --git a/src/connections/sources/catalog/libraries/mobile/react-native/index.md b/src/connections/sources/catalog/libraries/mobile/react-native/index.md
index c0a0ce9a87..545fb13ec0 100644
--- a/src/connections/sources/catalog/libraries/mobile/react-native/index.md
+++ b/src/connections/sources/catalog/libraries/mobile/react-native/index.md
@@ -88,7 +88,7 @@ These are the options you can apply to configure the client:
| `storePersistor` | undefined | A custom persistor for the store that `analytics-react-native` uses. Must match [`Persistor`](https://github.com/segmentio/analytics-react-native/blob/master/packages/sovran/src/persistor/persistor.ts#L1-L18) interface exported from [sovran-react-native](https://github.com/segmentio/analytics-react-native/blob/master/packages/sovran). |
| `proxy` | undefined | `proxy` is a batch url to post to instead of 'https://api.segment.io/v1/b'. |
| `errorHandler` | undefined | Create custom actions when errors happen, see [Handling errors](#handling-errors) |
-
+| `useSegmentEndpoints` | false | Set to `true` to automatically append the Segment endpoints when using `proxy` or `cdnProxy` to send or fetch settings. Otherwise, `proxy` or `cdnProxy` will be used as is. |
## Adding Plugins to the Client
diff --git a/src/connections/sources/catalog/libraries/mobile/xamarin/analytics-xamarin.md b/src/connections/sources/catalog/libraries/mobile/xamarin/analytics-xamarin.md
new file mode 100644
index 0000000000..03d79299f9
--- /dev/null
+++ b/src/connections/sources/catalog/libraries/mobile/xamarin/analytics-xamarin.md
@@ -0,0 +1,422 @@
+---
+title: Analytics for Xamarin
+sourceTitle: 'Xamarin'
+sourceCategory: 'Mobile'
+id: wcssVcPJrc
+hidden: true
+support_type: community
+---
+
+> warning "End-of-Support for Analytics.Xamarin in March 2026"
+> End-of-support for the Analytics.Xamarin SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-CSharp](/docs/connections/sources/catalog/libraries/server/csharp/) SDK. If you'd like to migrate to Analytics-CSharp, see the [migration guide](/docs/connections/sources/catalog/libraries/server/csharp/migration-guide/).
+
+Segment's [Xamarin](http://xamarin.com/) Portable Class Library ([PCL](http://developer.xamarin.com/guides/cross-platform/application_fundamentals/pcl/)) is the best way to integrate analytics into your Xamarin application. It lets you record analytics data from your C#, F#, and .NET code, and supports `PCL Profile 4.0 - Profile136`, which targets the following platforms:
+
+- .NET Framework 4 or later
+- Windows Phone 8 or later
+- Silverlight 5
+- Windows 8
+- Windows Phone Silverlight 8
+- Windows Store apps (Windows 8)
+- Xamarin.Android
+- Xamarin.iOS
+
+The library issues requests that hit our servers, and then we route your data to any analytics service you enable on our destinations page. This library is open-source, so you can [check it out on GitHub](https://github.com/segmentio/Analytics.Xamarin).
+
+**Note:** Since Xamarin requires Segment's library to be portable to different builds, Segment can only enable server-side destinations, as opposed to bundling select native SDKs like we do for iOS and Android. Look for the "Server" icon when selecting destinations. For tools for which we offer both bundled and server-side destinations, like Mixpanel, Amplitude, and Google Analytics, Segment's Xamarin library will only be able to use their server-side functionality.
+
+## Getting Started
+
+Clone `Analytics.Xamarin` from [GitHub](https://github.com/segmentio/Analytics.Xamarin)...
+
+```bash
+git clone https://github.com/segmentio/Analytics.Xamarin.git
+```
+
+Import the `Analytics.Xamarin` project into Xamarin Studio, and add it as a reference to your code.
+
+Now you'll need to initialize the library.
+
+```csharp
+using Segment;
+
+// initialize with your Segment source write key ...
+Analytics.Initialize("YOUR_WRITE_KEY");
+```
+
+You only need to initialize once at the start of your program. You can then keep using the `Analytics` singleton anywhere in your code.
+
+The default initialization settings are production-ready and queue messages on another thread before sending any requests. In development you might want to use [development settings](/docs/connections/sources/catalog/libraries/mobile/xamarin/#development-settings).
+
+## Identify
+
+`identify` lets you tie a user to their actions and record traits about them. It includes a unique User ID and any optional traits you know about them.
+
+We recommend calling `identify` a single time when the user's account is first created, and only identifying again later when their traits change.
+
+Example `identify` call:
+
+```csharp
+Analytics.Client.Identify("019mr8mf4r", new Traits() {
+ { "name", "Tom Smykowski" },
+ { "email", "tom@example.com" },
+ { "friends", 29 }
+});
+```
+
+This example call identifies Tom by his unique User ID (the one you know him by in your database) and label him with `name`, `email` and `friends` traits.
+
+The `identify` call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `Traits` _Traits, optional_ |
+ A dictionary of traits you know about the user. Things like: `email`, `name` or `friends`. |
+
+
+ `options` _Options, optional_ |
+ An `Options` object lets you set a [timestamp](#historical-import), [enable or disable destinations](#selecting-destinations), or [send additional context](#context). |
+
+
+
+Find details on the **identify method payload** in our [Spec](/docs/connections/spec/identify/).
+
+## Track
+
+`track` lets you record the actions your users perform. Every action triggers what we call an "event", which can also have associated properties.
+
+You'll want to track events that are indicators of success for your site, like **Signed Up**, **Item Purchased** or **Article Bookmarked**.
+
+To get started, we recommend tracking just a few important events. You can always add more later!
+
+Example `track` call:
+
+```csharp
+Analytics.Client.Track("019mr8mf4r", "Item Purchased", new Properties() {
+ { "revenue", 39.95 },
+ { "shipping", "2-day" }
+});
+```
+This example `track` call tells us that your user just triggered the **Item Purchased** event with a revenue of $39.95 and chose your hypothetical '2-day' shipping.
+
+`track` event properties can be anything you want to record.
+
+The `track` call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `event` _String_ |
+ The name of the event you're tracking. We recommend human-readable names like Played Song or Updated Status. |
+
+
+ `properties` _Properties, optional_ |
+ A dictionary of properties for the event. If the event was Added to Cart, it might have properties like `price` or `product`. |
+
+
+ `options` _Options, optional_ |
+ An `Options` object lets you set a [timestamp](#historical-import), [enable or disable destinations](#selecting-destinations), or [send additional context](#context). |
+
+
+
+Find details on **best practices in event naming** as well as the **`track` method payload** in our [Spec](/docs/connections/spec/track/).
+
+## Screen
+
+The [`screen`](/docs/connections/spec/screen/) method lets you you record whenever a user sees a screen of your mobile app, along with optional extra information about the page being viewed.
+
+You'll want to record a screen event an event whenever the user opens a screen in your app. This could be a view, fragment, dialog or activity depending on your app.
+
+Not all services support screen, so when it's not supported explicitly, the screen method tracks as an event with the same parameters.
+
+Example `screen` call:
+
+```csharp
+Analytics.Client.Screen("019mr8mf4r", "Register", new Properties() {
+ { "type", "facebook" }
+});
+```
+
+The `screen` call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `name` _String_ |
+ The screen name you're tracking. We recommend human-readable names like Login or Register. |
+
+
+ `category` _String_ |
+ The screen category. If you're making a news app, the category could be Sports. |
+
+
+ `properties` _Properties, optional_ |
+ A dictionary of properties for the screen view. If the screen is Restaurant Reviews, it might have properties like `reviewCount` or `restaurantName`. |
+
+
+ `options` _Options, optional_ |
+ An `Options` object lets you set a [timestamp](#historical-import), [enable or disable destinations](#selecting-destinations), or [send additional context](#context). |
+
+
+
+Find details on the **`screen` payload** in our [Spec](/docs/connections/spec/screen/).
+
+## Group
+
+`group` lets you associate an [identified user](/docs/connections/sources/catalog/libraries/server/java/#identify) user with a group. A group could be a company, organization, account, project or team! It also lets you record custom traits about the group, like industry or number of employees.
+
+This is useful for tools like [Intercom](/docs/connections/destinations/catalog/intercom/), [Preact](/docs/connections/destinations/catalog/preact/) and [Totango](/docs/connections/destinations/catalog/totango/), as it ties the user to a **group** of other users.
+
+Example `group` call:
+
+```csharp
+Analytics.Client.Group("userId", "groupId", new Traits() {
+ { "name", "Initech, Inc." },
+ { "website", "http://www.example.com" }
+});
+```
+The `group` call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `groupId` _String_ |
+ The ID for this group in your database. |
+
+
+ `traits` _Traits, optional_ |
+ A dictionary of traits you know about the group. Things like: `name` or `website`. |
+
+
+ `options` _Options, optional_ |
+ An `Options` object lets you set a [timestamp](#historical-import), [enable or disable destinations](#selecting-destinations), or [send additional context](#context). |
+
+
+
+Find more details about `group` including the **`group` payload** in our [Spec](/docs/connections/spec/group/).
+
+## Alias
+
+`alias` is how you associate one identity with another. This is an advanced method, but it is required to manage user identities successfully in *some* of our destinations.
+
+In [Mixpanel](/docs/connections/destinations/catalog/mixpanel/#alias) it's used to associate an anonymous user with an identified user once they sign up. For [Kissmetrics](/docs/connections/destinations/catalog/kissmetrics/#alias), if your user switches IDs, you can use 'alias' to rename the 'userId'.
+
+Example `alias` call:
+
+```csharp
+Analytics.Client.Alias("previousId", "userId");
+```
+
+Here's a full example of how we might use the `alias` call:
+
+```csharp
+// the anonymous user does actions ...
+Analytics.Client.Track("anonymous_user", "Anonymous Event");
+// the anonymous user signs up and is aliased
+Analytics.Client.Alias("anonymous_user", "identified@example.com");
+// the identified user is identified
+Analytics.Client.Identify("identified@example.com", new Traits() { plan: "Free" });
+// the identified user does actions ...
+Analytics.Client.Track("identified@example.com", "Identified Action");
+```
+
+For more details about `alias`, including the **`alias` call payload**, check out our [Spec](/docs/connections/spec/alias/).
+
+---
+
+## Development Settings
+
+You can use this initialization during development while testing the library. `SetAsync(false)` will make sure the library makes a request to our servers every time it's called.
+
+```csharp
+Analytics.Initialize("YOUR_WRITE_KEY", new Config().SetAsync(false));
+```
+
+Don't forget to set async back to `true` for production, so that you can advantage of asynchronous flushing on a different thread.
+
+## Options
+
+An `Options` object lets you:
+
+1. Set a [timestamp](#historical-import), [enable or disable destinations](#selecting-destinations)
+2. [Send additional context](#context)
+3. [Send an anoymousId](#anonymous-id)
+
+## Selecting Destinations
+
+The `alias`, `group`, `identify`, `page` and `track` calls can all be passed an object of `options` that lets you turn certain destinations on or off. By default all destinations are enabled.
+
+Here's an example `identify` call with the `options` object shown.
+
+```csharp
+Analytics.Client.Identify("hj2kf92ds212", new Traits() {
+ { "email", "tom@example.com" },
+ { "name", "Tom Smykowski" },
+}, new Options()
+ .SetIntegration("all", false)
+ .SetIntegration("Kissmetrics", true)
+);
+```
+
+In this case, we're specifying that we want this identify to only go to Kissmetrics. `"all", false` says that no destination should be enabled unless otherwise specified. `{ "Kissmetrics", true }` turns on Kissmetrics, etc.
+
+destination flags are **case sensitive** and match [the destination's name in the docs](/docs/connections/destinations/) (i.e. "AdLearn Open Platform", "awe.sm", "MailChimp", etc.).
+
+**Note:** Available at the business level, filtering track calls can be done right from the Segment UI on your source schema page. We recommend using the UI if possible since it's a much simpler way of managing your filters and can be updated with no code changes on your side.
+
+## Historical Import
+
+You can import historical data by adding the `timestamp` argument to your `identify` and `track` calls. _Note: If you're tracking things that are happening right now, leave out the timestamp and our servers will timestamp the requests for you._
+
+```csharp
+Analytics.Client.Track("sadi89e2jd", "Logged Workout", new Properties() {
+ { "distance", "10 miles" },
+ { "city", "Boston" },
+}, new Options()
+ .SetTimestamp(new DateTime(2010, 1, 18))
+);
+```
+
+## Context
+
+If you're running a web server, you might want to send context variables such as `userAgent` or `ip` with your `page` or `screen` calls. You can do so by setting the `Context` in the `Options` object.
+
+```csharp
+Analytics.Client.Page("019mr8mf4r", "Login", new Properties() {
+ { "path", "/login" },
+ { "title", "Initech Login" }
+}, new Options()
+ .SetContext(new Context() {
+ { "app", "Education App 2" }
+ }));
+```
+
+Learn more on the [Context page](/docs/connections/spec/common/#context).
+
+## Anonymous ID
+
+By default, the Xamarin library requires all messages to have a `userId`. If you would like to use an `anonymousId`, you can pass it in with options.
+
+```csharp
+Analytics.Client.Page(null, "Login", new Properties(), new Options()
+ .SetAnonymousId("some-id"));
+```
+
+## Nested Properties
+
+You can provide nested properties, like so:
+
+```csharp
+Analytics.Client.Identify("hj2kf92ds212", new Traits() {
+ { "email", "tom@example.com" },
+ { "name", "Tom Smykowski" },
+ { "address", new Dict() {
+ { "street", "123 Fake Street" },
+ { "city", "Boston" }
+ }}
+});
+```
+
+## Batching
+
+Our libraries are built to support high performance environments. That means it is safe to use Analytics.Xamarin on a web server that's serving hundreds of requests per second.
+
+By default (in async mode), this library will start a single seperate thread on initialization, and flush all messages on that thread. That means every method you call **does not** result in an HTTP request, but is queued in memory instead. Messages are flushed in batch in the background, which allows for much faster operation.
+
+### How do I turn batching off?
+
+Sometimes you might not want batching (eg. when debugging, or in short-lived programs). You can turn off batching by setting the `async` argument to `false`, and your requests will always be sent in a blocking manner.
+
+```csharp
+Analytics.Initialize("YOUR_WRITE_KEY", new Config().SetAsync(false));
+```
+
+### What happens if there are just too many messages?
+
+If the module detects that it can't flush faster than it's receiving messages, it'll simply stop accepting messages. This means your program will never crash because of a backing up analytics queue. The maximum size of the queue defaults to `10000`, and here's how you can change it:
+
+```csharp
+Analytics.Initialize("YOUR_WRITE_KEY", new Config().SetMaxQueueSize(10000));
+```
+
+### How do I flush right now?!
+
+You can also flush on demand. For example, at the end of your program, you'll want to flush to make sure there's nothing left in the queue. Just call the `Flush` method:
+
+```csharp
+Analytics.Client.Flush();
+```
+
+This method will block until all messages are flushed.
+
+### How do I dispose of the flushing thread at the end of my program?
+
+The Analytics client implements the `IDisposable` interface, and will turn off its flushing thread when you call `Dispose`.
+
+```csharp
+Analytics.Client.Dispose();
+```
+
+## Configuration
+
+If you hate defaults, than you'll love how configurable the Analytics.Xamarin is. Check out these gizmos:
+
+```csharp
+Analytics.Initialize("YOUR_WRITE_KEY", new Config()
+ .SetAsync(true)
+ .SetTimeout(TimeSpan.FromSeconds(10))
+ .SetMaxQueueSize(10000));
+```
+
+
+
+ `SetAsync` _boolean_ |
+ `true` to flush on a different thread, `false` to flush immediately on the same thread. |
+
+
+ `SetTimeout` _TimeSpan_ |
+ The amount of time to wait before calling the HTTP request a timeout. |
+
+
+ `SetMaxQueueSize` _int_ |
+ The maximum number of messages to allow into the queue before no new message are accepted. |
+
+
+
+## Logging
+
+`Analytics.Xamarin` has detailed logging, which you can enable by attaching your own handler, like so:
+
+```csharp
+using Segment;
+
+Segment.Logger.Handlers += Logging_Handler;
+
+void Logging_Handler(Level level, string message, Dict args) {
+ if (args != null) {
+ foreach (string key in args.Keys) {
+ message += String.Format(" {0}: {1},", "" + key, "" + args[key]);
+ }
+ }
+ Console.WriteLine(String.Format("[Analytics] [{0}] {1}", level, message));
+}
+```
+
+## Anonymizing IP
+
+We collect IP address for client-side (iOS, Android, Analytics.js and Xamarin) events automatically.
+
+If you don't want us to record your tracked users' IP in destinations and S3, you can set your event's `context.ip` field to `0.0.0.0` . Our server won't record the IP address of the client for libraries if the `context.ip` field is already set.
\ No newline at end of file
diff --git a/src/connections/sources/catalog/libraries/mobile/xamarin/index.md b/src/connections/sources/catalog/libraries/mobile/xamarin/index.md
index 92137a2088..28bea0b8f1 100644
--- a/src/connections/sources/catalog/libraries/mobile/xamarin/index.md
+++ b/src/connections/sources/catalog/libraries/mobile/xamarin/index.md
@@ -4,7 +4,14 @@ sourceTitle: 'Xamarin'
sourceCategory: 'Mobile'
id: wcssVcPJrc
support_type: community
+custom_ranking:
+ heading: 0
+ position: 99999
---
+
+> warning "End-of-Support for Analytics.Xamarin in March 2026"
+> End-of-support for the Analytics.Xamarin SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-CSharp](/docs/connections/sources/catalog/libraries/server/csharp/) SDK. If you'd like to migrate to Analytics-CSharp, see the [migration guide](/docs/connections/sources/catalog/libraries/server/csharp/migration-guide/).
+
Segment's [Xamarin](http://xamarin.com/) Portable Class Library ([PCL](http://developer.xamarin.com/guides/cross-platform/application_fundamentals/pcl/)) is the best way to integrate analytics into your Xamarin application. It lets you record analytics data from your C#, F#, and .NET code, and supports `PCL Profile 4.0 - Profile136`, which targets the following platforms:
- .NET Framework 4 or later
@@ -20,9 +27,6 @@ The library issues requests that hit our servers, and then we route your data to
**Note:** Since Xamarin requires Segment's library to be portable to different builds, Segment can only enable server-side destinations, as opposed to bundling select native SDKs like we do for iOS and Android. Look for the "Server" icon when selecting destinations. For tools for which we offer both bundled and server-side destinations, like Mixpanel, Amplitude, and Google Analytics, Segment's Xamarin library will only be able to use their server-side functionality.
-> info "Analytics-CSharp (C#)"
-> With [Analytics-CSharp](/docs/connections/sources/catalog/libraries/server/csharp/), you can add Segment analytics to your C# based app which includes Xamarin. If you'd like to migrate to use Analytics-CSharp, see the [Analytics-CSharp migration guide](/docs/connections/sources/catalog/libraries/server/csharp/migration-guide/).
-
## Getting Started
Clone `Analytics.Xamarin` from [GitHub](https://github.com/segmentio/Analytics.Xamarin)...
diff --git a/src/connections/sources/catalog/libraries/server/csharp/index.md b/src/connections/sources/catalog/libraries/server/csharp/index.md
index 493245910a..e7428dde74 100644
--- a/src/connections/sources/catalog/libraries/server/csharp/index.md
+++ b/src/connections/sources/catalog/libraries/server/csharp/index.md
@@ -2,15 +2,24 @@
title: Analytics-CSharp (C#)
strat: csharp
support_type: flagship
+tags:
+ - C#
+ - C-sharp
+ - .NET
+ - NET
+ - Xamarin
+ - Unity
+ - ASP.NET
id:
redirect_from:
- - '/connections/sources/catalog/libraries/mobile/unity'
- - '/connections/sources/catalog/libraries/mobile/csharp/'
+ - '/connections/sources/catalog/libraries/mobile/unity/'
+ - '/connections/sources/catalog/libraries/mobile/csharp/'
+ - '/connections/sources/catalog/libraries/mobile/xamarin/'
+ - '/connections/sources/catalog/libraries/server/net/'
---
With Analytics-CSharp, you can add Segment analytics to your C# based app which includes Unity, Xamarin, .NET. Analytics-CSharp helps you measure your users, product, and business. It unlocks insights into your app's funnel, core business metrics, and whether you have product-market fit. The Analytics-CSharp library is open-source [on GitHub](https://github.com/segmentio/analytics-csharp){:target="_blank"}.
-
### Supported platforms
These platforms support Analytics-CSharp:
* .NET/.NET core/.NET framework
@@ -23,7 +32,7 @@ These platforms support Analytics-CSharp:
* Unity
* iOS
* Android
- * PC, Mac, Linux
+ * PC, Mac, Linux
## Getting started
@@ -59,19 +68,22 @@ To get started with the Analytics-CSharp library:
> info ""
> Segment's SDK is designed to be disposable, meaning Segment disposes of objects when the analytics instance is disposed. Segment avoids using singletons for configurations or HTTP clients to prevent memory management issues. If you want to use singletons, create your own HTTP client provider with a singleton HTTP client for better control and management.
-| Option Name | Description |
-|-----------------------------|---------------|
- | `writeKey` *required* | This is your Segment write key. |
-| `flushAt` | The default is set to `20`.
The count of events at which Segment flushes events. |
-| `flushInterval` | The default is set to `30` (seconds).
The interval in seconds at which Segment flushes events. |
-| `defaultSettings` | The default is set to `{}`.
The settings object used as fallback in case of network failure. |
-| `autoAddSegmentDestination` | The default is set to `true`.
This automatically adds the Segment Destination plugin. You can set this to `false` if you want to manually add the Segment Destination plugin. |
- | `apiHost` | The default is set to `api.segment.io/v1`.
This sets a default API Host to which Segment sends events. |
-| `cdnHost` | The default is set to `cdn-settings.segment.com/v1`.
This sets a default cdnHost to which Segment fetches settings. |
-| `analyticsErrorHandler` | The default is set to `null`.
This sets an error handler to handle errors happened in analytics. |
- | `storageProvider` | The default is set to `DefaultStorageProvider`.
This sets how you want your data to be stored. `DefaultStorageProvider` is used by default which stores data to local storage. `InMemoryStorageProvider` is also provided in the library. You can also write your own storage solution by implementing `IStorageProvider` and `IStorage`. |
-| `httpClientProvider` | The default is set to `DefaultHTTPClientProvider`.
This sets a http client provider for analytics use to do network activities. The default provider uses System.Net.Http for network activities. |
-| `flushPolicies` | The default is set to `null`.
This sets custom flush policies to tell analytics when and how to flush. By default, it converts `flushAt` and `flushInterval` to `CountFlushPolicy` and `FrequencyFlushPolicy`. If a value is given, it overwrites `flushAt` and `flushInterval`. |
+
+
+Option Name | Description
+----------------------------|---------------
+`writeKey` *required* | This is your Segment write key.
+`flushAt` | The default is set to `20`.
The count of events at which Segment flushes events.
+`flushInterval` | The default is set to `30` (seconds).
The interval in seconds at which Segment flushes events.
+`defaultSettings` | The default is set to `{}`.
The settings object used as fallback in case of network failure.
+`autoAddSegmentDestination` | The default is set to `true`.
This automatically adds the Segment Destination plugin. You can set this to `false` if you want to manually add the Segment Destination plugin.
+`apiHost` | The default is set to `api.segment.io/v1`.
This sets a default API Host to which Segment sends events.
+`cdnHost` | The default is set to `cdn-settings.segment.com/v1`.
This sets a default cdnHost to which Segment fetches settings.
+`analyticsErrorHandler` | The default is set to `null`.
This sets an error handler to handle errors happened in analytics.
+`storageProvider` | The default is set to `DefaultStorageProvider`.
This sets how you want your data to be stored. `DefaultStorageProvider` is used by default which stores data to local storage. `InMemoryStorageProvider` is also provided in the library. You can also write your own storage solution by implementing `IStorageProvider` and `IStorage`.
+`httpClientProvider` | The default is set to `DefaultHTTPClientProvider`.
This sets a http client provider for analytics use to do network activities. The default provider uses System.Net.Http for network activities.
+`flushPolicies` | The default is set to `null`.
This sets custom flush policies to tell analytics when and how to flush. By default, it converts `flushAt` and `flushInterval` to `CountFlushPolicy` and `FrequencyFlushPolicy`. If a value is given, it overwrites `flushAt` and `flushInterval`.
+`eventPipelineProvider` | The default is `EventPipelineProvider`.
This sets a custom event pipeline to define how Analytics handles events. The default `EventPipelineProvider` processes events asynchronously. Use `SyncEventPipelineProvider` to make manual flush operations synchronous.
## Tracking Methods
@@ -329,6 +341,21 @@ The `reset` method clears the SDK’s internal stores for the current user and g
analytics.Reset()
```
+## Enrichment Closure
+To modify the properties of an event, you can either write an enrichment plugin that applies changes to all events, or pass an enrichment closure to the analytics call to apply changes to a specific event.
+
+```c#
+ analytics.Track("MyEvent", properties, @event =>
+ {
+ if (@event is TrackEvent trackEvent)
+ {
+ // update properties of this event
+ trackEvent.UserId = "foo";
+ }
+
+ return @event;
+ });
+```
## Flush policies
To more granularly control when events are uploaded you can use `FlushPolicies`.
@@ -378,7 +405,7 @@ For example, you might want to disable flushes if you detect the user has no net
### Create your own flush policies
-You can create a custom FlushPolicy special for your application needs by implementing the `IFlushPolicy` interface. You can also extend the `FlushPolicyBase` class that already creates and handles the `shouldFlush` value reset.
+You can create a custom FlushPolicy special for your application needs by implementing the `IFlushPolicy` interface. You can also extend the `IFlushPolicy` class that already creates and handles the `shouldFlush` value reset.
A `FlushPolicy` only needs to implement two of these methods:
- `Schedule`: Executed when the flush policy is enabled and added to the client. This is a good place to start background operations, make async calls, configure things before execution
diff --git a/src/connections/sources/catalog/libraries/server/csharp/migration-guide.md b/src/connections/sources/catalog/libraries/server/csharp/migration-guide.md
index c0ec9d2887..31e68bc75b 100644
--- a/src/connections/sources/catalog/libraries/server/csharp/migration-guide.md
+++ b/src/connections/sources/catalog/libraries/server/csharp/migration-guide.md
@@ -49,7 +49,16 @@ You can update to Analytics-CSharp in 3 steps:
using Segment.Analytics.Compat;
```
-3. *(Optional)* Update calls that resets the anonymous ID.
+3. *(Required for .NET users)* Add `UserIdPlugin` to Analytics.
+
+ Analytics-CSharp, by default, attaches an internal state `userId` to each event. The `UserIdPlugin`, instead, attaches the `userId` provided in analytics calls directly to the event.
+
+
After:
+ ```c#
+ analytics.Add(new UserIdPlugin());
+ ```
+
+4. *(Optional)* Update calls that resets the anonymous ID.
The old SDK requires you to provide the anonymous ID. The new SDK generates an Anonymous ID for you if you never call `analytics.Identify`. If you call `Identify` and want to go back to anonymous, the new SDK provides a `Reset` function to achieve that.
@@ -76,6 +85,104 @@ Change your development settings if you would like to make analytics run synchro
After:
```c#
var configuration = new Configuration("YOUR WRITE KEY",
- useSynchronizeDispatcher: true);
+ useSynchronizeDispatcher: true,
+ // provide a defaultSettings in case the SDK failed to fetch settings in test environment
+ defaultSettings: new Settings
+ {
+ Integrations = new JsonObject
+ {
+ ["Segment.io"] = new JsonObject
+ {
+ ["apiKey"] = "YOUR WRITE KEY"
+ }
+ }
+ }
+ );
var analytics = new Analytics(configuration);
```
+
+## FAQs
+
+### Should I make Analytics a singleton or scoped in .NET?
+
+The SDK supports both, but be aware of the implications of choosing one over the other:
+
+| Feature | Singleton | Scoped |
+|--|--|--|
+| **Fetch Settings** | Settings are fetched only once at application startup. | Settings are fetched on every request. |
+| **Flush** | Supports both async and sync flush. | Requires sync flush. Should flush per event or on page redirect/close to avoid data loss. |
+| **Internal State** | The internal state (`userId`, `anonId`, etc.) is shared across sessions and cannot be used. (*This is an overhead we are working to minimize*.) | The internal state is safe to use since a new instance is created per request. |
+| **UserId for Events** | Requires adding `UserIdPlugin` and calling analytics APIs with `userId` to associate the correct `userId` with events. | No need for `UserIdPlugin` or passing `userId` in API calls. Instead, call `analytics.Identify()` to update the internal state with the `userId`. Successive events are auto-stamped with that `userId`. |
+| **Storage** | Supports both local storage and in-memory storage. | Requires in-memory storage. (*Support for local storage is in progress*.) |
+
+
+In a nutshell, to register Analytics as singleton:
+
+```c#
+var configuration = new Configuration(
+ writeKey: "YOUR_WRITE_KEY",
+ // Use in-memory storage to keep the SDK stateless.
+ // The default storage also works if you want to persist events.
+ storageProvider: new InMemoryStorageProvider(),
+ // Use a synchronous pipeline to make manual flush operations synchronized.
+ eventPipelineProvider: new SyncEventPipelineProvider()
+);
+
+var analytics = new Analytics(configuration);
+
+// Add UserIdPlugin to associate events with the provided userId.
+analytics.Add(new UserIdPlugin());
+
+// Call analytics APIs with a userId. The UserIdPlugin will update the event with the provided userId.
+analytics.Track("user123", "foo", properties);
+
+// This is a blocking call due to SyncEventPipelineProvider.
+// Use the default EventPipelineProvider for asynchronous flush.
+analytics.Flush();
+
+// Register Analytics as a singleton.
+```
+
+To register Analytics as scoped:
+
+```c#
+var configuration = new Configuration(
+ writeKey: "YOUR_WRITE_KEY",
+ // Requires in-memory storage.
+ storageProvider: new InMemoryStorageProvider(),
+ // Flush per event to prevent data loss in case of a page close.
+ // Alternatively, manually flush on page close.
+ flushAt: 1,
+ // Requires a synchronous flush.
+ eventPipelineProvider: new SyncEventPipelineProvider()
+);
+
+var analytics = new Analytics(configuration);
+
+// Update the internal state with a userId.
+analytics.Identify("user123");
+
+// Subsequent events are auto-stamped with the userId from the internal state.
+analytics.Track("foo", properties);
+
+// This is a blocking call due to SyncEventPipelineProvider.
+analytics.Flush();
+
+// Register Analytics as scoped.
+```
+
+### Which JSON library does this SDK use?
+
+The SDK supports `.netstandard 1.3` and `.netstandard 2.0` and automatically selects the internal JSON library based on the target framework:
+
+* In `.netstandard 1.3`, the SDK uses `Newtonsoft Json.NET`
+* In `.netstandard 2.0`, the SDK uses `System.Text.Json`
+
+Be ware that both Analytics.NET and Analytics.Xamarin use `Newtonsoft Json.NET`. If you encounter issues where JSON dictionary values are turned into empty arrays, it is likely that:
+
+1. You are targeting `.netstandard 2.0`.
+2. Your properties use`Newtonsoft Json.NET` objects or arrays.
+
+To resolve this, you can:
+* Option 1: Target `.netstandard 1.3`
+* Option 2: Upgrade your JSON library to `System.Text.Json`
\ No newline at end of file
diff --git a/src/connections/sources/catalog/libraries/server/net/analytics-net.md b/src/connections/sources/catalog/libraries/server/net/analytics-net.md
new file mode 100644
index 0000000000..92d90c88c3
--- /dev/null
+++ b/src/connections/sources/catalog/libraries/server/net/analytics-net.md
@@ -0,0 +1,539 @@
+---
+title: Analytics for .NET
+repo: analytics.NET
+id: 8HWbgPTt3k
+hidden: true
+support_type: community
+---
+
+> warning "End-of-Support for Analytics.NET in March 2026"
+> End-of-support (EoS) for the Analytics.NET SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-CSharp](/docs/connections/sources/catalog/libraries/server/csharp/) SDK. If you'd like to migrate to Analytics-CSharp, see the [migration guide](/docs/connections/sources/catalog/libraries/server/csharp/migration-guide/).
+
+Segment's .NET library is the best way to integrate analytics into your .NET application or website. It lets you record analytics data from your ASP.NET, C#, F#, and Visual Basic code. The library issues requests that hit Segment's servers, and then Segment routes your data to any analytics service you enable on our destinations page. This library is open-source, so you can [check it out on GitHub](https://github.com/segmentio/Analytics.NET).
+
+All of Segment's server-side libraries are built for high-performance, so you can use them in your web server controller code. This library uses an internal queue to make Identify and Track calls non-blocking and fast. It also batches messages and flushes asynchronously to Segment's servers.
+
+## Getting Started
+
+### Client-side vs Server-side
+
+The best analytics installation combines both client-side and server-side tracking. A client-side analytics.js installation allows you to install A/B testing, heat mapping, session recording, and ad optimization tools. A server-side .NET installation allows you to accurately track events that aren't available client-side, such as payments. For best practices, [check out Segment's guide to client-side vs. server-side](/docs/guides/how-to-guides/collect-on-client-or-server/).
+
+
+### Step 1: Add Analytics.js to your ASP.NET Master Page
+
+1. In your Segment workspace, click Catalog, and search for "Net".
+2. Click the .Net tile, then click **Add Source**.
+3. Give the new source a label (which you'll use to identify it later), and apply any labels such as `prod` or `test`.
+
+You will then be presented with an [Analytics.js snippet](/docs/connections/sources/catalog/libraries/website/javascript/quickstart/#step-2-copy-the-segment-snippet).
+
+Copy the snippet directly into your ASP.NET [Site.master](https://github.com/segmentio/asp.net-example/blob/master/Site.master#L18-L21).
+
+That snippet will load `analytics.js` onto the page _asynchronously_, so it won't affect your page load speed.
+
+As soon as that snippet is running on your site, you can start turning on any destinations on your Segment destinations page. In fact, if you reload, you can start seeing Page calls in the [source debugger](/docs/connections/sources/debugger/).
+
+For more in depth `analytics.js` information, check out Segment's [analytics.js docs](/docs/connections/sources/catalog/libraries/website/javascript/).
+
+Lots of analytics and marketing tools want to know more information about your users, and what they're doing on your app. In the next section, Segment installs the .NET library and start sending an event every time a new user registers on your site.
+
+### Step 2: Install Segment's .NET Library
+
+Your website will use Segment's .NET library to Identify and Track users. You can use [NuGet](http://docs.nuget.org/docs/start-here/using-the-package-manager-console) to install the library.
+
+```bash
+Install-Package Analytics -Version
+```
+
+**Note:** the Analytics package has a dependency on [Newton.JSON](https://www.newtonsoft.com/json).
+
+You can also accomplish the same thing in the Visual Studio `Tools` menu, select `Library Package Manager` and then click `Package Manager Console`.
+
+Now the .NET library needs to know which Segment project you want to send data to. You can initialize the library with your Segment source's `writeKey` in the [Global.asax file](https://github.com/segmentio/asp.net-example/blob/master/Global.asax#L14). Then you can use the `Analytics` singleton in any controller you want:
+
+```csharp
+<%@ Application Language="C#" %>
+<%@ Import Namespace="ASP.NET_Example" %>
+<%@ Import Namespace="System.Web.Optimization" %>
+<%@ Import Namespace="System.Web.Routing" %>
+<%@ Import Namespace="Segment" %>
+
+
+```
+
+```csharp
+using Segment;
+
+// initialize the project #{source.owner.login}/#{source.slug}...
+Analytics.Initialize("YOUR_WRITE_KEY");
+```
+
+You only need to initialize once at the start of your program. You can then keep using the `Analytics` singleton anywhere in your code.
+
+The default initialization settings are production-ready and queue messages on another thread before sending any requests. In development you might want to use [development settings](/docs/connections/sources/catalog/libraries/server/net/#development-settings).
+
+### Regional configuration
+{% include content/regional-config.md %}
+
+## Identify
+
+> success ""
+> For any of the different methods described on this page, you can replace the properties and traits in the code samples with variables that represent the data collected.
+
+If you're not familiar with the Segment Specs, take a look to understand what the [Identify](/docs/connections/spec/identify/) method does.
+
+The Identify call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `Traits` _Traits, optional_ |
+ A dictionary of traits you know about the user. Things like: email , name or friends . |
+
+
+ `options` _Options, optional_ |
+ A custom object which allows you to set a timestamp, an anonymous cookie id, or enable specific destinations. |
+
+
+
+An example call would look like:
+
+```csharp
+Analytics.Client.Identify("019mr8mf4r", new Traits() {
+ { "name", "#{ user.name }" },
+ { "email", "#{ user.email }" },
+ { "friends", 29 }
+});
+```
+
+## Track
+
+If you're not familiar with the Segment Spec, take a look to understand what the [Track](/docs/connections/spec/track/) method does.
+
+The Track call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `event` _String_ |
+ The name of the event you're tracking. Segment recommends human-readable names like Song Played or Status Updated. |
+
+
+ `properties` _Properties, optional_ |
+ A dictionary of properties for the event. If the event was Product Added to cart, it might have properties like price or product . |
+
+
+ `options` _Options, optional_ |
+ A custom object which allows you to set a timestamp, an anonymous cookie id, or enable specific destinations. |
+
+
+
+An example call would look like:
+
+```csharp
+Analytics.Client.Track("019mr8mf4r", "Item Purchased", new Properties() {
+ { "revenue", 39.95 },
+ { "shipping", "2-day" }
+});
+```
+
+## Page
+
+If you're not familiar with the Segment Specs, take a look to understand what the [Page](/docs/connections/spec/page/) method does.
+
+The Page call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `name` _String_ |
+ The webpage name you're tracking. Segment recommends human-readable names like Login or Register. |
+
+
+ `category` _String_ |
+ The webpage category. If you're making a news app, the category could be Sports. |
+
+
+ `properties` _Properties, optional_ |
+ A dictionary of properties for the webpage visit. If the event was Login, it might have properties like path or title . |
+
+
+ `options` _Options, optional_ |
+ A custom object which allows you to set a timestamp, an anonymous cookie id, or enable specific destinations. |
+
+
+
+Example Page call:
+
+```csharp
+Analytics.Client.Page("019mr8mf4r", "Login", new Properties() {
+ { "path", "/login" },
+ { "title", "Initech Login" }
+});
+```
+
+## Screen
+
+If you're not familiar with the Segment Specs, take a look to understand what the [Screen](/docs/connections/spec/screen/) method does.
+
+The Screen call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `name` _String_ |
+ The screen name you're tracking. Segment recommends human-readable names like Login or Register. |
+
+
+ `category` _String_ |
+ The screen category. If you're making a news app, the category could be Sports. |
+
+
+ `properties` _Properties, optional_ |
+ A dictionary of properties for the screen view. If the screen is Restaurant Reviews, it might have properties like reviewCount or restaurantName . |
+
+
+ `options` _Options, optional_ |
+ A custom object which allows you to set a timestamp, an anonymous cookie id, or enable specific destinations. |
+
+
+
+Example Screen call:
+
+```csharp
+Analytics.Client.Screen("019mr8mf4r", "Register", new Properties() {
+ { "type", "facebook" }
+});
+```
+
+## Group
+
+If you're not familiar with the Segment Specs, take a look to understand what the [Group](/docs/connections/spec/group/) method does.
+
+The Group call has the following fields:
+
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+ `groupId` _String_ |
+ The ID for this group in your database. |
+
+
+ `traits` _Traits, optional_ |
+ A dictionary of traits you know about the group. Things like: ma,e or website . |
+
+
+ `options` _Options, optional_ |
+ A custom object which allows you to set a timestamp, an anonymous cookie id, or enable specific destinations. |
+
+
+
+Example Group call:
+
+```csharp
+Analytics.Client.Group("userId", "groupId", new Traits() {
+ { "name", "Initech, Inc." },
+ { "website", "http://www.example.com" }
+});
+```
+
+## Alias
+
+If you're not familiar with the Segment Specs, take a look to understand what the [Alias](/docs/connections/spec/alias/) method does.
+
+The Alias call has the following fields:
+
+
+
+ `previousId` _String_ |
+ The previousId for this user. |
+
+
+ `userId` _String_ |
+ The ID for this user in your database. |
+
+
+
+Example Alias call:
+
+```csharp
+Analytics.Client.Alias("previousId", "userId")
+```
+
+Here's a full example of how you might use the Alias call:
+
+```csharp
+// the anonymous user does actions ...
+Analytics.Client.Track("anonymous_user", "Anonymous Event");
+// the anonymous user signs up and is aliased
+Analytics.Client.Alias("anonymous_user", "identified@example.com");
+// the identified user is identified
+Analytics.Client.Identify("identified@example.com", new Traits() { plan: "Free" });
+// the identified user does actions ...
+Analytics.Client.Track("identified@example.com", "Identified Action");
+```
+
+---
+
+## Development Settings
+
+You can use this initialization during development while testing the library. `SetAsync(false)` will make sure the library makes a request to Segment's servers every time it's called.
+
+```csharp
+Analytics.Initialize("YOUR_WRITE_KEY", new Config().SetAsync(false));
+```
+
+Don't forget to set async back to `true` for production, so that you can advantage of asynchronous flushing on a different thread.
+
+
+## Historical Import
+
+You can import historical data by adding the `timestamp` argument to any of your method calls. This can be helpful if you've just switched to Segment.
+
+Historical imports can only be done into destinations that can accept historical timestamped data. Most analytics tools like Mixpanel, Amplitude, Kissmetrics, etc. can handle that type of data just fine. One common destination that does not accept historical data is Google Analytics since their API cannot accept historical data.
+
+**Note:** If you're tracking things that are happening right now, leave out the `timestamp` and Segment's servers will timestamp the requests for you.
+
+```csharp
+Analytics.Client.Track("sadi89e2jd", "Workout Logged", new Properties() {
+ { "distance", "10 miles" },
+ { "city", "Boston" },
+}, new Options()
+ .SetTimestamp(new DateTime(2010, 1, 18))
+);
+```
+
+## Selecting Destinations
+
+The Alias, Group, Identify, Page, and Track calls can all be passed an object of `options` that lets you turn certain destinations on or off. By default all destinations are enabled.
+
+You can specify which analytics destinations you want each action to go to.
+
+```csharp
+Analytics.Client.Identify("hj2kf92ds212", new Traits() {
+ { "email", "tom@example.com" },
+ { "name", "Tom Smykowski" },
+}, new Options()
+ .SetIntegration("all", false)
+ .SetIntegration("Kissmetrics", true)
+);
+```
+
+In this case, you're specifying that you want this identify to only go to Kissmetrics. `"all", false` says that no destination should be enabled unless otherwise specified, and `{ "Kissmetrics", true }` turns on Kissmetrics.
+
+Destination flags are **case sensitive** and match [the destination's name in the docs](/docs/connections/destinations/) (for example, "AdLearn Open Platform", "awe.sm", or "MailChimp").
+
+**Note:**
+
+- Business Tier users can filter Track calls right from the Segment UI on your source schema page. Segment recommends using the UI if possible since it's a much simpler way of managing your filters and can be updated with no code changes on your side.
+
+- If you are on a grandfathered plan, events sent server-side that are filtered through the Segment dashboard still count towards your API usage.
+
+## Context
+
+If you're running a web server, you might want to send [context variables](https://segment.com/docs/connections/spec/common/#context) such as `userAgent` or `ip` with your `page` or `screen` calls. You can do so by setting the `Context` in the `Options` object.
+
+```csharp
+Analytics.Client.Page("019mr8mf4r", "Login", new Properties() {
+ { "path", "/login" },
+ { "title", "Initech Login" }
+}, new Options()
+ .SetContext (new Context () {
+ { "userAgent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"},
+ { "ip", "12.212.12.49" },
+ { "language", "en-us" },
+ { "Google Analytics", new Dict() {
+ { "clientId", User.ClientId }
+ }
+ }
+}));
+```
+
+## Anonymous ID
+
+All libraries require all messages to have either a `userId` or `anonymousId`. If you would like to use an `anonymousId`, which you should for anonymous users, you can pass it in with options.
+
+```csharp
+Analytics.Client.Page(null, "Login", new Properties(), new Options()
+ .SetAnonymousId("some-id"));
+```
+
+## Nested Properties
+
+You can provide nested properties, like so:
+
+```csharp
+Analytics.Client.Identify("hj2kf92ds212", new Traits() {
+ { "email", "tom@example.com" },
+ { "name", "Tom Smykowski" },
+ { "address", new Dict() {
+ { "street", "123 Fake Street" },
+ { "city", "Boston" }
+ }}
+});
+```
+
+
+## Batching
+
+Segment's libraries are built to support high performance environments. That means it is safe to use Analytics.NET on a web server that's serving hundreds of requests per second.
+
+By default (in async mode), this library starts a single separate thread on initialization, and flushes all messages on that thread. That means every method you call **does not** result in an HTTP request, but is queued in memory instead. Messages are flushed in batch in the background, which allows for much faster operation.
+
+There is a maximum of `500KB` per batch request and `32KB` per call.
+
+{% include content/tracking-api-limit.md %}
+
+
+
+### How do I turn batching off?
+
+Sometimes you might not want batching (for example, when debugging, or in short-lived programs). You can turn off batching by setting the `async` argument to `false`, and your requests will always be sent in a blocking manner.
+
+```csharp
+Analytics.Initialize("YOUR_WRITE_KEY", new Config().SetAsync(false));
+```
+
+
+### What happens if there are just too many messages?
+
+If the module detects that it can't flush faster than it's receiving messages, it'll simply stop accepting messages. This means your program will never crash because of a backing up analytics queue. The maximum size of the queue defaults to `10000`, and here's how you can change it:
+
+```csharp
+Analytics.Initialize("YOUR_WRITE_KEY", new Config().SetMaxQueueSize(10000));
+```
+
+
+### How do I flush right now?!
+
+You can also flush on demand. For example, at the end of your program, you'll want to flush to make sure there's nothing left in the queue. Just call the `Flush` method:
+
+```csharp
+Analytics.Client.Flush();
+```
+
+This method will block until all messages are flushed.
+
+
+### How do I dispose of the flushing thread at the end of my program?
+
+The Analytics client implements the `IDisposable` interface, and will turn off its flushing thread when you call `Dispose`.
+
+```csharp
+Analytics.Client.Dispose();
+```
+
+
+## Configuration
+
+If you hate defaults, than you'll love how configurable the Analytics.NET is. Check out these gizmos:
+
+```csharp
+Analytics.Initialize("YOUR_WRITE_KEY", new Config()
+ .SetAsync(true)
+ .SetTimeout(TimeSpan.FromSeconds(10))
+ .SetHost("https://events.eu1.segmentapis.com")
+ .SetMaxQueueSize(10000));));
+```
+
+
+
+ `async` _boolean_ |
+ true to flush on a different thread, false to flush immediately on the same thread. |
+
+
+ `timeout` _TimeSpan_ |
+ The amount of time to wait before calling the HTTP request a timeout. |
+
+
+ `host` _string_ |
+ The API host server address - can be set with the EU endpoint "https://events.eu1.segmentapis.com" instead of default server "https://api.segment.io" |
+
+
+ `maxQueueSize` _int_ |
+ The maximum number of messages to allow into the queue before no new message are accepted. |
+
+
+
+
+## Multiple Clients
+
+Different parts of your app may require different Segment. In that case, you can initialize different `Analytics.Client` instances instead of using the singleton.
+
+```csharp
+Client client = new Client("YOUR_WRITE_KEY", new Config()
+ .SetAsync(false)
+ .SetTimeout(TimeSpan.FromSeconds(10))
+ .SetMaxQueueSize(10000));
+
+client.Track(...);
+```
+
+
+## Troubleshooting
+
+{% include content/troubleshooting-intro.md %}
+{% include content/troubleshooting-server-debugger.md %}
+{% include content/server-side-troubleshooting.md %}
+
+### Logging
+
+`Analytics.NET` has detailed logging, which you can enable by attaching your own handler, like so:
+
+```csharp
+using Segment;
+
+Logger.Handlers += LoggingHandler;
+
+static void LoggingHandler(Logger.Level level, string message, IDictionary args)
+{
+ if (args != null)
+ {
+ foreach (string key in args.Keys)
+ {
+ message += String.Format(" {0}: {1},", "" + key, "" + args[key]);
+ }
+ }
+ Console.WriteLine(String.Format("[Analytics] [{0}] {1}", level, message));
+}
+```
+
+Note: the logger requires a minimum version of .NET Core 2.1.
+
+### Json.NET
+
+`Analytics.NET` uses [Json.NET](http://json.codeplex.com/) to serialize JSON payloads. If you have an older version of `Json.NET` in your build path, `Analytics.NET` could create incomplete JSON payloads, which can cause strange API responses. If you're seeing issues, try updating `Json.NET`.
+
+
+### Mono
+
+`Analytics.NET` has been tested and works in Mono.
+
+### .NET Core
+`Analytics.NET` has been tested and works with .NET Core 3.1 and 3.4.2 beta.
diff --git a/src/connections/sources/catalog/libraries/server/net/index.md b/src/connections/sources/catalog/libraries/server/net/index.md
index bead3e9e5a..53a6d5eee3 100644
--- a/src/connections/sources/catalog/libraries/server/net/index.md
+++ b/src/connections/sources/catalog/libraries/server/net/index.md
@@ -3,17 +3,18 @@ title: Analytics for .NET
repo: analytics.NET
id: 8HWbgPTt3k
support_type: community
-tags:
- - C#
- - C-sharp
+custom_ranking:
+ heading: 0
+ position: 99999
---
+
+> warning "End-of-Support for Analytics.NET in March 2026"
+> End-of-support (EoS) for the Analytics.NET SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-CSharp](/docs/connections/sources/catalog/libraries/server/csharp/) SDK. If you'd like to migrate to Analytics-CSharp, see the [migration guide](/docs/connections/sources/catalog/libraries/server/csharp/migration-guide/).
+
Segment's .NET library is the best way to integrate analytics into your .NET application or website. It lets you record analytics data from your ASP.NET, C#, F#, and Visual Basic code. The library issues requests that hit Segment's servers, and then Segment routes your data to any analytics service you enable on our destinations page. This library is open-source, so you can [check it out on GitHub](https://github.com/segmentio/Analytics.NET).
All of Segment's server-side libraries are built for high-performance, so you can use them in your web server controller code. This library uses an internal queue to make Identify and Track calls non-blocking and fast. It also batches messages and flushes asynchronously to Segment's servers.
-> info "Analytics-CSharp (C#)"
-> With [Analytics-CSharp](/docs/connections/sources/catalog/libraries/server/csharp/), you can add Segment analytics to your C# based app which includes .NET. If you'd like to migrate to use Analytics-CSharp, see the [Analytics-CSharp migration guide](/docs/connections/sources/catalog/libraries/server/csharp/migration-guide/).
-
## Getting Started
### Client-side vs Server-side
diff --git a/src/connections/sources/catalog/libraries/server/net/quickstart.md b/src/connections/sources/catalog/libraries/server/net/quickstart.md
index b90cc059c2..937f737bb9 100644
--- a/src/connections/sources/catalog/libraries/server/net/quickstart.md
+++ b/src/connections/sources/catalog/libraries/server/net/quickstart.md
@@ -1,7 +1,13 @@
---
title: 'Quickstart: ASP.NET'
+custom_ranking:
+ heading: 0
+ position: 99999
---
+> warning "End-of-Support for Analytics.NET in March 2026"
+> End-of-support for the Analytics.NET SDK is scheduled for March 2026. Segment's future development efforts concentrate on the new [Analytics-CSharp](/docs/connections/sources/catalog/libraries/server/csharp/) SDK. If you'd like to migrate to Analytics-CSharp, see the [migration guide](/docs/connections/sources/catalog/libraries/server/csharp/migration-guide/).
+
This tutorial will help you start sending analytics data from your ASP.NET app to Segment and any of our destinations, using our .NET and Analytics.js library. As soon as you're set up you'll be able to turn on analytics tools, ad conversion pixels, email tools and lots of other destinations with the flip of a switch!
If you want to dive deeper at any point, check out the [.NET library reference](/docs/connections/sources/catalog/libraries/server/net).
diff --git a/src/connections/sources/catalog/libraries/website/javascript/index.md b/src/connections/sources/catalog/libraries/website/javascript/index.md
index 716aa47042..0c0579d06f 100644
--- a/src/connections/sources/catalog/libraries/website/javascript/index.md
+++ b/src/connections/sources/catalog/libraries/website/javascript/index.md
@@ -576,12 +576,24 @@ analytics.load('writekey', { disable: (cdnSettings) => true })
## Retries
-When enabled, Analytics.js automatically retries network and server errors. With persistent retries, Analytics.js can:
+Analytics.js automatically retries sending events when there are network or server errors. This helps reduce data loss in cases where the user is offline or the Segment API is temporarily unavailable.
-- **Support offline tracking**. Analytics.js queues your events and delivers them when the user comes back online.
-- **Better handle network issues**. When your application can't connect to the Segment API, Segment continues to store the events on the browser to prevent data loss.
+When retries are enabled, Analytics.js can:
-Analytics.js stores events in `localStorage` and falls back to in-memory storage when `localStorage` is unavailable. It retries up to 10 times with an incrementally increasing back-off time between each retry. Analytics.js queues up to 100 events at a time to avoid using too much of the device's local storage. See the [destination Retries documentation](/docs/connections/destinations/#retries) to learn more.
+- **Track users offline.** Events get stored locally and sent once the user comes back online.
+- **Handle intermittent network issues.** Events are queued and retried until they’re successfully delivered.
+
+Here's how retries work:
+
+- Events are stored in `localStorage` when available, with an in-memory fallback.
+- Analytics.js retries up to 10 times, with increasing backoff intervals between attempts.
+- A maximum of 100 events can be queued to avoid using too much local storage.
+
+For more information, see the [destination retries documentation](/docs/connections/destinations/#retries).
+
+### About the `_metadata` field
+
+Each time an event is retried, Segment recalculates its `_metadata` field. This field helps indicate whether the event was sent to a device-mode destination. If you change your destination settings between retries, the updated `_metadata` may not reflect the original attempt, which could affect downstream debugging or delivery visibility.
## Delivery strategy configuration
diff --git a/src/connections/sources/index.md b/src/connections/sources/index.md
index 9e461d4da3..e49f710b92 100644
--- a/src/connections/sources/index.md
+++ b/src/connections/sources/index.md
@@ -123,13 +123,11 @@ Each of these tabs displays an event count, which is the total number of events
Segment's Mobile SDKs are the best way to simplify your iOS, Android, and Xamarin app tracking. Try them over server-side sources as the default installation for any mobile app.
- [AMP](/docs/connections/sources/catalog/libraries/mobile/amp)
-- [Android](/docs/connections/sources/catalog/libraries/mobile/android)
-- [Android Wear](/docs/connections/sources/catalog/libraries/mobile/android/wear)
-- [iOS](/docs/connections/sources/catalog/libraries/mobile/ios)
-- [Kotlin](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/)
+- [Android (Kotlin)](/docs/connections/sources/catalog/libraries/mobile/kotlin-android/)
- [React Native](/docs/connections/sources/catalog/libraries/mobile/react-native)
-- [Swift](/docs/connections/sources/catalog/libraries/mobile/swift/)
-- [Xamarin](/docs/connections/sources/catalog/libraries/mobile/xamarin)
+- [iOS (Swift)](/docs/connections/sources/catalog/libraries/mobile/swift/)
+- [Xamarin](/docs/connections/sources/catalog/libraries/server/csharp)
+- [Unity](/docs/connections/sources/catalog/libraries/server/csharp/)
> info "Analytics-Flutter library"
> The Analytics-Flutter library is currently only available in pilot phase and is governed by Segment's [First Access and Beta Preview Terms](https://www.twilio.com/en-us/legal/tos){:target="_blank"}. If you'd like to try out this library, access the [Analytics-Flutter GitHub repository](https://github.com/segmentio/analytics_flutter){:target="_blank"}.
@@ -146,7 +144,7 @@ Segment's server-side sources let you send analytics data directly from your ser
- [PHP](/docs/connections/sources/catalog/libraries/server/php/)
- [Python](/docs/connections/sources/catalog/libraries/server/python/)
- [Ruby](/docs/connections/sources/catalog/libraries/server/ruby/)
-- [.NET](/docs/connections/sources/catalog/libraries/server/net/)
+- [.NET](/docs/connections/sources/catalog/libraries/server/csharp/)
> info "Cloud-mode tracking"
> Server-side data management is when tag sends data to the Segment servers, which then passes that data to the destination system.
diff --git a/src/engage/audiences/index.md b/src/engage/audiences/index.md
index 800bf35006..df4d3590d7 100644
--- a/src/engage/audiences/index.md
+++ b/src/engage/audiences/index.md
@@ -104,8 +104,31 @@ See [Account-level Audiences](/docs/engage/audiences/account-audiences) for more
You can send audiences and computed traits to third-party services in Segment's [Destinations catalog](/docs/connections/destinations/).
+Segment's Connections pipeline first collects and sends events from your Source to your Destination. Built on top of Connections, Engage then uses the same Source events to let you create Audiences and computed traits within Segment. You can then send the Audience or computed trait you've built to your Destination(s).
+
+> info ""
+> Because Engage only sends Audiences and computed traits to Destinations, it doesn't replace a standard event pipeline. Connect a Source directly to a Destination if you want the Destination to receive all events that Segment gathers.
+
+### Connect your Audience to a Destination
+
+> warning "Audience Keys"
+> Avoid using the same Audience key twice, even if you've deleted the original Audience.
+
+Once you've previewed your Audience, you can choose to connect it to a Destination or keep the Audience in Segment and export it as a CSV file download.
+
+If you already have Destinations set up in Segment, you can import the configuration from one of your existing sources to Engage. You can only connect one Destination configuration per Destination type.
+
+When you create an Audience, Segment starts syncing your Audience to the Destinations you selected. Audiences are either sent to Destinations as a boolean user-property or a user-list, depending on what the Destination supports. Read more about [supported Destinations](/docs/engage/using-engage-data/#compatible-engage-destinations) in the Engage documentation.
+
+For account-level audiences, you can send either a [Group](/docs/connections/spec/group) call and/or [Identify](/docs/connections/spec/identify) call. Group calls will send one event per account, whereas Identify calls will send an Identify call for each user in the account. This means that even if a user hasn't performed an event, Segment will still set the account-level computed trait on that user.
+
+Because most marketing tools are still based at the user level, it is often important to map this account-level trait onto each user within an account. See [Account-level Audiences](/docs/engage/audiences/account-audiences) for more information.
+
For step-by-step instructions on how to connect an audience to a destination, see [Send Audience Data to Destinations](/docs/engage/audiences/send-audience-data/).
+> info "Historical data behavior for new destinations"
+> When you connect a new destination to an existing audience, Engage backfills historical data if the **Include Historical Data** option is enabled in the audience settings. If this setting is disabled, only new data gets sent. To sync all historical data manually, [contact Support](mailto:friends@segment.com) to request a resync.
+
## Understanding compute times
Because a number of factors (like system load, backfills, or user bases) determine the complexity of an Audience, some compute times take longer than others.
diff --git a/src/engage/campaigns/broadcasts.md b/src/engage/campaigns/broadcasts.md
index 489a66fda4..55365e2622 100644
--- a/src/engage/campaigns/broadcasts.md
+++ b/src/engage/campaigns/broadcasts.md
@@ -2,19 +2,8 @@
title: Broadcasts
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. Segment recommends exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers will continue to have access to and support for Engage Premier until Segment announces and end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Broadcasts are one-time email or SMS campaigns that you can send with Twilio Engage. Use broadcasts for single, one-off occasions like the following:
diff --git a/src/engage/campaigns/email-campaigns.md b/src/engage/campaigns/email-campaigns.md
index 82c9f3515a..6cdf0bf4fa 100644
--- a/src/engage/campaigns/email-campaigns.md
+++ b/src/engage/campaigns/email-campaigns.md
@@ -2,19 +2,8 @@
title: Email Campaigns
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. Segment recommends exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
With Twilio Engage, you can send email and SMS campaigns to users who have opted in to receive your marketing materials. On this page, you’ll learn how to create and send an email campaign.
diff --git a/src/engage/campaigns/index.md b/src/engage/campaigns/index.md
index e9bb32f5d5..07d7c1703a 100644
--- a/src/engage/campaigns/index.md
+++ b/src/engage/campaigns/index.md
@@ -2,19 +2,8 @@
title: Campaigns Overview
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
With Engage, you can build email and SMS marketing campaigns within Journeys.
diff --git a/src/engage/campaigns/mobile-push/index.md b/src/engage/campaigns/mobile-push/index.md
index 888283c5e3..cb1417f437 100644
--- a/src/engage/campaigns/mobile-push/index.md
+++ b/src/engage/campaigns/mobile-push/index.md
@@ -2,19 +2,8 @@
title: Mobile Push Onboarding
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
This page walks you through the process of setting up mobile push notifications using Segment, Twilio, and Firebase/Apple Developer.
diff --git a/src/engage/campaigns/mobile-push/push-campaigns.md b/src/engage/campaigns/mobile-push/push-campaigns.md
index 4842ddacf1..ccf93dba56 100644
--- a/src/engage/campaigns/mobile-push/push-campaigns.md
+++ b/src/engage/campaigns/mobile-push/push-campaigns.md
@@ -2,19 +2,8 @@
title: Mobile Push Campaigns
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
With Twilio Engage, you can send campaigns to users who have opted in to receive your marketing materials. On this page, you’ll learn how to create and send a mobile push campaign.
diff --git a/src/engage/campaigns/sms-campaigns.md b/src/engage/campaigns/sms-campaigns.md
index ec9d26f408..7dd367fa70 100644
--- a/src/engage/campaigns/sms-campaigns.md
+++ b/src/engage/campaigns/sms-campaigns.md
@@ -2,19 +2,8 @@
title: SMS Campaigns
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
With Twilio Engage, you can send email and SMS campaigns to users who have opted in to receive your marketing materials. On this page, you’ll learn how to create and send an SMS campaign.
diff --git a/src/engage/campaigns/whatsapp-campaigns.md b/src/engage/campaigns/whatsapp-campaigns.md
index 883bda8d14..51ac9cd2bd 100644
--- a/src/engage/campaigns/whatsapp-campaigns.md
+++ b/src/engage/campaigns/whatsapp-campaigns.md
@@ -2,20 +2,8 @@
title: WhatsApp Campaigns
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
-
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
## How Engage campaigns work
Twilio Engage uses Journeys to send WhatsApp, email, and SMS campaigns. With Journeys, you add conditions and steps that trigger actions like sending a WhatsApp message.
diff --git a/src/engage/content/email/editor.md b/src/engage/content/email/editor.md
index 43c7b4a56d..4d7d9f71e1 100644
--- a/src/engage/content/email/editor.md
+++ b/src/engage/content/email/editor.md
@@ -2,19 +2,8 @@
title: Drag and Drop Editor
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Use Twilio Engage to build email templates with a *what you see is what you get* (WYSIWYG) Drag and Drop Editor. Use drag and drop tools to design the template layout and include user profile traits to personalize the message for each recipient.
diff --git a/src/engage/content/email/html-editor.md b/src/engage/content/email/html-editor.md
index cb7e94ae3b..aca641e407 100644
--- a/src/engage/content/email/html-editor.md
+++ b/src/engage/content/email/html-editor.md
@@ -2,19 +2,8 @@
title: HTML Editor
beta: true
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Use the HTML Editor to design your email template with both code and visual editing capabilities. Build your email template with code, copy and paste existing code, or use the Visual Editor for a code free design experience.
diff --git a/src/engage/content/email/template.md b/src/engage/content/email/template.md
index f7baf74d1c..da8d32b446 100644
--- a/src/engage/content/email/template.md
+++ b/src/engage/content/email/template.md
@@ -2,19 +2,8 @@
title: Email Template
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Use Twilio Engage to build personalized email templates to store and use throughout marketing campaigns.
diff --git a/src/engage/content/mobile-push.md b/src/engage/content/mobile-push.md
index 3d2efa2e51..51ccb881b5 100644
--- a/src/engage/content/mobile-push.md
+++ b/src/engage/content/mobile-push.md
@@ -2,19 +2,8 @@
title: Mobile Push Template
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. Segment recommends exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Use Twilio Engage to build mobile push templates to include throughout your marketing campaigns.
diff --git a/src/engage/content/organization.md b/src/engage/content/organization.md
index 33f6cb041b..0170c2efdc 100644
--- a/src/engage/content/organization.md
+++ b/src/engage/content/organization.md
@@ -3,19 +3,8 @@ title: Organizing Your Templates
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
To add structure to your marketing content, you can organize templates into folders and duplicate them within your Segment space.
diff --git a/src/engage/content/sms/template.md b/src/engage/content/sms/template.md
index 506d509976..fb5b0c52c2 100644
--- a/src/engage/content/sms/template.md
+++ b/src/engage/content/sms/template.md
@@ -2,19 +2,8 @@
title: SMS Template
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Use Twilio Engage to build SMS message templates to include throughout your marketing campaigns.
diff --git a/src/engage/content/whatsapp.md b/src/engage/content/whatsapp.md
index b26ad504e5..f76212869f 100644
--- a/src/engage/content/whatsapp.md
+++ b/src/engage/content/whatsapp.md
@@ -2,19 +2,8 @@
title: WhatsApp Template
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
With Twilio Engage, you can build personalized WhatsApp templates to store and use throughout marketing campaigns.
diff --git a/src/engage/onboarding.md b/src/engage/onboarding.md
index d31a5f4c2c..5cddc182b1 100644
--- a/src/engage/onboarding.md
+++ b/src/engage/onboarding.md
@@ -1,22 +1,12 @@
---
title: Twilio Engage Premier Onboarding Guide
plan: engage-premier
+hidden: true
redirect_from:
- '/engage/overview/onboarding'
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Twilio Engage brings Segment, Twilio, SendGrid, and WhatsApp together to help you create and send email, SMS, and WhatsApp campaigns to your customers.
diff --git a/src/engage/user-subscriptions/csv-upload.md b/src/engage/user-subscriptions/csv-upload.md
index 1e45bd6987..cabf1cfd38 100644
--- a/src/engage/user-subscriptions/csv-upload.md
+++ b/src/engage/user-subscriptions/csv-upload.md
@@ -2,19 +2,8 @@
title: Update Subscriptions with a CSV
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Use the CSV Uploader to add or update user subscription states.
diff --git a/src/engage/user-subscriptions/index.md b/src/engage/user-subscriptions/index.md
index a64c05d47a..b0fbdde585 100644
--- a/src/engage/user-subscriptions/index.md
+++ b/src/engage/user-subscriptions/index.md
@@ -2,19 +2,8 @@
title: User Subscriptions Overview
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Segment associates [subscription states](/docs/engage/user-subscriptions/set-user-subscriptions/) with each email address and phone number **external id** in your audiences. Subscription states indicate the level of consent end users have given to receive your marketing campaigns.
diff --git a/src/engage/user-subscriptions/set-user-subscriptions.md b/src/engage/user-subscriptions/set-user-subscriptions.md
index b2b879bc81..80c94ce1ec 100644
--- a/src/engage/user-subscriptions/set-user-subscriptions.md
+++ b/src/engage/user-subscriptions/set-user-subscriptions.md
@@ -2,19 +2,8 @@
title: Set User Subscriptions
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Segment associates a [user subscription state](/docs/engage/user-subscriptions/subscription-states/) with each email address and phone number in your Engage audiences. Subscription states give you insight into the level of consent a user has given you to receive your Engage campaigns.
diff --git a/src/engage/user-subscriptions/subscription-groups.md b/src/engage/user-subscriptions/subscription-groups.md
index e581fca676..7342a7419a 100644
--- a/src/engage/user-subscriptions/subscription-groups.md
+++ b/src/engage/user-subscriptions/subscription-groups.md
@@ -2,19 +2,8 @@
title: Subscription Groups
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Subscription groups let your users choose the emails they want to receive from you. This page introduces subscription groups and explains how you can use them with [Engage email campaigns](/docs/engage/campaigns/email-campaigns/).
diff --git a/src/engage/user-subscriptions/subscription-sql.md b/src/engage/user-subscriptions/subscription-sql.md
index 5e8941970f..734a0c5488 100644
--- a/src/engage/user-subscriptions/subscription-sql.md
+++ b/src/engage/user-subscriptions/subscription-sql.md
@@ -3,19 +3,8 @@ title: Subscriptions with SQL Traits
plan: engage-premier
beta: true
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Use Subscriptions with SQL Traits to connect to your data warehouse and query user subscription data to Engage on a scheduled basis. Use your data warehouse as a single source of truth for subscription statuses and query from warehouses such as BigQuery, Redshift, or Snowflake.
diff --git a/src/engage/user-subscriptions/subscription-states.md b/src/engage/user-subscriptions/subscription-states.md
index 4e7778abe3..956bd8e11e 100644
--- a/src/engage/user-subscriptions/subscription-states.md
+++ b/src/engage/user-subscriptions/subscription-states.md
@@ -2,19 +2,8 @@
title: User Subscription States
plan: engage-premier
---
-> info ""
-> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024. Existing Segment customers will continue to have access and support to Engage Premier until an end-of-life (EOL) date is announced. We recommend exploring the following pages in preparation of a migration or future MCM needs:
->
->[Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns)
->
->Preferred ISV Partners:
->
->[Airship Blog](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}
->[Bloomreach Blog](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}
->[Braze Blog](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}
->[Insider Blog](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}
->[Klaviyo Blog](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}
->[Twilio Engage Foundations Documentation](/docs/engage/quickstart/)
+> info "Engage Premier End of Sale"
+> Engage Premier entered an End of Sale (EOS) period effective June 10, 2024 and is no longer available for new customers. Existing Segment customers have access to and support for Engage Premier until Segment announces an end-of-life (EOL) date. Segment recommends exploring [Twilio Marketing Campaigns](https://www.twilio.com/en-us/sendgrid/marketing-campaigns){:target="_blank"}, as well as Segment's preferred ISV partners, including [Airship](https://www.twilio.com/en-us/blog/airship-integrated-customer-experience){:target="_blank"}, [Braze](https://www.twilio.com/en-us/blog/braze-conversational-marketing-campaigns){:target="_blank"}, [Klaviyo](https://www.twilio.com/en-us/blog/klaviyo-powering-smarter-digital-relationships){:target="_blank"}, [Bloomreach](https://www.twilio.com/en-us/blog/bloomreach-ecommerce-personalization){:target="_blank"}, and [Insider](https://www.twilio.com/en-us/blog/insider-cross-channel-customer-experience){:target="_blank"}.
Customer profiles in your Segment audiences contain **contact vectors**. A contact vector is a piece of unique, specific contact information associated with a customer, like the customer's email address or phone number.
diff --git a/src/segment-app/extensions/git.md b/src/segment-app/extensions/git.md
index 04b87ed6c9..97b19156e4 100644
--- a/src/segment-app/extensions/git.md
+++ b/src/segment-app/extensions/git.md
@@ -4,9 +4,9 @@ title: Git Sync Extension
Segment's Git extension lets you manage versioning by syncing changes you make in your Segment workspace to a Git repository.
-Git Sync supports one-way synchronization from Segment to Git. This sync captures the current state of your workspace through a full sync and includes all new records and changes for supported resources.
+Git Sync supports synchronization from Segment to Git. When you sync data from Segment to Git, you capture the current state of your workspace through a full sync and includes all new records and changes for supported resources.
-Segment doesn't support syncing changes from Git back to Segment.
+You can use [bidirectional sync](#bidirectional-sync) to sync data from Git to Segment. After you enable bidirectional sync, Segment automatically listens for pull requests in your repository and manages all related workspace changes.
## Set up Git Sync
@@ -84,6 +84,45 @@ To manage Segment resources using Git and Terraform, follow these steps:
For more information on using Terraform, visit [Terraform's documentation](https://developer.hashicorp.com/terraform/docs){:target="_blank"}.
+## Bidirectional Sync
+
+Bidirectional sync builds on top of the Git Sync extension and lets you manage your Segment workspace directly in GitHub. After you configure and enable bidirectional sync, Segment automatically listens for pull requests in your repository and manages all related workspace changes. Segment only applies changes when you comment `segment apply` on pull requests that can be successfully merged.
+
+Bidirectional sync only supports:
+- Explicit values ([secrets](#use-secrets-with-bidirectional-sync) require additional configuration)
+- [Segment resources compatible with Git sync](#working-with-git-sync)
+
+Bidirectional sync does not support variables, references to other resources, or resources from other providers.
+
+> warning "Bidirectional sync can lead to broad workspace changes, including data loss"
+> When using bidirectional sync to manage your Segment resources, verify that your specified plan matches the changes you expected. Unexpected changes can include data loss.
+
+### Set up bidirectional sync
+
+To set up bidirectional sync in your workspace:
+
+1. **Navigate to the Git Sync settings page to verify that your Git Sync integration is set up with Segment's GitHub App integration.** If it isn't, you can change the connection type under **Settings > Extensions > Git Sync > Manage Configuration**. If you were previously using the GitHub App integration, you might need to accept additional GitHub permissions that allow Segment to listen for the relevant events.
+2. **Add branch protection to your GitHub repository**. You can update your branch protections by opening GitHub and navigating to **Settings > Rules > Rulesets** and adding the Segment Extensions app to the **Bypass list**.
+3. **Navigate to the Segment app and enable Git sync bidirectional sync.** From the Segment app, navigate to **Settings > Extentions > Git Sync** page and enable the **Git sync bidirectional sync** setting.
+
+### Use bidirectional sync
+
+To apply changes to your workspace using bidirectional sync:
+
+1. Create a branch off of the branch specified in your Git Sync configuration, make the changes you'd like to see in your workspace, then submit a pull request with your changes.
+ - To add a new resource, add a *new* configuration file to the corresponding resource directory. Segment does not support multiple resources within the same file. The name does not matter, as it will be overwritten with a new ID after Segment creates the resource.
+2. Segment calculates the changes required to reflect those changes and outputs the planned changes to a comment directly on the pull request.
+3. Carefully double check that the planned changes match your desired changes and request approval from any stakeholders required before merging the pull request.
+4. Run `segment apply` to apply the planned changes.
+
+#### Use secrets with bidirectional sync
+
+To use secrets in your bidirectional sync workflow:
+
+1. Navigate to **Settings > Extensions > Git Sync > Manage Configuration** and upload your secret to the **Secrets** table.
+2. When referencing your secret, use `@@@@` in place of your secret, wherever applicable. Secrets are automatically hidden in a bidirectional sync output, but if you are not using them in a designated secret field, like Source/Destination key settings, for example, they might be written in plaintext to the repository as part of the regular syncing process.
+3. Plan and apply the changes as usual.
+
## Git Connections
Git Connections enable Segment to sync data with your preferred Git repository through supported like SSH and token-based authentication.
@@ -114,3 +153,4 @@ This error can occur if there are issues with your Git connection settings or pe
- Your credentials have write access to the Git repository, as Segment requires this to sync changes.
- Your repository is hosted by GitHub, GitLab, or Bitbucket (Segment doesn't support self-hosted repositories).
- Branch protections are disabled on the repository.
+