private static void RunInternationalAddressValidationExample(APIResource resource)
        {
            Hashtable parameters = new Hashtable();

            parameters.Add("name", "Shippo Hippo");
            parameters.Add("company", "Shippo");
            parameters.Add("street_no", null);
            parameters.Add("street1", "40 Bay St");
            parameters.Add("street2", null);
            parameters.Add("city", "Toronto");
            parameters.Add("state", "ON");
            parameters.Add("zip", "M5J 2X2");
            parameters.Add("country", "CA");
            parameters.Add("phone", "+1 555 341 9393");
            parameters.Add("email", "*****@*****.**");
            parameters.Add("metadata", "Customer ID 123456");
            parameters.Add("validate", "true");
            Address address = resource.CreateAddress(parameters);

            Console.Out.WriteLine("Address IsValid: " + address.ValidationResults.IsValid);
            if (address.ValidationResults.Messages != null)
            {
                foreach (ValidationMessage message in address.ValidationResults.Messages)
                {
                    Console.Out.WriteLine("Address Message Code: " + message.Code);
                    Console.Out.WriteLine("Address Message Text: " + message.Text);
                    Console.Out.WriteLine();
                }
            }
            Console.Out.WriteLine("Address Latitude: " + address.Latitude);
            Console.Out.WriteLine("Address Longitude: " + address.Longitude);
        }
        public void Test()
        {
            var resource = new APIResource("shippo_live_c436088fca4e8ddee7df15da1c46458777e9d687");

            // Create address (from)
            var fromAdr = new Hashtable();

            fromAdr.Add("name", "Mr. Thierry Habart");
            fromAdr.Add("street1", "223 avenue des croix du feu");
            fromAdr.Add("city", "BRUXELLES");
            fromAdr.Add("zip", "1020");
            fromAdr.Add("country", "BE");
            fromAdr.Add("phone", "0485350536");
            fromAdr.Add("email", "*****@*****.**");

            var fromAddress = resource.CreateAddress(fromAdr);

            // Create address (to)
            var toAdr = new Hashtable();

            toAdr.Add("name", "Mr. Donabedian David");
            toAdr.Add("street1", "rue solleveld 20");
            toAdr.Add("city", "BRUXELLES");
            toAdr.Add("zip", "1200");
            toAdr.Add("country", "BE");
            toAdr.Add("phone", "0485350536");
            toAdr.Add("email", "*****@*****.**");

            var toAddress = resource.CreateAddress(toAdr);

            // Create a parcel (colis)
            var parcel = new Hashtable();

            parcel.Add("length", 5);
            parcel.Add("width", 5);
            parcel.Add("height", 5);
            parcel.Add("distance_unit", "cm");
            parcel.Add("weight", 2);
            parcel.Add("mass_unit", "kg");

            var p = resource.CreateParcel(parcel);

            // Create shippment.
            var shippment  = new Hashtable();
            var lstParcels = new List <string> {
                p.ObjectId
            };

            shippment.Add("address_to", toAddress.ObjectId);
            shippment.Add("address_from", fromAddress.ObjectId);
            shippment.Add("object_purpose", "PURCHASE");
            shippment.Add("parcels", lstParcels);
            shippment.Add("insurance_currency", "EUR");
            shippment.Add("insurance_amount", 0);
            shippment.Add("submission_type", "DROPOFF");
            shippment.Add("submission_date", "2017-09-04T23:59:50+00:00");
            var ship = resource.CreateShipment(shippment);

            // Get rates
            var    rates = resource.GetShippingRatesSync(ship.ObjectId);
            string s     = "";
        }
        public object Post(ShippmentDTO request)
        {
            //APIResource resource = new APIResource("shippo_test_5f00f661c1f2f19191bfba82cc8575fddb06c202");
            //APIResource resource = new APIResource("shippo_live_b248c98357917b42d991df307d6573359a901ea9");
            try {
                //to address
                Hashtable toAddressTable = new Hashtable();
                toAddressTable.Add("name", request.To.Name);
                toAddressTable.Add("company", request.To.Company);
                toAddressTable.Add("street_no", request.To.StreetNumber);
                toAddressTable.Add("street1", request.To.Street1);
                toAddressTable.Add("city", request.To.City);
                toAddressTable.Add("state", request.To.State);
                toAddressTable.Add("zip", request.To.Zip);
                toAddressTable.Add("country", request.To.Country);
                toAddressTable.Add("validate", "false");

                Address address = resource.CreateAddress(toAddressTable);

                // from address
                Hashtable fromAddressTable = new Hashtable();
                fromAddressTable.Add("name", request.From.Name);
                fromAddressTable.Add("company", request.From.Company);
                fromAddressTable.Add("street_no", request.From.StreetNumber);
                fromAddressTable.Add("street1", request.From.Street1);
                fromAddressTable.Add("city", request.From.City);
                fromAddressTable.Add("state", request.From.State);
                fromAddressTable.Add("zip", request.From.Zip);
                fromAddressTable.Add("country", request.From.Country);
                fromAddressTable.Add("validate", "false");

                List <Hashtable> parcels = new List <Hashtable>();

                foreach (var parcel in request.Parcels)
                {
                    Hashtable parcelTable = new Hashtable();
                    parcelTable.Add("length", parcel.Length);
                    parcelTable.Add("width", parcel.Width);
                    parcelTable.Add("height", parcel.Height);
                    parcelTable.Add("distance_unit", parcel.Distance_unit);
                    parcelTable.Add("weight", parcel.Weight);
                    parcelTable.Add("mass_unit", parcel.Mass_unit);
                    parcels.Add(parcelTable);
                }

                var apiResponse = resource.CreateShipment(new Hashtable()
                {
                    { "address_to", toAddressTable },
                    { "address_from", fromAddressTable },
                    { "parcels", parcels },
                    { "async", false }
                });

                var response = "{\"success\": \"success\" ," +
                               "\"shipment_id\" : \"" + apiResponse.ObjectId + "\"," +
                               "\"rates\" : " + JSON.stringify(apiResponse.Rates) + "}";

                return(response);
            }
            catch (Exception e)
            {
                var response = "{\"error\": \"exception caught by server\" ," +
                               "\"details\" : " + e.Message.ToString() + "}";
                return(response);
            }
        }