/// <summary>
        /// Retrieve a Batch from its id.
        /// </summary>
        /// <param name="id">String representing a Batch. Starts with "batch_".</param>
        /// <returns>Batch instance.</returns>
        public async Task <Batch> GetBatch(
            string id)
        {
            var request = new EasyPostRequest("batches/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <Batch>(request));
        }
Example #2
0
        /// <summary>
        /// Retrieve a Rate from its id.
        /// </summary>
        /// <param name="id">String representing a Rate. Starts with "rate_".</param>
        /// <returns>CarrierRate instance.</returns>
        public async Task <CarrierRate> GetRate(
            string id)
        {
            var request = new EasyPostRequest("rates/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <CarrierRate>(request));
        }
        /// <summary>
        /// Buy labels for all shipments within a batch. The Batch's state must be "created" before purchasing.
        /// </summary>
        /// <param name="id">Batch id to add the shipments to</param>
        /// <returns>Batch instance.</returns>
        public async Task <Batch> BuyLabelsForBatch(
            string id)
        {
            var request = new EasyPostRequest("batches/{id}/buy", Method.POST);

            request.AddUrlSegment("id", id);

            return(await Execute <Batch>(request));
        }
Example #4
0
        /// <summary>
        /// Retrieve an Item from its id or reference.
        /// </summary>
        /// <param name="id">String representing a Item. Starts with "item_" if passing an id.</param>
        /// <returns>Item instance.</returns>
        public async Task <Item> GetItem(
            string id)
        {
            var request = new EasyPostRequest("items/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <Item>(request));
        }
        /// <summary>
        /// Asychronously generate a scan form for the batch.
        /// </summary>
        /// <param name="id">Batch id to generate the label for</param>
        /// <returns>Batch instance.</returns>
        public async Task <Batch> GenerateScanFormForBatch(
            string id)
        {
            var request = new EasyPostRequest("batches/{id}/scan_form", Method.POST);

            request.AddUrlSegment("id", id);

            return(await Execute <Batch>(request));
        }
        /// <summary>
        /// Retrieve a CarrierAccount from its id.
        /// </summary>
        /// <param name="id">String representing a carrier account. Starts with "ca_".</param>
        /// <returns>CarrierAccount instance.</returns>
        public async Task <CarrierAccount> GetCarrierAccount(
            string id)
        {
            var request = new EasyPostRequest("carrier_accounts/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <CarrierAccount>(request));
        }
        /// <summary>
        /// Retrieve a Parcel from its id.
        /// </summary>
        /// <param name="id">String representing a Parcel. Starts with "prcl_".</param>
        /// <returns>Parcel instance.</returns>
        public async Task <Parcel> GetParcel(
            string id)
        {
            var request = new EasyPostRequest("parcels/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <Parcel>(request));
        }
Example #8
0
        /// <summary>
        /// Retrieve a Shipment from its id.
        /// </summary>
        /// <param name="id">String representing a Shipment. Starts with "shp_".</param>
        /// <returns>Shipment instance.</returns>
        public Task <Shipment> GetShipment(
            string id)
        {
            var request = new EasyPostRequest("shipments/{id}");

            request.AddUrlSegment("id", id);

            return(Execute <Shipment>(request));
        }
Example #9
0
        /// <summary>
        /// Cancel this pickup.
        /// </summary>
        /// <param name="id">Pickup id to cancel</param>
        /// <returns>Pickup instance.</returns>
        public async Task <Pickup> CancelPickp(
            string id)
        {
            var request = new EasyPostRequest("pickups/{id}/cancel", Method.POST);

            request.AddUrlSegment("id", id);

            return(await Execute <Pickup>(request));
        }
Example #10
0
        /// <summary>
        /// Retrieve a Tracker from its id.
        /// </summary>
        /// <param name="id">String representing a Tracker. Starts with "trk_".</param>
        /// <returns>Tracker instance.</returns>
        public async Task <Tracker> GetTracker(
            string id)
        {
            var request = new EasyPostRequest("trackers/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <Tracker>(request));
        }
        /// <summary>
        /// Send a refund request to the carrier the shipment was purchased from.
        /// </summary>
        /// <param name="id">The id of the shipment to refund</param>
        /// <returns>Shipment instance.</returns>
        public async Task <Shipment> RefundShipment(
            string id)
        {
            var request = new EasyPostRequest("shipments/{id}/refund");

            request.AddUrlSegment("id", id);

            return(await Execute <Shipment>(request));
        }
Example #12
0
        /// <summary>
        /// Retrieve a Pickup from its id.
        /// </summary>
        /// <param name="id">String representing a Pickup. Starts with "pickup_".</param>
        /// <returns>Pickup instance.</returns>
        public async Task <Pickup> GetPickup(
            string id)
        {
            var request = new EasyPostRequest("pickups/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <Pickup>(request));
        }
Example #13
0
        /// <summary>
        /// Retrieve a Event from its id.
        /// </summary>
        /// <param name="id">String representing a Event. Starts with "evt_".</param>
        /// <returns>EasyPost.Event instance.</returns>
        public async Task <Event> GetEvent(
            string id)
        {
            var request = new EasyPostRequest("events/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <Event>(request));
        }
        /// <summary>
        /// Retrieve a CustomsInfo from its id.
        /// </summary>
        /// <param name="id">String representing a CustomsInfo. Starts with "cstinfo_".</param>
        /// <returns>CustomsInfo instance.</returns>
        public async Task <CustomsInfo> GetCustomsInfo(
            string id)
        {
            var request = new EasyPostRequest("customs_infos/{id}");

            request.AddUrlSegment("id", id);

            return(await Execute <CustomsInfo>(request));
        }
Example #15
0
        /// <summary>
        /// Retrieve an Address from its id.
        /// </summary>
        /// <param name="id">String representing an Address. Starts with "adr_".</param>
        /// <returns>EasyPost.Address instance.</returns>
        public Task <Address> GetAddress(
            string id)
        {
            var request = new EasyPostRequest("addresses/{id}");

            request.AddUrlSegment("id", id);

            return(Execute <Address>(request));
        }
Example #16
0
        /// <summary>
        /// Update the User associated with the api_key specified.
        /// </summary>
        /// <param name="user">User parameters to update</param>
        public async Task <User> UpdateUser(
            User user)
        {
            var request = new EasyPostRequest("users/{id}", Method.PUT);

            request.AddUrlSegment("id", user.Id);
            request.AddBody(user.AsDictionary(), "user");

            return(await Execute <User>(request));
        }
        /// <summary>
        /// Update this CarrierAccount.
        /// </summary>
        /// <param name="carrierAccount">Carrier account details</param>
        /// <returns>CarrierAccount instance.</returns>
        public async Task <CarrierAccount> UpdateCarrierAccount(
            CarrierAccount carrierAccount)
        {
            var request = new EasyPostRequest("carrier_accounts/{id}", Method.PUT);

            request.AddUrlSegment("id", carrierAccount.Id);
            request.AddBody(carrierAccount.AsDictionary(), "carrier_account");

            return(await Execute <CarrierAccount>(request));
        }
        /// <summary>
        /// Generate a barcode for this shipment.
        /// </summary>
        /// <param name="id">The id of the shipment to generate the stamp for</param>
        /// <returns>URL for the barcode</returns>
        public async Task <string> GenerateBarcode(
            string id)
        {
            var request = new EasyPostRequest("shipments/{id}/barcode");

            request.AddUrlSegment("id", id);

            var response = await Execute <Shipment>(request);

            return(response.BarcodeUrl);
        }
        /// <summary>
        /// Re-populate the rates property for this shipment
        /// </summary>
        /// <param name="shipment">The shipment to regenerate rates for</param>
        public async Task RegenerateRates(
            Shipment shipment)
        {
            var request = new EasyPostRequest("shipments/{id}/rates");

            request.AddUrlSegment("id", shipment.Id);

            var response = await Execute <Shipment>(request);

            shipment.Rates = response.Rates;
        }
        /// <summary>
        /// Generate a postage label for this shipment.
        /// </summary>
        /// <param name="id">The id of the shipment to generate the label for</param>
        /// <param name="fileFormat">Format to generate the label in. Valid formats: "pdf", "zpl" and "epl2".</param>
        /// <returns>Shipment instance.</returns>
        public async Task <Shipment> GenerateLabel(
            string id,
            string fileFormat)
        {
            var request = new EasyPostRequest("shipments/{id}/label");

            request.AddUrlSegment("id", id);

            // This is a GET, but uses the request body, so use ParameterType.GetOrPost instead.
            request.AddParameter("file_format", fileFormat, ParameterType.GetOrPost);

            return(await Execute <Shipment>(request));
        }
        /// <summary>
        /// Buy a label for this shipment with the given rate.
        /// </summary>
        /// <param name="id">The id of the shipment to buy the label for</param>
        /// <param name="rateId">The id of the rate to purchase the shipment with.</param>
        /// <returns>Shipment instance.</returns>
        public async Task <Shipment> BuyShipment(
            string id,
            string rateId)
        {
            var request = new EasyPostRequest("shipments/{id}/buy", Method.POST);

            request.AddUrlSegment("id", id);
            request.AddBody(new Dictionary <string, object> {
                { "id", rateId }
            }, "rate");

            return(await Execute <Shipment>(request));
        }
        /// <summary>
        /// Buy insurance for a shipment for the given amount.
        /// </summary>
        /// <param name="id">The id of the shipment to buy insurance for</param>
        /// <param name="amount">The amount to insure the shipment for. Currency is provided when creating a shipment.</param>
        /// <returns>Shipment instance.</returns>
        public async Task <Shipment> BuyInsuranceForShipment(
            string id,
            double amount)
        {
            var request = new EasyPostRequest("shipments/{id}/insure", Method.POST);

            request.AddUrlSegment("id", id);
            request.AddBody(new List <KeyValuePair <string, string> > {
                new KeyValuePair <string, string>("amount", amount.ToString())
            });

            return(await Execute <Shipment>(request));
        }
Example #23
0
        /// <summary>
        /// Create a Report.
        /// </summary>
        /// <param name="type">Type of the report</param>
        /// <param name="report">Report parameters. Valid fields:
        /// . StartDate
        /// . EndDate
        /// . IncludeChildren
        /// All invalid keys will be ignored. </param>
        /// <returns>Report instance.</returns>
        public async Task <Report> CreateReport(
            string type,
            Report report = null)
        {
            var request = new EasyPostRequest("reports/{type}", Method.POST);

            request.AddUrlSegment("type", type);
            if (report != null)
            {
                request.AddQueryString(report.AsDictionary());
            }

            return(await Execute <Report>(request));
        }
Example #24
0
        /// <summary>
        /// Purchase this pickup.
        /// </summary>
        /// <param name="id">Pickup id to purchase</param>
        /// <param name="carrier">The name of the carrier to purchase with.</param>
        /// <param name="service">The name of the service to purchase.</param>
        /// <returns>Pickup instance.</returns>
        public async Task <Pickup> BuyPickup(
            string id,
            string carrier,
            string service)
        {
            var request = new EasyPostRequest("pickups/{id}/buy", Method.POST);

            request.AddUrlSegment("id", id);
            request.AddBody(new List <KeyValuePair <string, string> >()
            {
                new KeyValuePair <string, string>("carrier", carrier),
                new KeyValuePair <string, string>("service", service)
            });

            return(await Execute <Pickup>(request));
        }
Example #25
0
        /// <summary>
        /// Remove shipments from the batch.
        /// </summary>
        /// <param name="id">Batch id to add the shipments to</param>
        /// <param name="shipmentIds">List of shipment ids to be removed.</param>
        /// <returns>Batch instance.</returns>
        public async Task <Batch> RemoveShipmentsFromBatch(
            string id,
            IEnumerable <string> shipmentIds)
        {
            var request = new EasyPostRequest("batches/{id}/remove_shipments", Method.POST);

            request.AddUrlSegment("id", id);

            var body = shipmentIds.Select(shipmentId => new Dictionary <string, object> {
                { "id", shipmentId }
            }).ToList();

            request.AddBody(body, "shipments");

            return(await Execute <Batch>(request));
        }
Example #26
0
        /// <summary>
        /// Retrieve a User from its id. If no id is specified, it returns the user for the api_key specified.
        /// </summary>
        /// <param name="id">String representing a user. Starts with "user_".</param>
        /// <returns>User instance.</returns>
        public async Task <User> GetUser(
            string id = null)
        {
            EasyPostRequest request;

            if (id == null)
            {
                request = new EasyPostRequest("users");
            }
            else
            {
                request = new EasyPostRequest("users/{id}");
                request.AddUrlSegment("id", id);
            }

            return(await Execute <User>(request));
        }
Example #27
0
        /// <summary>
        /// Get a paginated list of reports.
        /// </summary>
        /// <param name="type">Type of the report</param>
        /// <param name="options">Options for the pagination function</param>
        /// <returns>Instance of EasyPost.ScanForm</returns>
        public async Task <ReportList> ListReports(
            string type,
            ReportListOptions options = null)
        {
            var request = new EasyPostRequest("reports/{type}");

            request.AddUrlSegment("type", type);
            if (options != null)
            {
                request.AddQueryString(options.AsDictionary());
            }

            var reportList = await Execute <ReportList>(request);

            reportList.Options = options;
            reportList.Type    = type;
            return(reportList);
        }
Example #28
0
        /// <summary>
        /// Verify an address.
        /// </summary>
        /// <returns>Address instance. Check message for verification failures.</returns>
        public async Task <Address> VerifyAddress(
            Address address,
            string carrier = null)
        {
            if (address.Id == null)
            {
                address = await CreateAddress(address);
            }

            var request = new EasyPostRequest("addresses/{id}/verify");

            request.RootElement = "address";
            request.AddUrlSegment("id", address.Id);

            if (carrier != null)
            {
                request.AddParameter("carrier", carrier, ParameterType.QueryString);
            }

            return(await Execute <Address>(request));
        }
Example #29
0
        /// <summary>
        /// Asynchronously generate a label containing all of the Shipment labels belonging to the batch.
        /// </summary>
        /// <param name="id">Batch id to generate the label for</param>
        /// <param name="fileFormat">Format to generate the label in. Valid formats: "pdf", "zpl" and "epl2".</param>
        /// <param name="orderBy">Optional parameter to order the generated label. Ex: "reference DESC"</param>
        /// <returns>Batch instance.</returns>
        public async Task <Batch> GenerateLabelForBatch(
            string id,
            string fileFormat,
            string orderBy = null)
        {
            var request = new EasyPostRequest("batches/{id}/label", Method.POST);

            request.AddUrlSegment("id", id);

            var body = new List <KeyValuePair <string, string> > {
                new KeyValuePair <string, string>("file_format", fileFormat)
            };

            if (orderBy != null)
            {
                body.Add(new KeyValuePair <string, string>("order_by", orderBy));
            }
            request.AddBody(body);

            return(await Execute <Batch>(request));
        }
Example #30
0
        /// <summary>
        /// Buy a label for this shipment with the given rate.
        /// Optionally include insurance
        /// </summary>
        /// <param name="id">The id of the shipment to buy the label for</param>
        /// <param name="rateId">The id of the rate to purchase the shipment with.</param>
        /// <param name="insuranceValue">The value to insure the shipment for.</param>
        /// <returns>Shipment instance.</returns>
        public Task <Shipment> BuyShipment(
            string id,
            string rateId,
            double?insuranceValue = null)
        {
            var request = new EasyPostRequest("shipments/{id}/buy", Method.POST);

            request.AddUrlSegment("id", id);

            var parameters = new Dictionary <string, object> {
                { "rate", new Dictionary <string, object> {
                      { "id", rateId }
                  } }
            };

            if (insuranceValue > 0)
            {
                parameters["insurance"] = insuranceValue.Value;
            }

            request.AddBody(parameters, "");

            return(Execute <Shipment>(request));
        }