EbaySharp is a .NET library that enables you to authenticate and make REST API calls to eBay. This .NET SDK used for creating listings and managing orders using C#.
EbaySharp is available on NuGet. Use the package manager console in Visual Studio to install it:
Install-Package CMS365.EbaySharp
EbaySharp version | eBay REST API version |
---|---|
8.X.X | Analytics API v1_beta.0.0 |
Browse API v1.19.7 | |
Feed API v1.3.1 | |
Finances API v1.17.2 | |
Fulfillment API v1.20.4 | |
Inventory API v1.17.6 | |
Key Management API v1.0.0 | |
Metadata API v1.7.1 | |
Stores API v1 | |
Taxonomy API v1.0.1 | |
Trading API (Legacy) v1363 |
EbaySharp currently supports the following Ebay REST APIs:
- Access and Security
- Using the EbaySharp
Create an account here https://developer.ebay.com/my/keys and generate keys for production.
Navigate to user tokens https://developer.ebay.com/my/auth/?env=production&index=0 and select following options.
From the same page, generate the ebay redirect URL (called RU)
Copy the URL of the field "Your branded eBay Production Sign In (OAuth)" and open in a new browser in private mode and also save a copy of the URL for future use. Log in with your store user ID and password and you will be redirected to the following page
Copy the URL of the thank you page and assign it to a variable called "secureURL" and execute the following function.
public async Task<string> GetRefreshToken()
{
string secureURL="replace with the URL of the thank you page";
EbaySharp.Controllers.IdentityController identityController = new EbaySharp.Controllers.IdentityController();
string refreshToken = await IdentityController.GetRefreshToken(ReplaceYourClientId, ReplaceYourClientSecret,
, secureURL, Replace with RU);
}
This method returns a refresh token which is valid for 18 months or If you change your user/id or password. You will need to re run this function after 18 months when refresh token has expired. We will use the refresh token and generate an access token.
IdentityController identityController=new IdentityController();
var clientCredentials = await identityController.GetClientCredentials(ReplaceYourClientId, ReplaceYourClientSecret, ReplaceWithRefreshToken , ReplaceWithScopes);
Provide scope separated by a space, for example https://api.ebay.com/oauth/api_scope https://api.ebay.com/oauth/api_scope/sell.marketing.readonly This method now gives you ClientCredentialsResponse object which contains an access token.
Initialize the instance with the access token.
EbayController ebayController = new EbayController(clientCredentials.AccessToken);
You can see a list of Browse API methods here
You can find more detail here You need to pass an item Id.
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
Item item = await ebayController.GetItem("355731616267");
You can see a list of Taxonomy API methods here
You can find more detail here You need to pass a Category Tree Id and the product title you are searching categories for.
CategorySuggestionsList categorySuggestionsList = await ebayController.GetCategorySuggestions(15, "I am a table, look for me");
You can find more detail here You need to pass a Category Tree ID.
CategoryTree categoryTree = await ebayController.GetCategoryTree(15);
You can find more detail here You need to pass MarketplaceId, please visit here for supported market places.
CategoryTreeId categoryTreeId = await ebayController.GetDefaultCategoryTreeId("EBAY_US");
You can see a list of Analytics API methods here
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
RateLimits rateLimits = await ebayController.GetRateLimits();
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
RateLimits rateLimits = await ebayController.GetUserRateLimits();
You can see a list of Key management API methods here
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
SigningKeys signingKeys = await ebayController.GetSigningKeys();
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
SigningKeys signingKeys = await ebayController.GetSigningKey(string signinKeyId);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
signingKey = await ebayController.CreateSigningKey(SigningKeyCipher.ED25519);
You can see a list of Feed API methods here
You can find more detail here
ResultFile resultFile = await ebayController.GetResultFile([TASK_ID]);
await resultFile.SaveUncompressed("C:\\Work");
You can see a list of Finances API methods here
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
//Important! Due to EU & UK Payments regulatory requirements, an additional security verification via Digital Signatures is required for certain API calls that are made on behalf of EU/UK sellers, including all Finances API methods.
SigningKey signingKey = await ebayController.CreateSigningKey(SigningKeyCipher.ED25519);
Transactions transactions = await ebayController.GetTransactions(signingKey);
or
Transactions transactions = await ebayController.GetTransactions();
You can find more detail here
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
Orders orders = await ebayController.GetOrders(new string[] { "ORDERNUMBER", "ORDERNUMBER" });
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
string dateRange = $"{(DateTime.UtcNow.AddDays(-10).ToString("yyyy-MM-ddThh:mm:00.0Z"))}..{(DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:00.0Z"))}";
Orders orders = await ebayController.GetOrders($"creationdate:[{dateRange}]",50);
or
orders = await ebayController.GetOrders($"lastmodifieddate:[{dateRange}]");
or
orders = await ebayController.GetOrders("orderfulfillmentstatus:{NOT_STARTED|IN_PROGRESS}");
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
List<EbaySharp.Entities.Sell.Fulfillment.Order.Order> allOrders = new List<EbaySharp.Entities.Sell.Fulfillment.Order.Order>();
int totalCount = 0;
do
{
var eBayOrders = await ebayController.GetOrders("orderfulfillmentstatus:{NOT_STARTED|IN_PROGRESS}", 50, totalCount);
totalCount = eBayOrders.Total;
allOrders.AddRange(eBayOrders.OrderList);
} while (allOrders.Count < totalCount);
EbaySharp.Entities.Sell.Fulfillment.Order.Order order = allOrders.Where(x => x.OrderId == orderTracking.OrderNumber).FirstOrDefault();
//Execute the following block in a loop If you have multiple tracking numbers.
await ebayController.CreateShippingFulfillment("Order Number", new EbaySharp.Entities.Sell.Fulfillment.Order.ShippingFulfillment.Fulfillment()
{
LineItems = order.LineItems.Select(x => new EbaySharp.Entities.Sell.Fulfillment.Order.ShippingFulfillment.LineItem()
{
LineItemId = x.LineItemId,
Quantity = x.Quantity
}).ToList(),
TrackingNumber = "Tracking Number",
ShippingCarrierCode = "Courier Name",
ShippedDate = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ss.0Z")
});
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
Fulfillments fulfillments = await ebayController.GetShippingFulfillments("Order Number");
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
Fulfillment fulfillment = await ebayController.GetShippingFulfillment("Order Number", "Fulfillment Id");
You can see a list of Inventory API methods here
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
InventoryItemsList inventoryItemsList = await ebayController.GetInventoryItems(limit, offset);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
InventoryItem inventoryItem = await ebayController.GetInventoryItem(SKU);
You can find more detail here
Dictionary<string, string[]> aspects = new()
{
{ "Brand", new[] { "GoPro" } },
{ "Type", new[] { "Helmet/Action" } }
};
CreatedOrReplacedInventoryItem createdOrReplacedInventoryItem = await ebayController.CreateOrReplaceInventoryItem("test-sku-api", new InventoryItem()
{
Availability = new Availability() { ShipToLocationAvailability = new ShipToLocationAvailability() { Quantity = 3 } },
Condition = ConditionEnum.NEW,
Product = new Product()
{
Title = "Creating from REST API, please don't buy",
Description = "I am created by the REST API",
Aspects = aspects,
Brand = "GoPro",
MPN = "CHDHX-401",
ImageUrls = new[] { "https://i.ebayimg.com/images/g/OKsAAOSwr2VlsUPx/s-l1600.jpg", "https://i.ebayimg.com/images/g/a9AAAOSw2IVlsUPz/s-l1600.jpg" }
},
//Find locale information here https://developer.ebay.com/api-docs/static/rest-request-components.html#marketpl
Locale = "en-AU"
});
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
await ebayController.DeleteInventoryItem(SKU);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
InventoryLocations inventoryLocations = await ebayController.GetInventoryLocations(limit, offset);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
InventoryLocation inventoryLocation = await ebayController.GetInventoryLocation(merchantLocationKey);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
await ebayController.CreateInventoryLocation(new InventoryLocation()
{
MerchantLocationKey = merchantLocationKey,
LocationTypes = new List<StoreTypeEnum>() { StoreTypeEnum.WAREHOUSE },
MerchantLocationStatus = StatusEnum.ENABLED,
Location = new Location()
{
Address = new Address()
{
PostalCode = "3698",
Country = CountryCodeEnum.AU
}
}
});
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
await ebayController.DeleteInventoryLocation(merchantLocationKey);
You can find more detail here If you have already created your listing using old API (for example .NET C# SDK), you will need to migrate all listing to new REST API. You can find more detail here
BulkMigrateListingRequest bulkMigrateListingRequest = new BulkMigrateListingRequest()
{
Requests = new BulkMigrateListingRequestItem[]
{
new BulkMigrateListingRequestItem(){ListingId = "21432432432" },
new BulkMigrateListingRequestItem(){ListingId = "78658678678" }
}
});
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
BulkMigrateListingResponse bulkMigrateListingResponse = await ebayController.BulkMigrate(bulkMigrateListingRequest);
If you want to create a new listing, you will need to perform following 3 steps.
1 - Create a new inventory item
MarketplaceEnum? marketplaceId = MarketplaceEnum.EBAY_AU (for example)
CurrencyCodeEnum? CurrencyCodeId = CurrencyCodeEnum.AUD (for example)
EbaySharp.Entities.Sell.Inventory.InventoryItem.InventoryItem inventoryItem = new EbaySharp.Entities.Sell.Inventory.InventoryItem.InventoryItem()
{
Condition = ConditionEnum.NEW,
Availability = new Availability() { ShipToLocationAvailability = new ShipToLocationAvailability() { Quantity = 3, AllocationByFormat = new AllocationByFormat() { FixedPrice = 3 } } },
Product = new EbaySharp.Entities.Sell.Inventory.InventoryItem.Product()
{
Title = YOUR PRODCT TITLE,
Aspects = DICTIONARY OF ASPECTS IN Dictionary<string, string[]> FORMAT,
Brand = PRODUCT BRAND,
MPN = SKU/MPN,
ImageUrls = ARRAY OF IMAGE URLS
},
Locale = LOCALE OF YOUR STORE
};
CreatedOrReplacedInventoryItem createdOrReplacedInventoryItem = await ebayController.CreateOrReplaceInventoryItem(UNIQUE SKU OF THE PRODUCT, inventoryItem);
2 - Create a new offer You can see detail here
3 - Publish offer You can see detail here
If you want to revise a listing, you will need to perform following 4 steps.
1 - Get an existing inventory item you want to revise You can see detail here 2 - Get an existing offer
Offers offers = await ebayController.GetOffers(product.SKU);
Offer offer = offers.OfferList.FirstOrDefault();
3 - Make changes in the inventory item or offer
string locale = "en-AU" //FOR EXAMPLE
inventoryItem.Product.Title = UPDATED TITLE;
offer.PricingSummary.Price.Value = NEW PRICE;
offer.AvailableQuantity = NEW STOCK;
await ebayController.CreateOrReplaceInventoryItem(product.SKU, inventoryItem);
await ebayController.UpdateOffer(offer.OfferId, offer, locale);
4 - Publish offer
OfferPublished offerPublished = await ebayController.PublishOffer(offer.OfferId, locale);
If you want to update an existing active listing, you will need to perform following 3 steps.
1 - Get an existing inventory item you want to update You can see detail here 2 - Get an existing offer
Offers offers = await ebayController.GetOffers(product.SKU);
Offer offer = offers.OfferList.FirstOrDefault();
3 - Make changes in the inventory item or offer
string locale = "en-AU" //FOR EXAMPLE
inventoryItem.Product.Title = UPDATED TITLE;
offer.PricingSummary.Price.Value = NEW PRICE;
offer.AvailableQuantity = NEW STOCK;
await ebayController.CreateOrReplaceInventoryItem(product.SKU, inventoryItem);
await ebayController.UpdateOffer(offer.OfferId, offer, locale);
If you want to end a listing, you will need to perform following 2 steps.
1 - Get an offer and set quantity to 0
Offers offers = await ebayController.GetOffers(SKU);
Offer offer = offers.OfferList.FirstOrDefault();
offer.AvailableQuantity = 0; //optional
2 - Withdraw offer
OfferWithdrawn offerWithdrawn = await ebayController.WithdrawOffer(offer.OfferId);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
OffersList offersList = await ebayController.GetOffers(SKU);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
Offer offer = await ebayController.GetOffer(offerId);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
Offer offer = new Offer()
{
SKU = SKU,
MarketplaceId = MarketplaceEnum.EBAY_AU,
Format = FormatTypeEnum.FIXED_PRICE,
PricingSummary = new PricingSummary()
{
Price = new Amount()
{
Currency = "AUD",
Value = "75"
}
},
MerchantLocationKey = inventoryLocation.MerchantLocationKey,
CategoryId = "162480",
ListingPolicies = new ListingPolicies()
{
FulfillmentPolicyId = "ReplaceYourFulfillmentPolicyId",
PaymentPolicyId = "ReplaceYourPaymentPolicyId",
ReturnPolicyId = "ReplaceYourReturnPolicyId"
}
};
OfferCreated offerCreated = await ebayController.CreateOffer(offer, "en-AU");
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
Offer offer = await ebayController.GetOffer(offerId);
offer.PricingSummary.Price.Value = "100";
OfferUpdated offerUpdated = await ebayController.UpdateOffer(offerId, offer, "en-AU");
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
OfferPublished offerPublished = await ebayController.PublishOffer(offerId, "en-AU");
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
OfferWithdrawn offerWithdrawn = await ebayController.WithdrawOffer(offerId);
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
await ebayController.DeleteOffer(offerId);
You can see a list of Metadata API methods here
You need to pass MarketplaceId, please visit here for supported market places.
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
ReturnPoliciesList returnPoliciesList = await ebayController.GetReturnPolicies("EBAY_US");
You can see a list of Stores API methods here
You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
StoreCategories storeCategories = await ebayController.GetStoreCategories();
This is a legacy API, I have added only 1 method with a few important fields only. You can see a list of Trading call categories here
This method is used to get a list of all active and ended items. You can find more detail here
EbaySharp.Controllers.EbayController ebayController = new EbaySharp.Controllers.EbayController(clientCredentials.AccessToken);
int pageNumber = 0;
bool hasMoreResults = true;
while (hasMoreResults)
{
GetSellerListResponse getSellerListResponse = await ebayController.GetItems(siteId, ++pageNumber, 200, DateTime.Now.AddDays(-87).ToString("O"), DateTime.Now.AddDays(33).ToString("O"));
hasMoreResults = getSellerListResponse.HasMoreItems;
//Process items response here.
}