diff --git a/EmmaSharp/EmmaSharp.csproj b/EmmaSharp/EmmaSharp.csproj
index 056826e..c7c5612 100644
--- a/EmmaSharp/EmmaSharp.csproj
+++ b/EmmaSharp/EmmaSharp.csproj
@@ -33,17 +33,16 @@
bin\Release\EmmaSharp.XML
-
- ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll
- True
+
+ ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
-
- ..\packages\RestSharp.105.2.3\lib\net45\RestSharp.dll
- True
+
+ ..\packages\RestSharp.106.11.7\lib\net452\RestSharp.dll
+
@@ -63,6 +62,7 @@
+
@@ -118,6 +118,11 @@
+
+
+
+
+
diff --git a/EmmaSharp/Methods/Subscriptions.cs b/EmmaSharp/Methods/Subscriptions.cs
new file mode 100644
index 0000000..76d7aae
--- /dev/null
+++ b/EmmaSharp/Methods/Subscriptions.cs
@@ -0,0 +1,172 @@
+using EmmaSharp.Models.Subscriptions;
+using RestSharp;
+using RestSharp.Serializers;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EmmaSharp
+{
+ public partial class EmmaApi
+ {
+
+ ///
+ /// Get a list of all subscriptions in an account.
+ ///
+ /// A list of subscriptions in an account along with related information, including member count and subscription ID.
+ /// true or false. Returns deleted subscriptions only. Optional, defaults to false.
+ /// true or false. Returns deleted subscriptions along with active. Optional, defaults to false.
+ public List GetAccountSubscritpions(bool deletedOnly = false, bool includeDeleted = false)
+ {
+ var request = new RestRequest();
+ request.Resource = "/{accountId}/subscriptions";
+
+ if (deletedOnly)
+ request.AddParameter("deleted_only", deletedOnly);
+ if (includeDeleted)
+ request.AddParameter("include_deleted", includeDeleted);
+
+ return Execute>(request);
+ }
+
+ ///
+ /// Get detailed information for a specific subscription.
+ ///
+ /// Information about a subscription.
+ /// URL segment for the subscrition ID to query details on
+ public Subscription GetAccountSubscription(string subscription_id)
+ {
+ var request = new RestRequest();
+ request.Resource = "/{accountId}/subscriptions/{subscriptionId}";
+ request.AddUrlSegment("subscriptionId", subscription_id);
+
+ return Execute(request);
+ }
+
+ ///
+ /// Get a list of member IDs for members subscribed to a specific subscription.
+ ///
+ /// A list of member IDs.
+ /// URL segment for the subscrition ID to query details on
+ /// Pagination: start page. Defaults to first page (e.g. 0).
+ /// Pagination: end page. Defaults to first page (e.g. 500).
+ public List GetSubscriptionMembers(string subscription_id, int start = 0, int end = 500)
+ {
+ var request = new RestRequest();
+ request.Resource = "/{accountId}/subscriptions/{subscriptionId}/members";
+ request.AddUrlSegment("subscriptionId", subscription_id);
+
+ return Execute>(request, start, end);
+ }
+
+ ///
+ /// Get a list of member IDs for members who have opted out of a specific subscription.
+ ///
+ /// A list of member IDs.
+ /// URL segment for the subscrition ID to query details on
+ /// Pagination: start page. Defaults to first page (e.g. 0).
+ /// Pagination: end page. Defaults to first page (e.g. 500).
+ public List GetOptOutSubscriptionMembers(string subscription_id, int start = 0, int end = 500)
+ {
+ var request = new RestRequest();
+ request.Resource = "/{accountId}/subscriptions/{subscriptionId}/optouts";
+ request.AddUrlSegment("subscriptionId", subscription_id);
+
+ return Execute>(request, start, end);
+ }
+
+ ///
+ /// Create a subscription
+ ///
+ /// Information about the created subscription, including the subscription ID.
+ /// Name and descrption of the new subcription to create
+ public Subscription PostNewSubscription(SubscriptionNew subscription)
+ {
+ var request = new RestRequest(Method.POST);
+ request.Resource = "/{accountId}/subscriptions";
+
+ request.RequestFormat = DataFormat.Json;
+ request.JsonSerializer = new EmmaJsonSerializer();
+ request.AddBody(subscription);
+
+ return Execute(request);
+ }
+
+ ///
+ /// Bulk subscribe members to a subscription using a list of member IDs
+ ///
+ /// True if successful.
+ /// List of memberIDs
+ /// subscription id
+ public bool PostBulkMemberSubscrpitions(SubscriptionBulk memberIds, string subscription_id)
+ {
+ var request = new RestRequest(Method.POST);
+ request.Resource = "/{accountId}/subscriptions/{subscriptionId}/members/bulk";
+
+ request.AddUrlSegment("subscriptionId", subscription_id);
+ request.RequestFormat = DataFormat.Json;
+ request.JsonSerializer = new EmmaJsonSerializer();
+ request.AddBody(memberIds);
+
+ return Execute(request);
+ }
+
+ ///
+ /// Bulk subscribe members to a subscription using the import ID of all members
+ ///
+ /// True if successful.
+ /// import ID to bulk subscribe
+ /// subscription id
+ public bool PostBulkImportSubscrpitions(SubscriptionImportBulk importId, string subscription_id)
+ {
+ var request = new RestRequest(Method.POST);
+ request.Resource = "/{accountId}/subscriptions/{subscriptionId}/members/bulk";
+
+ request.AddUrlSegment("subscriptionId", subscription_id);
+ request.RequestFormat = DataFormat.Json;
+ request.JsonSerializer = new EmmaJsonSerializer();
+ request.AddBody(importId);
+
+ return Execute(request);
+ }
+
+
+ ///
+ /// Edit a subscription's name or description.
+ ///
+ /// Information about the updated subscription.Limited to name and description.
+ /// Name and descrpition of the subscription text to update. Visible in the Subscription Center.
+ /// the id to update
+ public Subscription EditSubscrpition(SubscriptionNew subscription, string subscription_id)
+ {
+ var request = new RestRequest(Method.PUT);
+ request.Resource = "/{accountId}/subscriptions/{subscriptionId}";
+
+ request.AddUrlSegment("subscriptionId", subscription_id);
+ request.RequestFormat = DataFormat.Json;
+ request.JsonSerializer = new EmmaJsonSerializer();
+ request.AddBody(subscription);
+
+ return Execute(request);
+ }
+
+ ///
+ /// Delete a subscription.
+ ///
+ /// Information about the subscription, including the date and time it was deleted.
+ /// the id to update
+ public Subscription DeleteSubscription(string subscription_id)
+ {
+ var request = new RestRequest(Method.DELETE);
+ request.Resource = "/{accountId}/subscriptions/{subscriptionId}";
+
+ request.AddUrlSegment("subscriptionId", subscription_id);
+ request.RequestFormat = DataFormat.Json;
+ request.JsonSerializer = new EmmaJsonSerializer();
+
+ return Execute(request);
+ }
+ }
+}
diff --git a/EmmaSharp/Models/Subscriptions/Subscription.cs b/EmmaSharp/Models/Subscriptions/Subscription.cs
new file mode 100644
index 0000000..a3b3f89
--- /dev/null
+++ b/EmmaSharp/Models/Subscriptions/Subscription.cs
@@ -0,0 +1,61 @@
+using EmmaSharp.Extensions;
+using EmmaSharp.Models.Groups;
+using EmmaSharp.Models.Mailings;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+
+namespace EmmaSharp.Models.Subscriptions
+{
+
+ public class Subscription
+ {
+ [JsonProperty("account_id")]
+ public long? AccountId { get; set; }
+
+ [JsonConverter(typeof(EmmaDateConverter))]
+ [JsonProperty("created_at")]
+ public DateTime? CreatedAt { get; set; }
+
+ [JsonConverter(typeof(EmmaDateConverter))]
+ [JsonProperty("deleted_at")]
+ public DateTime? DeletedAt { get; set; }
+
+ [JsonProperty("description")]
+ public string Description { get; set; }
+
+ [JsonProperty("import_status")]
+ public string ImportStatus { get; set; }
+
+ [JsonProperty("member_count")]
+ public int? MemberCount { get; set; }
+
+ [JsonProperty("modified_at")]
+ public string ModifiedAt { get; set; }
+
+ [JsonProperty("optout_count")]
+ public int? OptoutCount { get; set; }
+
+ [JsonConverter(typeof(EmmaDateConverter))]
+ [JsonProperty("purged_at")]
+ public DateTime? PurgedAt { get; set; }
+
+ [JsonProperty("settings")]
+ public Settings Settings { get; set; }
+
+ [JsonProperty("subscription_id")]
+ public long? SubscriptionId { get; set; }
+
+ [JsonProperty("subscription_name")]
+ public string SubscriptionName { get; set; }
+
+ [JsonProperty("subscription_order")]
+ public int? SubscriptionOrder { get; set; }
+ }
+ public class Settings
+ {
+ [JsonProperty("show_on_default_preference_form")]
+ public bool ShowOnDefaultPreferenceForm { get; set; }
+ }
+
+}
diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs
new file mode 100644
index 0000000..46e0f64
--- /dev/null
+++ b/EmmaSharp/Models/Subscriptions/SubscriptionBulk.cs
@@ -0,0 +1,17 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EmmaSharp.Models.Subscriptions
+{
+ public class SubscriptionBulk
+ {
+ [JsonProperty("member_ids")]
+ public List MemberIds { get; set; }
+
+ }
+
+}
diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionImportBulk.cs b/EmmaSharp/Models/Subscriptions/SubscriptionImportBulk.cs
new file mode 100644
index 0000000..c16c137
--- /dev/null
+++ b/EmmaSharp/Models/Subscriptions/SubscriptionImportBulk.cs
@@ -0,0 +1,15 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EmmaSharp.Models.Subscriptions
+{
+ public class SubscriptionImportBulk
+ {
+ [JsonProperty("import_id")]
+ public long ImportId { get; set; }
+ }
+}
diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs
new file mode 100644
index 0000000..ca9029b
--- /dev/null
+++ b/EmmaSharp/Models/Subscriptions/SubscriptionMembers.cs
@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EmmaSharp.Models.Subscriptions
+{
+
+ public class SubscriptionMembers
+ {
+ [JsonProperty("member_id")]
+ public long MemberId { get; set; }
+ }
+}
diff --git a/EmmaSharp/Models/Subscriptions/SubscriptionNew.cs b/EmmaSharp/Models/Subscriptions/SubscriptionNew.cs
new file mode 100644
index 0000000..56b9383
--- /dev/null
+++ b/EmmaSharp/Models/Subscriptions/SubscriptionNew.cs
@@ -0,0 +1,19 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EmmaSharp.Models.Subscriptions
+{
+
+ public class SubscriptionNew
+ {
+ [JsonProperty("name")]
+ public string Name { get; set; }
+
+ [JsonProperty("description")]
+ public string Description { get; set; }
+ }
+}
diff --git a/EmmaSharp/packages.config b/EmmaSharp/packages.config
index 7b2a573..59299f7 100644
--- a/EmmaSharp/packages.config
+++ b/EmmaSharp/packages.config
@@ -1,5 +1,5 @@
-
-
+
+
\ No newline at end of file