summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElmer Thomas <elmer@thinkingserious.com>2016-06-01 10:50:02 -0700
committerElmer Thomas <elmer@thinkingserious.com>2016-06-01 10:50:02 -0700
commit4cde4e7ee0329c179fa8745655a602521f1c2dd8 (patch)
treeb1cf20f427ef68c644f6c0cd724b72440d53728d
parent5e5c58f4245647611eb33e03d26d032b7ec2b26e (diff)
downloadsendgrid-csharp-4cde4e7ee0329c179fa8745655a602521f1c2dd8.zip
sendgrid-csharp-4cde4e7ee0329c179fa8745655a602521f1c2dd8.tar.gz
sendgrid-csharp-4cde4e7ee0329c179fa8745655a602521f1c2dd8.tar.bz2
Added examples for v3 Web API endpoints
-rw-r--r--examples/accesssettings/accesssettings.cs87
-rw-r--r--examples/apikeys/apikeys.cs84
-rw-r--r--examples/asm/asm.cs138
-rw-r--r--examples/browsers/browsers.cs25
-rw-r--r--examples/campaigns/campaigns.cs158
-rw-r--r--examples/categories/categories.cs57
-rw-r--r--examples/clients/clients.cs37
-rw-r--r--examples/contactdb/contactdb.cs424
-rw-r--r--examples/devices/devices.cs24
-rw-r--r--examples/geo/geo.cs25
-rw-r--r--examples/ips/ips.cs162
-rw-r--r--examples/mail/mail.cs179
-rw-r--r--examples/mailboxproviders/mailboxproviders.cs25
-rw-r--r--examples/mailsettings/mailsettings.cs224
-rw-r--r--examples/partnersettings/partnersettings.cs44
-rw-r--r--examples/scopes/scopes.cs17
-rw-r--r--examples/stats/stats.cs24
-rw-r--r--examples/subusers/subusers.cs205
-rw-r--r--examples/suppression/suppression.cs228
-rw-r--r--examples/templates/templates.cs131
-rw-r--r--examples/trackingsettings/trackingsettings.cs115
-rw-r--r--examples/user/user.cs251
-rw-r--r--examples/whitelabel/whitelabel.cs333
23 files changed, 2997 insertions, 0 deletions
diff --git a/examples/accesssettings/accesssettings.cs b/examples/accesssettings/accesssettings.cs
new file mode 100644
index 0000000..ea3b19c
--- /dev/null
+++ b/examples/accesssettings/accesssettings.cs
@@ -0,0 +1,87 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/apikeys/apikeys.cs b/examples/apikeys/apikeys.cs
new file mode 100644
index 0000000..763dc0f
--- /dev/null
+++ b/examples/apikeys/apikeys.cs
@@ -0,0 +1,84 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/asm/asm.cs b/examples/asm/asm.cs
new file mode 100644
index 0000000..b63ee7b
--- /dev/null
+++ b/examples/asm/asm.cs
@@ -0,0 +1,138 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+string _apiKey = Environment.GetEnvironmentVariable("SENDGRID_APIKEY", EnvironmentVariableTarget.User);
+dynamic sg = new SendGrid.SendGridAPIClient(_apiKey);
+
+##################################################
+# Create a Group #
+# POST /asm/groups #
+
+string data = @"{
+ 'description': 'A group description',
+ 'is_default': false,
+ 'name': 'A group name'
+}";
+dynamic response = sg.client.asm.groups.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all suppression groups associated with the user. #
+# GET /asm/groups #
+
+dynamic response = sg.client.asm.groups.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/browsers/browsers.cs b/examples/browsers/browsers.cs
new file mode 100644
index 0000000..a0cc53b
--- /dev/null
+++ b/examples/browsers/browsers.cs
@@ -0,0 +1,25 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/campaigns/campaigns.cs b/examples/campaigns/campaigns.cs
new file mode 100644
index 0000000..0d40cb1
--- /dev/null
+++ b/examples/campaigns/campaigns.cs
@@ -0,0 +1,158 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/categories/categories.cs b/examples/categories/categories.cs
new file mode 100644
index 0000000..2cea83c
--- /dev/null
+++ b/examples/categories/categories.cs
@@ -0,0 +1,57 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/clients/clients.cs b/examples/clients/clients.cs
new file mode 100644
index 0000000..5ff7d56
--- /dev/null
+++ b/examples/clients/clients.cs
@@ -0,0 +1,37 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/contactdb/contactdb.cs b/examples/contactdb/contactdb.cs
new file mode 100644
index 0000000..3bb384d
--- /dev/null
+++ b/examples/contactdb/contactdb.cs
@@ -0,0 +1,424 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all custom fields #
+# GET /contactdb/custom_fields #
+
+dynamic response = sg.client.contactdb.custom_fields.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all lists #
+# GET /contactdb/lists #
+
+dynamic response = sg.client.contactdb.lists.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve a Count of Recipients #
+# GET /contactdb/recipients/count #
+
+dynamic response = sg.client.contactdb.recipients.count.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve reserved fields #
+# GET /contactdb/reserved_fields #
+
+dynamic response = sg.client.contactdb.reserved_fields.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all segments #
+# GET /contactdb/segments #
+
+dynamic response = sg.client.contactdb.segments.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/devices/devices.cs b/examples/devices/devices.cs
new file mode 100644
index 0000000..e480f3d
--- /dev/null
+++ b/examples/devices/devices.cs
@@ -0,0 +1,24 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/geo/geo.cs b/examples/geo/geo.cs
new file mode 100644
index 0000000..7003650
--- /dev/null
+++ b/examples/geo/geo.cs
@@ -0,0 +1,25 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/ips/ips.cs b/examples/ips/ips.cs
new file mode 100644
index 0000000..9b9bfe0
--- /dev/null
+++ b/examples/ips/ips.cs
@@ -0,0 +1,162 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all assigned IPs #
+# GET /ips/assigned #
+
+dynamic response = sg.client.ips.assigned.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all IP pools. #
+# GET /ips/pools #
+
+dynamic response = sg.client.ips.pools.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all IPs currently in warmup #
+# GET /ips/warmup #
+
+dynamic response = sg.client.ips.warmup.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/mail/mail.cs b/examples/mail/mail.cs
new file mode 100644
index 0000000..7e329d0
--- /dev/null
+++ b/examples/mail/mail.cs
@@ -0,0 +1,179 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# v3 Mail Send Beta #
+# POST /mail/send/beta #
+
+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:ii_139db99fdb5c3704'></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.beta.post(requestBody: data);
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/mailboxproviders/mailboxproviders.cs b/examples/mailboxproviders/mailboxproviders.cs
new file mode 100644
index 0000000..c58c79a
--- /dev/null
+++ b/examples/mailboxproviders/mailboxproviders.cs
@@ -0,0 +1,25 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/mailsettings/mailsettings.cs b/examples/mailsettings/mailsettings.cs
new file mode 100644
index 0000000..5005d69
--- /dev/null
+++ b/examples/mailsettings/mailsettings.cs
@@ -0,0 +1,224 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all BCC mail settings #
+# GET /mail_settings/bcc #
+
+dynamic response = sg.client.mail_settings.bcc.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve footer mail settings #
+# GET /mail_settings/footer #
+
+dynamic response = sg.client.mail_settings.footer.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve legacy template mail settings #
+# GET /mail_settings/template #
+
+dynamic response = sg.client.mail_settings.template.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/partnersettings/partnersettings.cs b/examples/partnersettings/partnersettings.cs
new file mode 100644
index 0000000..d3ca871
--- /dev/null
+++ b/examples/partnersettings/partnersettings.cs
@@ -0,0 +1,44 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/scopes/scopes.cs b/examples/scopes/scopes.cs
new file mode 100644
index 0000000..5dcf278
--- /dev/null
+++ b/examples/scopes/scopes.cs
@@ -0,0 +1,17 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/stats/stats.cs b/examples/stats/stats.cs
new file mode 100644
index 0000000..7506b9b
--- /dev/null
+++ b/examples/stats/stats.cs
@@ -0,0 +1,24 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/subusers/subusers.cs b/examples/subusers/subusers.cs
new file mode 100644
index 0000000..f680426
--- /dev/null
+++ b/examples/subusers/subusers.cs
@@ -0,0 +1,205 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/suppression/suppression.cs b/examples/suppression/suppression.cs
new file mode 100644
index 0000000..9eb4f69
--- /dev/null
+++ b/examples/suppression/suppression.cs
@@ -0,0 +1,228 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/templates/templates.cs b/examples/templates/templates.cs
new file mode 100644
index 0000000..a897f8d
--- /dev/null
+++ b/examples/templates/templates.cs
@@ -0,0 +1,131 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all transactional templates. #
+# GET /templates #
+
+dynamic response = sg.client.templates.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/trackingsettings/trackingsettings.cs b/examples/trackingsettings/trackingsettings.cs
new file mode 100644
index 0000000..1c8da6c
--- /dev/null
+++ b/examples/trackingsettings/trackingsettings.cs
@@ -0,0 +1,115 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve Click Track Settings #
+# GET /tracking_settings/click #
+
+dynamic response = sg.client.tracking_settings.click.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Get Open Tracking Settings #
+# GET /tracking_settings/open #
+
+dynamic response = sg.client.tracking_settings.open.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve Subscription Tracking Settings #
+# GET /tracking_settings/subscription #
+
+dynamic response = sg.client.tracking_settings.subscription.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/user/user.cs b/examples/user/user.cs
new file mode 100644
index 0000000..d54706f
--- /dev/null
+++ b/examples/user/user.cs
@@ -0,0 +1,251 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve your credit balance #
+# GET /user/credits #
+
+dynamic response = sg.client.user.credits.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve your account email address #
+# GET /user/email #
+
+dynamic response = sg.client.user.email.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Get a user's profile #
+# GET /user/profile #
+
+dynamic response = sg.client.user.profile.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve all scheduled sends #
+# GET /user/scheduled_sends #
+
+dynamic response = sg.client.user.scheduled_sends.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Retrieve your username #
+# GET /user/username #
+
+dynamic response = sg.client.user.username.get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
diff --git a/examples/whitelabel/whitelabel.cs b/examples/whitelabel/whitelabel.cs
new file mode 100644
index 0000000..409204e
--- /dev/null
+++ b/examples/whitelabel/whitelabel.cs
@@ -0,0 +1,333 @@
+using System;
+using SendGrid.Helpers.Mail;
+using System.Collections.Generic;
+using System.Net;
+
+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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# Get the default domain whitelabel. #
+# GET /whitelabel/domains/default #
+
+dynamic response = sg.client.whitelabel.domains._("default").get();
+Console.WriteLine(response.StatusCode);
+Console.WriteLine(response.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+
+##################################################
+# 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.ResponseBody.ReadAsStringAsync().Result);
+Console.WriteLine(response.ResponseHeaders.ToString());
+