All samples

CRUD APIs with Northwind database data

This sample contains a set of CRUD APIs based on the Northwind database data. Use this API to get mock data in your app. This sample contains mock CRUD APIs for product categories, customers, employees, orders, products, shippers, suppliers and territories. See the sample readme on GitHub for the list of available endpoints.

Waldek Mastykarz

CRUD APIs with Northwind database data

Summary

This sample contains a set of CRUD APIs based on the Northwind database data. Use this API to get mock data in your app.

Dev Proxy simulating a customers API endpoint using the Northwind data

Compatibility

Dev Proxy v2.1.0

Contributors

Version history

VersionDateComments
1.5February 4, 2026Updated to Dev Proxy v2.1.0
1.4January 18, 2026Moved config files to .devproxy folder
1.3January 5, 2026Updated to Dev Proxy v2.0.0
1.2June 27, 2025Updated to Dev Proxy v0.29.2
1.1January 25, 2024Updated schema version
1.0January 16, 2024Initial release

Minimal path to awesome

  • Get the preset using Dev Proxy by running devproxy config get northwinddb
  • Start Dev Proxy with the config file, by running devproxy

Features

CRUD APIs from this preset are exposed at https://api.northwind.com.

This preset contains the following endpoints and operations.

Product categories

EndpointMethodDescriptionExample
/categoriesGETGet all product categoriesGET https://api.northwind.com/categories
/categories/{category-id}GETGet a product categoryGET https://api.northwind.com/categories/1
/categoriesPOSTCreate a product categoryPOST https://api.northwind.com/categories {"CategoryID": 9, "CategoryName": "New category", "Description", "New category description", "Picture": "abc"}
/categories/{category-id}PATCHUpdate a product categoryPATCH https://api.northwind.com/categories/1 {"CategoryName": "New category name"}
/categories/{category-id}DELETEDelete a product categoryDELETE https://api.northwind.com/categories/1

Customers

EndpointMethodDescriptionExample
/customersGETGet all customersGET https://api.northwind.com/customers
/customers/{customer-id}GETGet a customerGET https://api.northwind.com/customers/ALFKI
/customersPOSTCreate a customerPOST https://api.northwind.com/customers { "CustomerID": "ABCD1", "CompanyName": "Fictitious Corp", "ContactName": "John Doe", "ContactTitle": "CEO", "Address": "1234 Fictional St", "City": "Imaginary City", "PostalCode": "12345", "Country": "Neverland", "Phone": "(123) 456-7890", "Fax": "(123) 456-7890" }
/customers/{customer-id}PATCHUpdate a customerPATCH https://api.northwind.com/customers/ALFKI {"CompanyName": "New company name"}
/customers/{customer-id}DELETEDelete a customerDELETE https://api.northwind.com/customers/ALFKI

Employees

EndpointMethodDescriptionExample
/employeesGETGet all employeesGET https://api.northwind.com/employees
/employees/{employee-id}GETGet an employeeGET https://api.northwind.com/employees/1
/employeesPOSTCreate an employeePOST https://api.northwind.com/employees { "EmployeeID": 10, "LastName": "Johnson", "FirstName": "Michael", "Title": "Account Manager", "TitleOfCourtesy": "Mr.", "BirthDate": "1975-04-18T00:00:00", "HireDate": "2000-08-14T00:00:00", "Address": "233 S Wacker Dr, Suite 800", "City": "Chicago", "Region": "IL", "PostalCode": "60606", "Country": "USA", "HomePhone": "(312) 555-1234", "Extension": "7890", "Photo": "KJ89D", "Notes": "Holds an MBA from Harvard Business School, graduated in 1999. Has worked in various sales and marketing roles. Enjoys golf and running marathons.", "ReportsTo": 1, "PhotoPath": "http://accweb/emmployees/johnson.jpg" }
/employees/{employee-id}PATCHUpdate an employeePATCH https://api.northwind.com/employees/1 {"Title": "Sales manager"}
/employees/{employee-id}DELETEDelete an employeeDELETE https://api.northwind.com/employees/1
/employees/{employee-id}/territoriesGETGet all territories for the specified employeeGET https://api.northwind.com/employees/1/territories
/employees/{employee-id}/territoriesPOSTAssociate an employee with a territoryPOST https://api.northwind.com/employees/1/territories { "EmployeeID": 1, "TerritoryID": "01833" }
/employees/{employee-id}/territories/{territory-id}DELETERemove an employee from the territoryDELETE https://api.northwind.com/employees/1/territories/01833

Orders

