{"id":37861397,"url":"https://github.com/meplato/store2-dotnet-client","last_synced_at":"2026-01-16T16:32:15.064Z","repository":{"id":36175405,"uuid":"40479525","full_name":"meplato/store2-dotnet-client","owner":"meplato","description":"Meplato Store API Client for .NET","archived":false,"fork":false,"pushed_at":"2025-10-01T01:13:28.000Z","size":360,"stargazers_count":0,"open_issues_count":8,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-10T03:43:36.158Z","etag":null,"topics":["csharp","dotnet","meplato","rest-api"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/meplato.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-08-10T11:41:18.000Z","updated_at":"2025-08-04T06:12:20.000Z","dependencies_parsed_at":"2024-03-28T10:29:30.069Z","dependency_job_id":"a3ea6ca4-d6c0-4546-91ef-6b3e8527f646","html_url":"https://github.com/meplato/store2-dotnet-client","commit_stats":null,"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/meplato/store2-dotnet-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meplato%2Fstore2-dotnet-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meplato%2Fstore2-dotnet-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meplato%2Fstore2-dotnet-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meplato%2Fstore2-dotnet-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/meplato","download_url":"https://codeload.github.com/meplato/store2-dotnet-client/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/meplato%2Fstore2-dotnet-client/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479909,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","dotnet","meplato","rest-api"],"created_at":"2026-01-16T16:32:14.962Z","updated_at":"2026-01-16T16:32:15.037Z","avatar_url":"https://github.com/meplato.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meplato Store API for .NET\n\n[![Build Status](https://travis-ci.org/meplato/store2-dotnet-client.svg?branch=master)](https://travis-ci.org/meplato/store2-dotnet-client)\n[![NuGet](https://img.shields.io/nuget/vpre/Meplato.Store2.svg)](https://www.nuget.org/packages/Meplato.Store2/)\n\nThis is the .NET client for the Meplato Store API. It consists of a library\nto integrate your infrastructure with Meplato suite for suppliers.\n\n## Prerequisites\n\nYou need three things to use the Meplato Store API.\n\n1. A login to Meplato Store.\n2. An API token.\n3. Microsoft Visual Studio (at least VS 2019) and .NET 4.7.2.\n\nGet your login by contacting Meplato Supplier Network Services. The API token\nis required to securely communicate with the Meplato Store API. You can\nfind it in the personalization section when logged into Meplato Store.\n\n## Installation\n\n1. Open the solution in `.\\src\\Meplato.Store2.sln`.\n2. Build the solution.\n\n## Using the library\n\nWe have recently added `Meplato.Store2` to the NuGet package management\nsystem. So you can very easily add support for Meplato Store API by opening\nNuGet packages for your project, search for `Meplato` and add the\n`Meplato.Store2` dependency to your project. Once you have that, this simple\nprogram will list the number of catalogs in your account\n(replace `\u003cyour-api-token\u003e` with the API token you can access in Store):\n\n```csharp\nusing System;\nusing System.Threading.Tasks;\nusing Meplato.Store2;\nusing Service = Meplato.Store2.Catalogs.Service;\n\nnamespace MeplatoStoreConsole\n{\n    internal class Program\n    {\n        private static async Task Main(string[] args)\n        {\n            var client = new Client();\n            var catalogs = new Service(client) {\n                User = \"\u003cyour-api-token\u003e\"\n            };\n            var resp = await catalogs.Search().Do();\n            Console.WriteLine($\"Found {resp.TotalItems} catalogs\");\n        }\n    }\n}\n```\n\nAll functionality of the Meplato Store API is separated into services.\nSo you e.g. have a service to work with catalogs, another\nservice to work with products in a catalog etc. All services need to be\ninitialized with your API token. Here's an example:\n\n```csharp\nusing Meplato.Store2.Catalogs;\n\n// Client is used to perform HTTP requests.\n// The library comes with a default HTTP client,\n// but you can build or use your own.\nvar client = new Meplato.Store2.Client();\n\n// Create and initialize the Catalogs service with your API token.\nvar service = new Service(client) {\n    User = \"\u003cyour-api-token\u003e\"\n};\n\n// Get the first 10 of your catalogs, sorted by creation date (descending), then by name.\nvar response = await service.Search().Skip(0).Take(10).Sort(\"-created,name\").Do();\nConsole.WriteLine(\"You have {0} catalog(s).\", response.TotalItems);\nforeach (var catalog in response.Items)\n{\n    Console.WriteLine(\"Catalog with ID={0} has name {1}\", catalog.Id, catalog.Name);\n}\n```\n\nYou should use e.g. [Polly](https://github.com/App-vNext/Polly)\nto make your API consumer resilient against network errors or\nAPI rate limits.\n\nNotice that Polly is much more versatile than this simple snippet;\nread up the [documentation](http://www.thepollyproject.org/)\nand [examples](https://github.com/App-vNext/Polly-Samples).\n\nThe following snippet can also be found in\n[`PollyClientTests.cs`](https://github.com/meplato/store2-dotnet-client/blob/master/src/Meplato.Store2.Tests/PollyClientTests.cs) as executable code:\n\n```csharp\n// Client is used to perform HTTP requests.\n// The library comes with a default HTTP client,\n// but you can build or use your own.\nvar client = new Meplato.Store2.Client();\n\n// Create and initialize the Catalogs service with your API token.\nvar service = new Service(client) {\n    User = \"\u003cyour-api-token\u003e\"\n};\n\n// Configure a Polly policy that handles exceptions with\n// HTTP requests and automatically retries up to 5 times,\n// waiting 0.1s at the 1st run, 0.2s at the 2nd, 0.4s at\n// the 3rd etc. (exponential backoff).\nvar retries = 0;\nvar policy = Policy.Handle\u003cException\u003e().WaitAndRetryAsync(\n    5,\n    attempt =\u003e TimeSpan.FromSeconds(0.1 * Math.Pow(2, attempt)),\n    (exception, waitTime) =\u003e\n    {\n        /*\n        Assert.NotNull(exception);\n        Assert.IsInstanceOf\u003cServiceException\u003e(exception);\n        Assert.AreEqual(\"Too many requests\", exception.Message);\n        */\n        retries++;\n\n        Console.WriteLine($\"Retry {retries} with a wait time of {waitTime}\");\n    }\n);\n\n// Get the first 10 of your catalogs, sorted by creation date (descending), then by name.\ntry {\n    await policy.ExecuteAsync(async () =\u003e {\n        var response = await service.Search().Skip(0).Take(10).Sort(\"-created,name\").Do();\n        Console.WriteLine(\"You have {0} catalog(s).\", response.TotalItems);\n        foreach (var catalog in response.Items)\n        {\n            Console.WriteLine(\"Catalog with ID={0} has name {1}\", catalog.Id, catalog.Name);\n        }\n    });\n}\ncatch (ServiceException ex) {\n    // After 5 retries and still failing, you'll be landing here\n    Console.WriteLine($\"Request failed with HTTP status {ex.StatusCode}\");\n}\ncatch (Exception ex) {\n    // Something else went wrong.\n}\n```\n\nFeel free to read the unit tests for the various usage scenarios of the\nlibrary.\n\n## Documentation\n\nComplete documentation for the Meplato Store API can be found at\n[https://developer.meplato.com/store2](https://developer.meplato.com/store2).\n\n## Testing\n\nRun the NUnit tests in the Visual Studio solution.\n\n# License\n\nThis software is licensed under the Apache 2 license.\n\n    Copyright (c) 2015 Meplato GmbH \u003chttp://www.meplato.com\u003e\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n        http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeplato%2Fstore2-dotnet-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeplato%2Fstore2-dotnet-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeplato%2Fstore2-dotnet-client/lists"}