summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/accesssettings/accesssettings.cs92
-rw-r--r--examples/apikeys/apikeys.cs89
-rw-r--r--examples/asm/asm.cs172
-rw-r--r--examples/browsers/browsers.cs25
-rw-r--r--examples/campaigns/campaigns.cs168
-rw-r--r--examples/categories/categories.cs59
-rw-r--r--examples/clients/clients.cs38
-rw-r--r--examples/contactdb/contactdb.cs454
-rw-r--r--examples/devices/devices.cs24
-rw-r--r--examples/geo/geo.cs25
-rw-r--r--examples/ips/ips.cs175
-rw-r--r--examples/mail/mail.cs182
-rw-r--r--examples/mailboxproviders/mailboxproviders.cs25
-rw-r--r--examples/mailsettings/mailsettings.cs242
-rw-r--r--examples/partnersettings/partnersettings.cs46
-rw-r--r--examples/scopes/scopes.cs17
-rw-r--r--examples/stats/stats.cs24
-rw-r--r--examples/subusers/subusers.cs218
-rw-r--r--examples/suppression/suppression.cs244
-rw-r--r--examples/templates/templates.cs140
-rw-r--r--examples/trackingsettings/trackingsettings.cs123
-rw-r--r--examples/user/user.cs271
-rw-r--r--examples/whitelabel/whitelabel.cs359
23 files changed, 3212 insertions, 0 deletions
diff --git a/examples/accesssettings/accesssettings.cs b/examples/accesssettings/accesssettings.cs
new file mode 100644
index 0000000..15fe8b0
--- /dev/null
+++ b/examples/accesssettings/accesssettings.cs
@@ -0,0 +1,92 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve all recent access attempts
+// GET /access_settings/activity
+
+string queryParams = @"{
+ 'limit': 1
+}";
+dynamic response = sg.client.access_settings.activity.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add one or more IPs to the whitelist
+// POST /access_settings/whitelist
+
+string data = @"{
+ 'ips': [
+ {
+ 'ip': '192.168.1.1'
+ },
+ {
+ 'ip': '192.*.*.*'
+ },
+ {
+ 'ip': '192.168.1.3/32'
+ }
+ ]
+}";
+dynamic response = sg.client.access_settings.whitelist.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a list of currently whitelisted IPs
+// GET /access_settings/whitelist
+
+dynamic response = sg.client.access_settings.whitelist.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Remove one or more IPs from the whitelist
+// DELETE /access_settings/whitelist
+
+string data = @"{
+ 'ids': [
+ 1,
+ 2,
+ 3
+ ]
+}";
+dynamic response = sg.client.access_settings.whitelist.delete(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a specific whitelisted IP
+// GET /access_settings/whitelist/{rule_id}
+
+var rule_id = "test_url_param";
+dynamic response = sg.client.access_settings.whitelist._(rule_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Remove a specific IP from the whitelist
+// DELETE /access_settings/whitelist/{rule_id}
+
+var rule_id = "test_url_param";
+dynamic response = sg.client.access_settings.whitelist._(rule_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/apikeys/apikeys.cs b/examples/apikeys/apikeys.cs
new file mode 100644
index 0000000..eff23ec
--- /dev/null
+++ b/examples/apikeys/apikeys.cs
@@ -0,0 +1,89 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Create API keys
+// POST /api_keys
+
+string data = @"{
+ 'name': 'My API Key',
+ 'scopes': [
+ 'mail.send',
+ 'alerts.create',
+ 'alerts.read'
+ ]
+}";
+dynamic response = sg.client.api_keys.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all API Keys belonging to the authenticated user
+// GET /api_keys
+
+dynamic response = sg.client.api_keys.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update the name & scopes of an API Key
+// PUT /api_keys/{api_key_id}
+
+string data = @"{
+ 'name': 'A New Hope',
+ 'scopes': [
+ 'user.profile.read',
+ 'user.profile.update'
+ ]
+}";
+var api_key_id = "test_url_param";
+dynamic response = sg.client.api_keys._(api_key_id).put(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update API keys
+// PATCH /api_keys/{api_key_id}
+
+string data = @"{
+ 'name': 'A New Hope'
+}";
+var api_key_id = "test_url_param";
+dynamic response = sg.client.api_keys._(api_key_id).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve an existing API Key
+// GET /api_keys/{api_key_id}
+
+var api_key_id = "test_url_param";
+dynamic response = sg.client.api_keys._(api_key_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete API keys
+// DELETE /api_keys/{api_key_id}
+
+var api_key_id = "test_url_param";
+dynamic response = sg.client.api_keys._(api_key_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/asm/asm.cs b/examples/asm/asm.cs
new file mode 100644
index 0000000..4f5bde7
--- /dev/null
+++ b/examples/asm/asm.cs
@@ -0,0 +1,172 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Create a new suppression group
+// POST /asm/groups
+
+string data = @"{
+ 'description': 'Suggestions for products our users might like.',
+ 'is_default': true,
+ 'name': 'Product Suggestions'
+}";
+dynamic response = sg.client.asm.groups.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve information about multiple suppression groups
+// GET /asm/groups
+
+string queryParams = @"{
+ 'id': 1
+}";
+dynamic response = sg.client.asm.groups.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update a suppression group.
+// PATCH /asm/groups/{group_id}
+
+string data = @"{
+ 'description': 'Suggestions for items our users might like.',
+ 'id': 103,
+ 'name': 'Item Suggestions'
+}";
+var group_id = "test_url_param";
+dynamic response = sg.client.asm.groups._(group_id).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Get information on a single suppression group.
+// GET /asm/groups/{group_id}
+
+var group_id = "test_url_param";
+dynamic response = sg.client.asm.groups._(group_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a suppression group.
+// DELETE /asm/groups/{group_id}
+
+var group_id = "test_url_param";
+dynamic response = sg.client.asm.groups._(group_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add suppressions to a suppression group
+// POST /asm/groups/{group_id}/suppressions
+
+string data = @"{
+ 'recipient_emails': [
+ 'test1@example.com',
+ 'test2@example.com'
+ ]
+}";
+var group_id = "test_url_param";
+dynamic response = sg.client.asm.groups._(group_id).suppressions.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all suppressions for a suppression group
+// GET /asm/groups/{group_id}/suppressions
+
+var group_id = "test_url_param";
+dynamic response = sg.client.asm.groups._(group_id).suppressions.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a suppression from a suppression group
+// DELETE /asm/groups/{group_id}/suppressions/{email}
+
+var group_id = "test_url_param";
+var email = "test_url_param";
+dynamic response = sg.client.asm.groups._(group_id).suppressions._(email).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all suppressions
+// GET /asm/suppressions
+
+dynamic response = sg.client.asm.suppressions.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add recipient addresses to the global suppression group.
+// POST /asm/suppressions/global
+
+string data = @"{
+ 'recipient_emails': [
+ 'test1@example.com',
+ 'test2@example.com'
+ ]
+}";
+dynamic response = sg.client.asm.suppressions.global.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a Global Suppression
+// GET /asm/suppressions/global/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.asm.suppressions.global._(email).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a Global Suppression
+// DELETE /asm/suppressions/global/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.asm.suppressions.global._(email).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all suppression groups for an email address
+// GET /asm/suppressions/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.asm.suppressions._(email).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/browsers/browsers.cs b/examples/browsers/browsers.cs
new file mode 100644
index 0000000..43d52e5
--- /dev/null
+++ b/examples/browsers/browsers.cs
@@ -0,0 +1,25 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve email statistics by browser.
+// GET /browsers/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'browsers': 'test_string',
+ 'end_date': '2016-04-01',
+ 'limit': 'test_string',
+ 'offset': 'test_string',
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.browsers.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/campaigns/campaigns.cs b/examples/campaigns/campaigns.cs
new file mode 100644
index 0000000..03bbadc
--- /dev/null
+++ b/examples/campaigns/campaigns.cs
@@ -0,0 +1,168 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Create a Campaign
+// POST /campaigns
+
+string data = @"{
+ 'categories': [
+ 'spring line'
+ ],
+ 'custom_unsubscribe_url': '',
+ 'html_content': '<html><head><title></title></head><body><p>Check out our spring line!</p></body></html>',
+ 'ip_pool': 'marketing',
+ 'list_ids': [
+ 110,
+ 124
+ ],
+ 'plain_content': 'Check out our spring line!',
+ 'segment_ids': [
+ 110
+ ],
+ 'sender_id': 124451,
+ 'subject': 'New Products for Spring!',
+ 'suppression_group_id': 42,
+ 'title': 'March Newsletter'
+}";
+dynamic response = sg.client.campaigns.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all Campaigns
+// GET /campaigns
+
+string queryParams = @"{
+ 'limit': 0,
+ 'offset': 0
+}";
+dynamic response = sg.client.campaigns.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update a Campaign
+// PATCH /campaigns/{campaign_id}
+
+string data = @"{
+ 'categories': [
+ 'summer line'
+ ],
+ 'html_content': '<html><head><title></title></head><body><p>Check out our summer line!</p></body></html>',
+ 'plain_content': 'Check out our summer line!',
+ 'subject': 'New Products for Summer!',
+ 'title': 'May Newsletter'
+}";
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a single campaign
+// GET /campaigns/{campaign_id}
+
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a Campaign
+// DELETE /campaigns/{campaign_id}
+
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update a Scheduled Campaign
+// PATCH /campaigns/{campaign_id}/schedules
+
+string data = @"{
+ 'send_at': 1489451436
+}";
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).schedules.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Schedule a Campaign
+// POST /campaigns/{campaign_id}/schedules
+
+string data = @"{
+ 'send_at': 1489771528
+}";
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).schedules.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// View Scheduled Time of a Campaign
+// GET /campaigns/{campaign_id}/schedules
+
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).schedules.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Unschedule a Scheduled Campaign
+// DELETE /campaigns/{campaign_id}/schedules
+
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).schedules.delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Send a Campaign
+// POST /campaigns/{campaign_id}/schedules/now
+
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).schedules.now.post();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Send a Test Campaign
+// POST /campaigns/{campaign_id}/schedules/test
+
+string data = @"{
+ 'to': 'your.email@example.com'
+}";
+var campaign_id = "test_url_param";
+dynamic response = sg.client.campaigns._(campaign_id).schedules.test.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/categories/categories.cs b/examples/categories/categories.cs
new file mode 100644
index 0000000..82899ea
--- /dev/null
+++ b/examples/categories/categories.cs
@@ -0,0 +1,59 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve all categories
+// GET /categories
+
+string queryParams = @"{
+ 'category': 'test_string',
+ 'limit': 1,
+ 'offset': 1
+}";
+dynamic response = sg.client.categories.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve Email Statistics for Categories
+// GET /categories/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'categories': 'test_string',
+ 'end_date': '2016-04-01',
+ 'limit': 1,
+ 'offset': 1,
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.categories.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?]
+// GET /categories/stats/sums
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'limit': 1,
+ 'offset': 1,
+ 'sort_by_direction': 'asc',
+ 'sort_by_metric': 'test_string',
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.categories.stats.sums.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/clients/clients.cs b/examples/clients/clients.cs
new file mode 100644
index 0000000..ecefdcd
--- /dev/null
+++ b/examples/clients/clients.cs
@@ -0,0 +1,38 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve email statistics by client type.
+// GET /clients/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.clients.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve stats by a specific client type.
+// GET /clients/{client_type}/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'start_date': '2016-01-01'
+}";
+var client_type = "test_url_param";
+dynamic response = sg.client.clients._(client_type).stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/contactdb/contactdb.cs b/examples/contactdb/contactdb.cs
new file mode 100644
index 0000000..ea388d2
--- /dev/null
+++ b/examples/contactdb/contactdb.cs
@@ -0,0 +1,454 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Create a Custom Field
+// POST /contactdb/custom_fields
+
+string data = @"{
+ 'name': 'pet',
+ 'type': 'text'
+}";
+dynamic response = sg.client.contactdb.custom_fields.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all custom fields
+// GET /contactdb/custom_fields
+
+dynamic response = sg.client.contactdb.custom_fields.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a Custom Field
+// GET /contactdb/custom_fields/{custom_field_id}
+
+var custom_field_id = "test_url_param";
+dynamic response = sg.client.contactdb.custom_fields._(custom_field_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a Custom Field
+// DELETE /contactdb/custom_fields/{custom_field_id}
+
+var custom_field_id = "test_url_param";
+dynamic response = sg.client.contactdb.custom_fields._(custom_field_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Create a List
+// POST /contactdb/lists
+
+string data = @"{
+ 'name': 'your list name'
+}";
+dynamic response = sg.client.contactdb.lists.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all lists
+// GET /contactdb/lists
+
+dynamic response = sg.client.contactdb.lists.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete Multiple lists
+// DELETE /contactdb/lists
+
+string data = @"[
+ 1,
+ 2,
+ 3,
+ 4
+]";
+dynamic response = sg.client.contactdb.lists.delete(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update a List
+// PATCH /contactdb/lists/{list_id}
+
+string data = @"{
+ 'name': 'newlistname'
+}";
+string queryParams = @"{
+ 'list_id': 0
+}";
+var list_id = "test_url_param";
+dynamic response = sg.client.contactdb.lists._(list_id).patch(requestBody: data, queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a single list
+// GET /contactdb/lists/{list_id}
+
+string queryParams = @"{
+ 'list_id': 0
+}";
+var list_id = "test_url_param";
+dynamic response = sg.client.contactdb.lists._(list_id).get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a List
+// DELETE /contactdb/lists/{list_id}
+
+string queryParams = @"{
+ 'delete_contacts': 'true'
+}";
+var list_id = "test_url_param";
+dynamic response = sg.client.contactdb.lists._(list_id).delete(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add Multiple Recipients to a List
+// POST /contactdb/lists/{list_id}/recipients
+
+string data = @"[
+ 'recipient_id1',
+ 'recipient_id2'
+]";
+var list_id = "test_url_param";
+dynamic response = sg.client.contactdb.lists._(list_id).recipients.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all recipients on a List
+// GET /contactdb/lists/{list_id}/recipients
+
+string queryParams = @"{
+ 'list_id': 0,
+ 'page': 1,
+ 'page_size': 1
+}";
+var list_id = "test_url_param";
+dynamic response = sg.client.contactdb.lists._(list_id).recipients.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add a Single Recipient to a List
+// POST /contactdb/lists/{list_id}/recipients/{recipient_id}
+
+var list_id = "test_url_param";
+var recipient_id = "test_url_param";
+dynamic response = sg.client.contactdb.lists._(list_id).recipients._(recipient_id).post();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a Single Recipient from a Single List
+// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id}
+
+string queryParams = @"{
+ 'list_id': 0,
+ 'recipient_id': 0
+}";
+var list_id = "test_url_param";
+var recipient_id = "test_url_param";
+dynamic response = sg.client.contactdb.lists._(list_id).recipients._(recipient_id).delete(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update Recipient
+// PATCH /contactdb/recipients
+
+string data = @"[
+ {
+ 'email': 'jones@example.com',
+ 'first_name': 'Guy',
+ 'last_name': 'Jones'
+ }
+]";
+dynamic response = sg.client.contactdb.recipients.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add recipients
+// POST /contactdb/recipients
+
+string data = @"[
+ {
+ 'age': 25,
+ 'email': 'example@example.com',
+ 'first_name': '',
+ 'last_name': 'User'
+ },
+ {
+ 'age': 25,
+ 'email': 'example2@example.com',
+ 'first_name': 'Example',
+ 'last_name': 'User'
+ }
+]";
+dynamic response = sg.client.contactdb.recipients.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve recipients
+// GET /contactdb/recipients
+
+string queryParams = @"{
+ 'page': 1,
+ 'page_size': 1
+}";
+dynamic response = sg.client.contactdb.recipients.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete Recipient
+// DELETE /contactdb/recipients
+
+string data = @"[
+ 'recipient_id1',
+ 'recipient_id2'
+]";
+dynamic response = sg.client.contactdb.recipients.delete(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve the count of billable recipients
+// GET /contactdb/recipients/billable_count
+
+dynamic response = sg.client.contactdb.recipients.billable_count.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a Count of Recipients
+// GET /contactdb/recipients/count
+
+dynamic response = sg.client.contactdb.recipients.count.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve recipients matching search criteria
+// GET /contactdb/recipients/search
+
+string queryParams = @"{
+ '{field_name}': 'test_string'
+}";
+dynamic response = sg.client.contactdb.recipients.search.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a single recipient
+// GET /contactdb/recipients/{recipient_id}
+
+var recipient_id = "test_url_param";
+dynamic response = sg.client.contactdb.recipients._(recipient_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a Recipient
+// DELETE /contactdb/recipients/{recipient_id}
+
+var recipient_id = "test_url_param";
+dynamic response = sg.client.contactdb.recipients._(recipient_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve the lists that a recipient is on
+// GET /contactdb/recipients/{recipient_id}/lists
+
+var recipient_id = "test_url_param";
+dynamic response = sg.client.contactdb.recipients._(recipient_id).lists.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve reserved fields
+// GET /contactdb/reserved_fields
+
+dynamic response = sg.client.contactdb.reserved_fields.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Create a Segment
+// POST /contactdb/segments
+
+string data = @"{
+ 'conditions': [
+ {
+ 'and_or': '',
+ 'field': 'last_name',
+ 'operator': 'eq',
+ 'value': 'Miller'
+ },
+ {
+ 'and_or': 'and',
+ 'field': 'last_clicked',
+ 'operator': 'gt',
+ 'value': '01/02/2015'
+ },
+ {
+ 'and_or': 'or',
+ 'field': 'clicks.campaign_identifier',
+ 'operator': 'eq',
+ 'value': '513'
+ }
+ ],
+ 'list_id': 4,
+ 'name': 'Last Name Miller'
+}";
+dynamic response = sg.client.contactdb.segments.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all segments
+// GET /contactdb/segments
+
+dynamic response = sg.client.contactdb.segments.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update a segment
+// PATCH /contactdb/segments/{segment_id}
+
+string data = @"{
+ 'conditions': [
+ {
+ 'and_or': '',
+ 'field': 'last_name',
+ 'operator': 'eq',
+ 'value': 'Miller'
+ }
+ ],
+ 'list_id': 5,
+ 'name': 'The Millers'
+}";
+string queryParams = @"{
+ 'segment_id': 'test_string'
+}";
+var segment_id = "test_url_param";
+dynamic response = sg.client.contactdb.segments._(segment_id).patch(requestBody: data, queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a segment
+// GET /contactdb/segments/{segment_id}
+
+string queryParams = @"{
+ 'segment_id': 0
+}";
+var segment_id = "test_url_param";
+dynamic response = sg.client.contactdb.segments._(segment_id).get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a segment
+// DELETE /contactdb/segments/{segment_id}
+
+string queryParams = @"{
+ 'delete_contacts': 'true'
+}";
+var segment_id = "test_url_param";
+dynamic response = sg.client.contactdb.segments._(segment_id).delete(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve recipients on a segment
+// GET /contactdb/segments/{segment_id}/recipients
+
+string queryParams = @"{
+ 'page': 1,
+ 'page_size': 1
+}";
+var segment_id = "test_url_param";
+dynamic response = sg.client.contactdb.segments._(segment_id).recipients.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/devices/devices.cs b/examples/devices/devices.cs
new file mode 100644
index 0000000..e813871
--- /dev/null
+++ b/examples/devices/devices.cs
@@ -0,0 +1,24 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve email statistics by device type.
+// GET /devices/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'limit': 1,
+ 'offset': 1,
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.devices.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/geo/geo.cs b/examples/geo/geo.cs
new file mode 100644
index 0000000..25faa04
--- /dev/null
+++ b/examples/geo/geo.cs
@@ -0,0 +1,25 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve email statistics by country and state/province.
+// GET /geo/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'country': 'US',
+ 'end_date': '2016-04-01',
+ 'limit': 1,
+ 'offset': 1,
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.geo.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/ips/ips.cs b/examples/ips/ips.cs
new file mode 100644
index 0000000..640da91
--- /dev/null
+++ b/examples/ips/ips.cs
@@ -0,0 +1,175 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve all IP addresses
+// GET /ips
+
+string queryParams = @"{
+ 'exclude_whitelabels': 'true',
+ 'ip': 'test_string',
+ 'limit': 1,
+ 'offset': 1,
+ 'subuser': 'test_string'
+}";
+dynamic response = sg.client.ips.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all assigned IPs
+// GET /ips/assigned
+
+dynamic response = sg.client.ips.assigned.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Create an IP pool.
+// POST /ips/pools
+
+string data = @"{
+ 'name': 'marketing'
+}";
+dynamic response = sg.client.ips.pools.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all IP pools.
+// GET /ips/pools
+
+dynamic response = sg.client.ips.pools.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update an IP pools name.
+// PUT /ips/pools/{pool_name}
+
+string data = @"{
+ 'name': 'new_pool_name'
+}";
+var pool_name = "test_url_param";
+dynamic response = sg.client.ips.pools._(pool_name).put(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all IPs in a specified pool.
+// GET /ips/pools/{pool_name}
+
+var pool_name = "test_url_param";
+dynamic response = sg.client.ips.pools._(pool_name).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete an IP pool.
+// DELETE /ips/pools/{pool_name}
+
+var pool_name = "test_url_param";
+dynamic response = sg.client.ips.pools._(pool_name).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add an IP address to a pool
+// POST /ips/pools/{pool_name}/ips
+
+string data = @"{
+ 'ip': '0.0.0.0'
+}";
+var pool_name = "test_url_param";
+dynamic response = sg.client.ips.pools._(pool_name).ips.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Remove an IP address from a pool.
+// DELETE /ips/pools/{pool_name}/ips/{ip}
+
+var pool_name = "test_url_param";
+var ip = "test_url_param";
+dynamic response = sg.client.ips.pools._(pool_name).ips._(ip).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add an IP to warmup
+// POST /ips/warmup
+
+string data = @"{
+ 'ip': '0.0.0.0'
+}";
+dynamic response = sg.client.ips.warmup.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all IPs currently in warmup
+// GET /ips/warmup
+
+dynamic response = sg.client.ips.warmup.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve warmup status for a specific IP address
+// GET /ips/warmup/{ip_address}
+
+var ip_address = "test_url_param";
+dynamic response = sg.client.ips.warmup._(ip_address).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Remove an IP from warmup
+// DELETE /ips/warmup/{ip_address}
+
+var ip_address = "test_url_param";
+dynamic response = sg.client.ips.warmup._(ip_address).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all IP pools an IP address belongs to
+// GET /ips/{ip_address}
+
+var ip_address = "test_url_param";
+dynamic response = sg.client.ips._(ip_address).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/mail/mail.cs b/examples/mail/mail.cs
new file mode 100644
index 0000000..7cad2be
--- /dev/null
+++ b/examples/mail/mail.cs
@@ -0,0 +1,182 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Create a batch ID
+// POST /mail/batch
+
+dynamic response = sg.client.mail.batch.post();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Validate batch ID
+// GET /mail/batch/{batch_id}
+
+var batch_id = "test_url_param";
+dynamic response = sg.client.mail.batch._(batch_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// v3 Mail Send
+// POST /mail/send
+# This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/SendGrid/SendGrid/Helpers/Mail/README.md).
+
+string data = @"{
+ 'asm': {
+ 'group_id': 1,
+ 'groups_to_display': [
+ 1,
+ 2,
+ 3
+ ]
+ },
+ 'attachments': [
+ {
+ 'content': '[BASE64 encoded content block here]',
+ 'content_id': 'ii_139db99fdb5c3704',
+ 'disposition': 'inline',
+ 'filename': 'file1.jpg',
+ 'name': 'file1',
+ 'type': 'jpg'
+ }
+ ],
+ 'batch_id': '[YOUR BATCH ID GOES HERE]',
+ 'categories': [
+ 'category1',
+ 'category2'
+ ],
+ 'content': [
+ {
+ 'type': 'text/html',
+ 'value': '<html><p>Hello, world!</p><img src=[CID GOES HERE]></img></html>'
+ }
+ ],
+ 'custom_args': {
+ 'New Argument 1': 'New Value 1',
+ 'activationAttempt': '1',
+ 'customerAccountNumber': '[CUSTOMER ACCOUNT NUMBER GOES HERE]'
+ },
+ 'from': {
+ 'email': 'sam.smith@example.com',
+ 'name': 'Sam Smith'
+ },
+ 'headers': {},
+ 'ip_pool_name': '[YOUR POOL NAME GOES HERE]',
+ 'mail_settings': {
+ 'bcc': {
+ 'email': 'ben.doe@example.com',
+ 'enable': true
+ },
+ 'bypass_list_management': {
+ 'enable': true
+ },
+ 'footer': {
+ 'enable': true,
+ 'html': '<p>Thanks</br>The SendGrid Team</p>',
+ 'text': 'Thanks,/n The SendGrid Team'
+ },
+ 'sandbox_mode': {
+ 'enable': false
+ },
+ 'spam_check': {
+ 'enable': true,
+ 'post_to_url': 'http://example.com/compliance',
+ 'threshold': 3
+ }
+ },
+ 'personalizations': [
+ {
+ 'bcc': [
+ {
+ 'email': 'sam.doe@example.com',
+ 'name': 'Sam Doe'
+ }
+ ],
+ 'cc': [
+ {
+ 'email': 'jane.doe@example.com',
+ 'name': 'Jane Doe'
+ }
+ ],
+ 'custom_args': {
+ 'New Argument 1': 'New Value 1',
+ 'activationAttempt': '1',
+ 'customerAccountNumber': '[CUSTOMER ACCOUNT NUMBER GOES HERE]'
+ },
+ 'headers': {
+ 'X-Accept-Language': 'en',
+ 'X-Mailer': 'MyApp'
+ },
+ 'send_at': 1409348513,
+ 'subject': 'Hello, World!',
+ 'substitutions': {
+ 'sub': {
+ '%name%': [
+ 'John',
+ 'Jane',
+ 'Sam'
+ ]
+ }
+ },
+ 'to': [
+ {
+ 'email': 'john.doe@example.com',
+ 'name': 'John Doe'
+ }
+ ]
+ }
+ ],
+ 'reply_to': {
+ 'email': 'sam.smith@example.com',
+ 'name': 'Sam Smith'
+ },
+ 'sections': {
+ 'section': {
+ ':sectionName1': 'section 1 text',
+ ':sectionName2': 'section 2 text'
+ }
+ },
+ 'send_at': 1409348513,
+ 'subject': 'Hello, World!',
+ 'template_id': '[YOUR TEMPLATE ID GOES HERE]',
+ 'tracking_settings': {
+ 'click_tracking': {
+ 'enable': true,
+ 'enable_text': true
+ },
+ 'ganalytics': {
+ 'enable': true,
+ 'utm_campaign': '[NAME OF YOUR REFERRER SOURCE]',
+ 'utm_content': '[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]',
+ 'utm_medium': '[NAME OF YOUR MARKETING MEDIUM e.g. email]',
+ 'utm_name': '[NAME OF YOUR CAMPAIGN]',
+ 'utm_term': '[IDENTIFY PAID KEYWORDS HERE]'
+ },
+ 'open_tracking': {
+ 'enable': true,
+ 'substitution_tag': '%opentrack'
+ },
+ 'subscription_tracking': {
+ 'enable': true,
+ 'html': 'If you would like to unsubscribe and stop receiving these emails <% clickhere %>.',
+ 'substitution_tag': '<%click here%>',
+ 'text': 'If you would like to unsubscribe and stop receiveing these emails <% click here %>.'
+ }
+ }
+}";
+dynamic response = sg.client.mail.send.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/mailboxproviders/mailboxproviders.cs b/examples/mailboxproviders/mailboxproviders.cs
new file mode 100644
index 0000000..b307fc4
--- /dev/null
+++ b/examples/mailboxproviders/mailboxproviders.cs
@@ -0,0 +1,25 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve email statistics by mailbox provider.
+// GET /mailbox_providers/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'limit': 1,
+ 'mailbox_providers': 'test_string',
+ 'offset': 1,
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.mailbox_providers.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/mailsettings/mailsettings.cs b/examples/mailsettings/mailsettings.cs
new file mode 100644
index 0000000..8f0c519
--- /dev/null
+++ b/examples/mailsettings/mailsettings.cs
@@ -0,0 +1,242 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve all mail settings
+// GET /mail_settings
+
+string queryParams = @"{
+ 'limit': 1,
+ 'offset': 1
+}";
+dynamic response = sg.client.mail_settings.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update address whitelist mail settings
+// PATCH /mail_settings/address_whitelist
+
+string data = @"{
+ 'enabled': true,
+ 'list': [
+ 'email1@example.com',
+ 'example.com'
+ ]
+}";
+dynamic response = sg.client.mail_settings.address_whitelist.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve address whitelist mail settings
+// GET /mail_settings/address_whitelist
+
+dynamic response = sg.client.mail_settings.address_whitelist.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update BCC mail settings
+// PATCH /mail_settings/bcc
+
+string data = @"{
+ 'email': 'email@example.com',
+ 'enabled': false
+}";
+dynamic response = sg.client.mail_settings.bcc.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all BCC mail settings
+// GET /mail_settings/bcc
+
+dynamic response = sg.client.mail_settings.bcc.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update bounce purge mail settings
+// PATCH /mail_settings/bounce_purge
+
+string data = @"{
+ 'enabled': true,
+ 'hard_bounces': 5,
+ 'soft_bounces': 5
+}";
+dynamic response = sg.client.mail_settings.bounce_purge.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve bounce purge mail settings
+// GET /mail_settings/bounce_purge
+
+dynamic response = sg.client.mail_settings.bounce_purge.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update footer mail settings
+// PATCH /mail_settings/footer
+
+string data = @"{
+ 'enabled': true,
+ 'html_content': '...',
+ 'plain_content': '...'
+}";
+dynamic response = sg.client.mail_settings.footer.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve footer mail settings
+// GET /mail_settings/footer
+
+dynamic response = sg.client.mail_settings.footer.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update forward bounce mail settings
+// PATCH /mail_settings/forward_bounce
+
+string data = @"{
+ 'email': 'example@example.com',
+ 'enabled': true
+}";
+dynamic response = sg.client.mail_settings.forward_bounce.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve forward bounce mail settings
+// GET /mail_settings/forward_bounce
+
+dynamic response = sg.client.mail_settings.forward_bounce.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update forward spam mail settings
+// PATCH /mail_settings/forward_spam
+
+string data = @"{
+ 'email': '',
+ 'enabled': false
+}";
+dynamic response = sg.client.mail_settings.forward_spam.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve forward spam mail settings
+// GET /mail_settings/forward_spam
+
+dynamic response = sg.client.mail_settings.forward_spam.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update plain content mail settings
+// PATCH /mail_settings/plain_content
+
+string data = @"{
+ 'enabled': false
+}";
+dynamic response = sg.client.mail_settings.plain_content.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve plain content mail settings
+// GET /mail_settings/plain_content
+
+dynamic response = sg.client.mail_settings.plain_content.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update spam check mail settings
+// PATCH /mail_settings/spam_check
+
+string data = @"{
+ 'enabled': true,
+ 'max_score': 5,
+ 'url': 'url'
+}";
+dynamic response = sg.client.mail_settings.spam_check.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve spam check mail settings
+// GET /mail_settings/spam_check
+
+dynamic response = sg.client.mail_settings.spam_check.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update template mail settings
+// PATCH /mail_settings/template
+
+string data = @"{
+ 'enabled': true,
+ 'html_content': '<% body %>'
+}";
+dynamic response = sg.client.mail_settings.template.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve legacy template mail settings
+// GET /mail_settings/template
+
+dynamic response = sg.client.mail_settings.template.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/partnersettings/partnersettings.cs b/examples/partnersettings/partnersettings.cs
new file mode 100644
index 0000000..5f253b3
--- /dev/null
+++ b/examples/partnersettings/partnersettings.cs
@@ -0,0 +1,46 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Returns a list of all partner settings.
+// GET /partner_settings
+
+string queryParams = @"{
+ 'limit': 1,
+ 'offset': 1
+}";
+dynamic response = sg.client.partner_settings.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Updates New Relic partner settings.
+// PATCH /partner_settings/new_relic
+
+string data = @"{
+ 'enable_subuser_statistics': true,
+ 'enabled': true,
+ 'license_key': ''
+}";
+dynamic response = sg.client.partner_settings.new_relic.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Returns all New Relic partner settings.
+// GET /partner_settings/new_relic
+
+dynamic response = sg.client.partner_settings.new_relic.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/scopes/scopes.cs b/examples/scopes/scopes.cs
new file mode 100644
index 0000000..c5a5c68
--- /dev/null
+++ b/examples/scopes/scopes.cs
@@ -0,0 +1,17 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve a list of scopes for which this user has access.
+// GET /scopes
+
+dynamic response = sg.client.scopes.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/stats/stats.cs b/examples/stats/stats.cs
new file mode 100644
index 0000000..a363952
--- /dev/null
+++ b/examples/stats/stats.cs
@@ -0,0 +1,24 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve global email statistics
+// GET /stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'limit': 1,
+ 'offset': 1,
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/subusers/subusers.cs b/examples/subusers/subusers.cs
new file mode 100644
index 0000000..208e13c
--- /dev/null
+++ b/examples/subusers/subusers.cs
@@ -0,0 +1,218 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Create Subuser
+// POST /subusers
+
+string data = @"{
+ 'email': 'John@example.com',
+ 'ips': [
+ '1.1.1.1',
+ '2.2.2.2'
+ ],
+ 'password': 'johns_password',
+ 'username': 'John@example.com'
+}";
+dynamic response = sg.client.subusers.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// List all Subusers
+// GET /subusers
+
+string queryParams = @"{
+ 'limit': 0,
+ 'offset': 0,
+ 'username': 'test_string'
+}";
+dynamic response = sg.client.subusers.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve Subuser Reputations
+// GET /subusers/reputations
+
+string queryParams = @"{
+ 'usernames': 'test_string'
+}";
+dynamic response = sg.client.subusers.reputations.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve email statistics for your subusers.
+// GET /subusers/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'limit': 1,
+ 'offset': 1,
+ 'start_date': '2016-01-01',
+ 'subusers': 'test_string'
+}";
+dynamic response = sg.client.subusers.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve monthly stats for all subusers
+// GET /subusers/stats/monthly
+
+string queryParams = @"{
+ 'date': 'test_string',
+ 'limit': 1,
+ 'offset': 1,
+ 'sort_by_direction': 'asc',
+ 'sort_by_metric': 'test_string',
+ 'subuser': 'test_string'
+}";
+dynamic response = sg.client.subusers.stats.monthly.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve the totals for each email statistic metric for all subusers.
+// GET /subusers/stats/sums
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'limit': 1,
+ 'offset': 1,
+ 'sort_by_direction': 'asc',
+ 'sort_by_metric': 'test_string',
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.subusers.stats.sums.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Enable/disable a subuser
+// PATCH /subusers/{subuser_name}
+
+string data = @"{
+ 'disabled': false
+}";
+var subuser_name = "test_url_param";
+dynamic response = sg.client.subusers._(subuser_name).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a subuser
+// DELETE /subusers/{subuser_name}
+
+var subuser_name = "test_url_param";
+dynamic response = sg.client.subusers._(subuser_name).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update IPs assigned to a subuser
+// PUT /subusers/{subuser_name}/ips
+
+string data = @"[
+ '127.0.0.1'
+]";
+var subuser_name = "test_url_param";
+dynamic response = sg.client.subusers._(subuser_name).ips.put(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update Monitor Settings for a subuser
+// PUT /subusers/{subuser_name}/monitor
+
+string data = @"{
+ 'email': 'example@example.com',
+ 'frequency': 500
+}";
+var subuser_name = "test_url_param";
+dynamic response = sg.client.subusers._(subuser_name).monitor.put(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Create monitor settings
+// POST /subusers/{subuser_name}/monitor
+
+string data = @"{
+ 'email': 'example@example.com',
+ 'frequency': 50000
+}";
+var subuser_name = "test_url_param";
+dynamic response = sg.client.subusers._(subuser_name).monitor.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve monitor settings for a subuser
+// GET /subusers/{subuser_name}/monitor
+
+var subuser_name = "test_url_param";
+dynamic response = sg.client.subusers._(subuser_name).monitor.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete monitor settings
+// DELETE /subusers/{subuser_name}/monitor
+
+var subuser_name = "test_url_param";
+dynamic response = sg.client.subusers._(subuser_name).monitor.delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve the monthly email statistics for a single subuser
+// GET /subusers/{subuser_name}/stats/monthly
+
+string queryParams = @"{
+ 'date': 'test_string',
+ 'limit': 0,
+ 'offset': 1,
+ 'sort_by_direction': 'asc',
+ 'sort_by_metric': 'test_string'
+}";
+var subuser_name = "test_url_param";
+dynamic response = sg.client.subusers._(subuser_name).stats.monthly.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/suppression/suppression.cs b/examples/suppression/suppression.cs
new file mode 100644
index 0000000..6cd819a
--- /dev/null
+++ b/examples/suppression/suppression.cs
@@ -0,0 +1,244 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve all blocks
+// GET /suppression/blocks
+
+string queryParams = @"{
+ 'end_time': 1,
+ 'limit': 1,
+ 'offset': 1,
+ 'start_time': 1
+}";
+dynamic response = sg.client.suppression.blocks.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete blocks
+// DELETE /suppression/blocks
+
+string data = @"{
+ 'delete_all': false,
+ 'emails': [
+ 'example1@example.com',
+ 'example2@example.com'
+ ]
+}";
+dynamic response = sg.client.suppression.blocks.delete(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a specific block
+// GET /suppression/blocks/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.suppression.blocks._(email).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a specific block
+// DELETE /suppression/blocks/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.suppression.blocks._(email).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all bounces
+// GET /suppression/bounces
+
+string queryParams = @"{
+ 'end_time': 0,
+ 'start_time': 0
+}";
+dynamic response = sg.client.suppression.bounces.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete bounces
+// DELETE /suppression/bounces
+
+string data = @"{
+ 'delete_all': true,
+ 'emails': [
+ 'example@example.com',
+ 'example2@example.com'
+ ]
+}";
+dynamic response = sg.client.suppression.bounces.delete(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a Bounce
+// GET /suppression/bounces/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.suppression.bounces._(email).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a bounce
+// DELETE /suppression/bounces/{email}
+
+string queryParams = @"{
+ 'email_address': 'example@example.com'
+}";
+var email = "test_url_param";
+dynamic response = sg.client.suppression.bounces._(email).delete(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all invalid emails
+// GET /suppression/invalid_emails
+
+string queryParams = @"{
+ 'end_time': 1,
+ 'limit': 1,
+ 'offset': 1,
+ 'start_time': 1
+}";
+dynamic response = sg.client.suppression.invalid_emails.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete invalid emails
+// DELETE /suppression/invalid_emails
+
+string data = @"{
+ 'delete_all': false,
+ 'emails': [
+ 'example1@example.com',
+ 'example2@example.com'
+ ]
+}";
+dynamic response = sg.client.suppression.invalid_emails.delete(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a specific invalid email
+// GET /suppression/invalid_emails/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.suppression.invalid_emails._(email).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a specific invalid email
+// DELETE /suppression/invalid_emails/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.suppression.invalid_emails._(email).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a specific spam report
+// GET /suppression/spam_report/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.suppression.spam_report._(email).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a specific spam report
+// DELETE /suppression/spam_report/{email}
+
+var email = "test_url_param";
+dynamic response = sg.client.suppression.spam_report._(email).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all spam reports
+// GET /suppression/spam_reports
+
+string queryParams = @"{
+ 'end_time': 1,
+ 'limit': 1,
+ 'offset': 1,
+ 'start_time': 1
+}";
+dynamic response = sg.client.suppression.spam_reports.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete spam reports
+// DELETE /suppression/spam_reports
+
+string data = @"{
+ 'delete_all': false,
+ 'emails': [
+ 'example1@example.com',
+ 'example2@example.com'
+ ]
+}";
+dynamic response = sg.client.suppression.spam_reports.delete(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all global suppressions
+// GET /suppression/unsubscribes
+
+string queryParams = @"{
+ 'end_time': 1,
+ 'limit': 1,
+ 'offset': 1,
+ 'start_time': 1
+}";
+dynamic response = sg.client.suppression.unsubscribes.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/templates/templates.cs b/examples/templates/templates.cs
new file mode 100644
index 0000000..beea4d0
--- /dev/null
+++ b/examples/templates/templates.cs
@@ -0,0 +1,140 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Create a transactional template.
+// POST /templates
+
+string data = @"{
+ 'name': 'example_name'
+}";
+dynamic response = sg.client.templates.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all transactional templates.
+// GET /templates
+
+dynamic response = sg.client.templates.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Edit a transactional template.
+// PATCH /templates/{template_id}
+
+string data = @"{
+ 'name': 'new_example_name'
+}";
+var template_id = "test_url_param";
+dynamic response = sg.client.templates._(template_id).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a single transactional template.
+// GET /templates/{template_id}
+
+var template_id = "test_url_param";
+dynamic response = sg.client.templates._(template_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a template.
+// DELETE /templates/{template_id}
+
+var template_id = "test_url_param";
+dynamic response = sg.client.templates._(template_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Create a new transactional template version.
+// POST /templates/{template_id}/versions
+
+string data = @"{
+ 'active': 1,
+ 'html_content': '<%body%>',
+ 'name': 'example_version_name',
+ 'plain_content': '<%body%>',
+ 'subject': '<%subject%>',
+ 'template_id': 'ddb96bbc-9b92-425e-8979-99464621b543'
+}";
+var template_id = "test_url_param";
+dynamic response = sg.client.templates._(template_id).versions.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Edit a transactional template version.
+// PATCH /templates/{template_id}/versions/{version_id}
+
+string data = @"{
+ 'active': 1,
+ 'html_content': '<%body%>',
+ 'name': 'updated_example_name',
+ 'plain_content': '<%body%>',
+ 'subject': '<%subject%>'
+}";
+var template_id = "test_url_param";
+var version_id = "test_url_param";
+dynamic response = sg.client.templates._(template_id).versions._(version_id).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a specific transactional template version.
+// GET /templates/{template_id}/versions/{version_id}
+
+var template_id = "test_url_param";
+var version_id = "test_url_param";
+dynamic response = sg.client.templates._(template_id).versions._(version_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a transactional template version.
+// DELETE /templates/{template_id}/versions/{version_id}
+
+var template_id = "test_url_param";
+var version_id = "test_url_param";
+dynamic response = sg.client.templates._(template_id).versions._(version_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Activate a transactional template version.
+// POST /templates/{template_id}/versions/{version_id}/activate
+
+var template_id = "test_url_param";
+var version_id = "test_url_param";
+dynamic response = sg.client.templates._(template_id).versions._(version_id).activate.post();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/trackingsettings/trackingsettings.cs b/examples/trackingsettings/trackingsettings.cs
new file mode 100644
index 0000000..cba044d
--- /dev/null
+++ b/examples/trackingsettings/trackingsettings.cs
@@ -0,0 +1,123 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Retrieve Tracking Settings
+// GET /tracking_settings
+
+string queryParams = @"{
+ 'limit': 1,
+ 'offset': 1
+}";
+dynamic response = sg.client.tracking_settings.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update Click Tracking Settings
+// PATCH /tracking_settings/click
+
+string data = @"{
+ 'enabled': true
+}";
+dynamic response = sg.client.tracking_settings.click.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve Click Track Settings
+// GET /tracking_settings/click
+
+dynamic response = sg.client.tracking_settings.click.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update Google Analytics Settings
+// PATCH /tracking_settings/google_analytics
+
+string data = @"{
+ 'enabled': true,
+ 'utm_campaign': 'website',
+ 'utm_content': '',
+ 'utm_medium': 'email',
+ 'utm_source': 'sendgrid.com',
+ 'utm_term': ''
+}";
+dynamic response = sg.client.tracking_settings.google_analytics.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve Google Analytics Settings
+// GET /tracking_settings/google_analytics
+
+dynamic response = sg.client.tracking_settings.google_analytics.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update Open Tracking Settings
+// PATCH /tracking_settings/open
+
+string data = @"{
+ 'enabled': true
+}";
+dynamic response = sg.client.tracking_settings.open.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Get Open Tracking Settings
+// GET /tracking_settings/open
+
+dynamic response = sg.client.tracking_settings.open.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update Subscription Tracking Settings
+// PATCH /tracking_settings/subscription
+
+string data = @"{
+ 'enabled': true,
+ 'html_content': 'html content',
+ 'landing': 'landing page html',
+ 'plain_content': 'text content',
+ 'replace': 'replacement tag',
+ 'url': 'url'
+}";
+dynamic response = sg.client.tracking_settings.subscription.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve Subscription Tracking Settings
+// GET /tracking_settings/subscription
+
+dynamic response = sg.client.tracking_settings.subscription.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/user/user.cs b/examples/user/user.cs
new file mode 100644
index 0000000..c81acc6
--- /dev/null
+++ b/examples/user/user.cs
@@ -0,0 +1,271 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Get a user's account information.
+// GET /user/account
+
+dynamic response = sg.client.user.account.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve your credit balance
+// GET /user/credits
+
+dynamic response = sg.client.user.credits.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update your account email address
+// PUT /user/email
+
+string data = @"{
+ 'email': 'example@example.com'
+}";
+dynamic response = sg.client.user.email.put(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve your account email address
+// GET /user/email
+
+dynamic response = sg.client.user.email.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update your password
+// PUT /user/password
+
+string data = @"{
+ 'new_password': 'new_password',
+ 'old_password': 'old_password'
+}";
+dynamic response = sg.client.user.password.put(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update a user's profile
+// PATCH /user/profile
+
+string data = @"{
+ 'city': 'Orange',
+ 'first_name': 'Example',
+ 'last_name': 'User'
+}";
+dynamic response = sg.client.user.profile.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Get a user's profile
+// GET /user/profile
+
+dynamic response = sg.client.user.profile.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Cancel or pause a scheduled send
+// POST /user/scheduled_sends
+
+string data = @"{
+ 'batch_id': 'YOUR_BATCH_ID',
+ 'status': 'pause'
+}";
+dynamic response = sg.client.user.scheduled_sends.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all scheduled sends
+// GET /user/scheduled_sends
+
+dynamic response = sg.client.user.scheduled_sends.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update user scheduled send information
+// PATCH /user/scheduled_sends/{batch_id}
+
+string data = @"{
+ 'status': 'pause'
+}";
+var batch_id = "test_url_param";
+dynamic response = sg.client.user.scheduled_sends._(batch_id).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve scheduled send
+// GET /user/scheduled_sends/{batch_id}
+
+var batch_id = "test_url_param";
+dynamic response = sg.client.user.scheduled_sends._(batch_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a cancellation or pause of a scheduled send
+// DELETE /user/scheduled_sends/{batch_id}
+
+var batch_id = "test_url_param";
+dynamic response = sg.client.user.scheduled_sends._(batch_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update Enforced TLS settings
+// PATCH /user/settings/enforced_tls
+
+string data = @"{
+ 'require_tls': true,
+ 'require_valid_cert': false
+}";
+dynamic response = sg.client.user.settings.enforced_tls.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve current Enforced TLS settings.
+// GET /user/settings/enforced_tls
+
+dynamic response = sg.client.user.settings.enforced_tls.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update your username
+// PUT /user/username
+
+string data = @"{
+ 'username': 'test_username'
+}";
+dynamic response = sg.client.user.username.put(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve your username
+// GET /user/username
+
+dynamic response = sg.client.user.username.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update Event Notification Settings
+// PATCH /user/webhooks/event/settings
+
+string data = @"{
+ 'bounce': true,
+ 'click': true,
+ 'deferred': true,
+ 'delivered': true,
+ 'dropped': true,
+ 'enabled': true,
+ 'group_resubscribe': true,
+ 'group_unsubscribe': true,
+ 'open': true,
+ 'processed': true,
+ 'spam_report': true,
+ 'unsubscribe': true,
+ 'url': 'url'
+}";
+dynamic response = sg.client.user.webhooks._("event").settings.patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve Event Webhook settings
+// GET /user/webhooks/event/settings
+
+dynamic response = sg.client.user.webhooks._("event").settings.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Test Event Notification Settings
+// POST /user/webhooks/event/test
+
+string data = @"{
+ 'url': 'url'
+}";
+dynamic response = sg.client.user.webhooks._("event").test.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve Parse Webhook settings
+// GET /user/webhooks/parse/settings
+
+dynamic response = sg.client.user.webhooks.parse.settings.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieves Inbound Parse Webhook statistics.
+// GET /user/webhooks/parse/stats
+
+string queryParams = @"{
+ 'aggregated_by': 'day',
+ 'end_date': '2016-04-01',
+ 'limit': 'test_string',
+ 'offset': 'test_string',
+ 'start_date': '2016-01-01'
+}";
+dynamic response = sg.client.user.webhooks.parse.stats.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
diff --git a/examples/whitelabel/whitelabel.cs b/examples/whitelabel/whitelabel.cs
new file mode 100644
index 0000000..80be1c1
--- /dev/null
+++ b/examples/whitelabel/whitelabel.cs
@@ -0,0 +1,359 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+////////////////////////////////////////////////////////
+// Create a domain whitelabel.
+// POST /whitelabel/domains
+
+string data = @"{
+ 'automatic_security': false,
+ 'custom_spf': true,
+ 'default': true,
+ 'domain': 'example.com',
+ 'ips': [
+ '192.168.1.1',
+ '192.168.1.2'
+ ],
+ 'subdomain': 'news',
+ 'username': 'john@example.com'
+}";
+dynamic response = sg.client.whitelabel.domains.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// List all domain whitelabels.
+// GET /whitelabel/domains
+
+string queryParams = @"{
+ 'domain': 'test_string',
+ 'exclude_subusers': 'true',
+ 'limit': 1,
+ 'offset': 1,
+ 'username': 'test_string'
+}";
+dynamic response = sg.client.whitelabel.domains.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Get the default domain whitelabel.
+// GET /whitelabel/domains/default
+
+dynamic response = sg.client.whitelabel.domains._("default").get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// List the domain whitelabel associated with the given user.
+// GET /whitelabel/domains/subuser
+
+dynamic response = sg.client.whitelabel.domains.subuser.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Disassociate a domain whitelabel from a given user.
+// DELETE /whitelabel/domains/subuser
+
+dynamic response = sg.client.whitelabel.domains.subuser.delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update a domain whitelabel.
+// PATCH /whitelabel/domains/{domain_id}
+
+string data = @"{
+ 'custom_spf': true,
+ 'default': false
+}";
+var domain_id = "test_url_param";
+dynamic response = sg.client.whitelabel.domains._(domain_id).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a domain whitelabel.
+// GET /whitelabel/domains/{domain_id}
+
+var domain_id = "test_url_param";
+dynamic response = sg.client.whitelabel.domains._(domain_id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a domain whitelabel.
+// DELETE /whitelabel/domains/{domain_id}
+
+var domain_id = "test_url_param";
+dynamic response = sg.client.whitelabel.domains._(domain_id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Associate a domain whitelabel with a given user.
+// POST /whitelabel/domains/{domain_id}/subuser
+
+string data = @"{
+ 'username': 'jane@example.com'
+}";
+var domain_id = "test_url_param";
+dynamic response = sg.client.whitelabel.domains._(domain_id).subuser.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Add an IP to a domain whitelabel.
+// POST /whitelabel/domains/{id}/ips
+
+string data = @"{
+ 'ip': '192.168.0.1'
+}";
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.domains._(id).ips.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Remove an IP from a domain whitelabel.
+// DELETE /whitelabel/domains/{id}/ips/{ip}
+
+var id = "test_url_param";
+var ip = "test_url_param";
+dynamic response = sg.client.whitelabel.domains._(id).ips._(ip).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Validate a domain whitelabel.
+// POST /whitelabel/domains/{id}/validate
+
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.domains._(id).validate.post();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Create an IP whitelabel
+// POST /whitelabel/ips
+
+string data = @"{
+ 'domain': 'example.com',
+ 'ip': '192.168.1.1',
+ 'subdomain': 'email'
+}";
+dynamic response = sg.client.whitelabel.ips.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all IP whitelabels
+// GET /whitelabel/ips
+
+string queryParams = @"{
+ 'ip': 'test_string',
+ 'limit': 1,
+ 'offset': 1
+}";
+dynamic response = sg.client.whitelabel.ips.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve an IP whitelabel
+// GET /whitelabel/ips/{id}
+
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.ips._(id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete an IP whitelabel
+// DELETE /whitelabel/ips/{id}
+
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.ips._(id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Validate an IP whitelabel
+// POST /whitelabel/ips/{id}/validate
+
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.ips._(id).validate.post();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Create a Link Whitelabel
+// POST /whitelabel/links
+
+string data = @"{
+ 'default': true,
+ 'domain': 'example.com',
+ 'subdomain': 'mail'
+}";
+string queryParams = @"{
+ 'limit': 1,
+ 'offset': 1
+}";
+dynamic response = sg.client.whitelabel.links.post(requestBody: data, queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve all link whitelabels
+// GET /whitelabel/links
+
+string queryParams = @"{
+ 'limit': 1
+}";
+dynamic response = sg.client.whitelabel.links.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a Default Link Whitelabel
+// GET /whitelabel/links/default
+
+string queryParams = @"{
+ 'domain': 'test_string'
+}";
+dynamic response = sg.client.whitelabel.links._("default").get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve Associated Link Whitelabel
+// GET /whitelabel/links/subuser
+
+string queryParams = @"{
+ 'username': 'test_string'
+}";
+dynamic response = sg.client.whitelabel.links.subuser.get(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Disassociate a Link Whitelabel
+// DELETE /whitelabel/links/subuser
+
+string queryParams = @"{
+ 'username': 'test_string'
+}";
+dynamic response = sg.client.whitelabel.links.subuser.delete(queryParams: queryParams);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Update a Link Whitelabel
+// PATCH /whitelabel/links/{id}
+
+string data = @"{
+ 'default': true
+}";
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.links._(id).patch(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Retrieve a Link Whitelabel
+// GET /whitelabel/links/{id}
+
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.links._(id).get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Delete a Link Whitelabel
+// DELETE /whitelabel/links/{id}
+
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.links._(id).delete();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Validate a Link Whitelabel
+// POST /whitelabel/links/{id}/validate
+
+var id = "test_url_param";
+dynamic response = sg.client.whitelabel.links._(id).validate.post();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+
+////////////////////////////////////////////////////////
+// Associate a Link Whitelabel
+// POST /whitelabel/links/{link_id}/subuser
+
+string data = @"{
+ 'username': 'jane@example.com'
+}";
+var link_id = "test_url_param";
+dynamic response = sg.client.whitelabel.links._(link_id).subuser.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.Body.ReadAsStringAsync().Result);
+Console.WriteLine(response.Headers.ToString());
+Console.ReadLine();
+