EndpointMethodDescriptionExample
/ordersGETGet all ordersGET https://api.northwind.com/orders
/orders/{order-id}GETGet an orderGET https://api.northwind.com/orders/10248
/ordersPOSTCreate an orderPOST https://api.northwind.com/orders {"OrderID":11078,"CustomerID":"VINET","EmployeeID":5,"OrderDate":"1996-07-04T00:00:00","RequiredDate":"1996-08-01T00:00:00","ShippedDate":"1996-07-16T00:00:00","ShipVia":3,"Freight":32.38,"ShipName":"Vins et alcools Chevalier","ShipAddress":"59 rue de l'Abbaye","ShipCity":"Reims","ShipPostalCode":"51100","ShipCountry":"France"}
/orders/{order-id}PATCHUpdate an orderPATCH https://api.northwind.com/orders/10248 {"Freight": 72.51}
/orders/{order-id}DELETEDelete an orderDELETE https://api.northwind.com/orders/10248
/orders/{order-id}/detailsGETGet products from the specified ordersGET https://api.northwind.com/orders/10248/details
/orders/{order-id}/detailsPOSTAdd a product to an orderPOST https://api.northwind.com/orders/10248/details {"OrderID":10248,"ProductID":14,"UnitPrice":14,"Quantity":12,"Discount":0}
/orders/{order-id}/details/{product-id}PATCHUpdate product information for an orderPATCH https://api.northwind.com/orders/10248/details/11 {"Quantity": 11}
/orders/{order-id}/details/{product-id}DELETERemove a product from an orderDELETE https://api.northwind.com/orders/10248/details/11

Products

EndpointMethodDescriptionExample
/productsGETGet all productsGET https://api.northwind.com/products
/products/{product-id}GETGet a productGET https://api.northwind.com/products/1
/productsPOSTCreate a productPOST https://api.northwind.com/products {"ProductID": 2, "ProductName": "Green Tea", "SupplierID": 2, "CategoryID": 2, "QuantityPerUnit": "20 boxes x 30 bags", "UnitPrice": 15, "UnitsInStock": 24, "UnitsOnOrder": 5, "ReorderLevel": 5, "Discontinued": false}
/products/{product-id}PATCHUpdate a productPATCH https://api.northwind.com/products/1 {"ProductName": "Chai tea"}
/products/{product-id}DELETEDelete a productDELETE https://api.northwind.com/products/1

Regions

EndpointMethodDescriptionExample
/regionsGETGet all regionsGET https://api.northwind.com/regions
/regions/{region-id}GETGet a regionGET https://api.northwind.com/regions/1
/regionsPOSTCreate a regionPOST https://api.northwind.com/regions {"RegionID": 5, "RegionDescription": "New region"}
/regions/{region-id}PATCHUpdate a regionPATCH https://api.northwind.com/regions/4 {"RegionDescription": "Southern most"}
/regions/{region-id}DELETEDelete a regionDELETE https://api.northwind.com/regions/1

Shippers

EndpointMethodDescriptionExample
/shippersGETGet all shippersGET https://api.northwind.com/shippers
/shippers/{shipper-id}GETGet a shipperGET https://api.northwind.com/shippers/1
/shippersPOSTCreate a shipperPOST https://api.northwind.com/shippers {"ShipperID": 4, "CompanyName": "Rapid Delivery", "Phone": "(202) 555-0198"}
/shippers/{shipper-id}PATCHUpdate a shipperPATCH https://api.northwind.com/shippers/1 {"Phone": "(503) 555-9832"}
/shippers/{shipper-id}DELETEDelete a shipperDELETE https://api.northwind.com/shippers/1

Suppliers

EndpointMethodDescriptionExample
/suppliersGETGet all suppliersGET https://api.northwind.com/suppliers
/suppliers/{supplier-id}GETGet a supplierGET https://api.northwind.com/suppliers/1
/suppliersPOSTCreate a supplierPOST https://api.northwind.com/suppliers {"SupplierID": 30, "CompanyName": "Montagnes du Sirop d'Érable", "ContactName": "Lucie Tremblay", "ContactTitle": "Sales Manager", "Address": "202 rue Des Pionniers", "City": "Sherbrooke", "Region": "Québec", "PostalCode": "J1H 5H3", "Country": "Canada", "Phone": "(819) 555-3210", "Fax": "(819) 555-6543"}
/suppliers/{supplier-id}PATCHUpdate a supplierPATCH https://api.northwind.com/suppliers/1 {"Phone": "(171) 555-2223"}
/suppliers/{supplier-id}DELETEDelete a supplierDELETE https://api.northwind.com/suppliers/1

Territories

EndpointMethodDescriptionExample
/territoriesGETGet all territoriesGET https://api.northwind.com/territories
/territories/{territory-id}GETGet a territoryGET https://api.northwind.com/territories/1
/territoriesPOSTCreate a territoryPOST https://api.northwind.com/territories {"TerritoryID": "90210", "TerritoryDescription": "Beverly Hills", "RegionID": 2}
/territories/{territory-id}PATCHUpdate a territoryPATCH https://api.northwind.com/territories/01581 {"TerritoryDescription": "Westborough"}
/territories/{territory-id}DELETEDelete a territoryDELETE https://api.northwind.com/territories/01581

Help

We do not support samples, but this community is always willing to help, and we want to improve these samples. We use GitHub to track issues, which makes it easy for community members to volunteer their time and help resolve issues.

You can try looking at issues related to this sample to see if anybody else is having the same issues.

If you encounter any issues using this sample, create a new issue.

Finally, if you have an idea for improvement, make a suggestion.

Disclaimer

THIS CODE IS PROVIDED AS IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.