Overview
The REST Admin API is a standard data interface provided by SHOPLINE for apps to access and manage store data. Before calling the REST Admin API, your app must obtain store authorization. Once authorization is complete, you must use the acquired access token to make API requests within the permitted scopes.
Store authorization
Store authorization is divided into private app authorization, custom app authorization, and public app authorization. Custom app authorization and public app authorization use OAuth 2.0 authorization. Upon successful authorization, you will receive an access token containing the specified access scopes.
Custom apps and public apps
The access token for custom apps and public apps can be obtained through OAuth 2.0 authorization.
- Validity period: 10 hours. You need to check whether the access token is about to expire and call the Refresh the access token API to refresh it before expiration.
- Expiration mechanism: After an access token is refreshed, the original access token does not expire immediately but becomes invalid after 5 minutes.
Private apps
The access token for private apps needs to be obtained from the SHOPLINE Admin.
-
Log in to the SHOPLINE Admin.
-
Click Apps in the left navigation bar, and then click Develop Apps in the upper right corner.

-
On the Develop Apps page, click Edit for the target app.

-
Click API certificate to obtain the access token for the target app.

The access token mechanism for private apps is as follows:
- Validity period: 3 years. When the access token is about to expire, a reminder email will be sent to the store's email address, and you will need to go to the SHOPLINE Admin to refresh the access token.
- Expiration mechanism: After the access token is refreshed, the original access token does not expire immediately but becomes invalid after 30 minutes.
- Deauthorization: To revoke store authorization, you need to go to the SHOPLINE Admin and delete the app. Once the app is deleted, the original access token becomes invalid immediately.
Version selection
The REST Admin API maintains eight concurrent versions in a rolling window. You can refer to API versioning guide and switch to an appropriate version in the upper right corner of the page to make calls.
Different versions of the REST Admin API have different version numbers. For example, to call the Get products API for version v20260901, the request URL format is as follows:
https://{handle}.myshopline.com/admin/openapi/v20260901/products/products.json
v20260901 is the version number.
API call
Once you have successfully obtained the access token through authorization and selected the API version, you can call the REST Admin API in your app. The following example demonstrates calling the Get products API for version v20260901.
Request example
curl --location --request GET 'https://{handle}.myshopline.com/admin/openapi/v20260901/products/products.json' \
--header 'Authorization: Bearer {accessToken}'
accessToken is the valid access token obtained through authorization.
Successful response example
{
"products": [
{
"path": "/products/multi-color-stitching-dress",
"product_behavior": "",
"id": "16070259818748421542564095",
"options": [
{
"option_values": [
{
"id": "16270259818752783618824095",
"value": "Yellow"
},
{
"id": "16270259818752783618964095",
"value": "Black"
},
{
"id": "16270259818752783619034095",
"value": "Grey"
}
],
"product_id": "16070259818748421542564095",
"values": [
"Yellow",
"Black",
"Grey"
],
"values_colors": {},
"values_images": {},
"id": "16170259818752783618814095",
"name": "Color"
},
{
"values_images": {},
"id": "16170259818752783618844095",
"name": "Size",
"option_values": [
{
"id": "16270259818752783618854095",
"value": "S"
},
{
"id": "16270259818752783618914095",
"value": "M"
},
{
"id": "16270259818752783618984095",
"value": "L"
}
],
"product_id": "16070259818748421542564095",
"values": [
"S",
"M",
"L"
],
"values_colors": {}
}
],
"published_at": "2025-06-05T15:41:02+08:00",
"standard_category_id": "",
"template_path": null,
"media": [
{
"id": "7025981872526871687",
"preview_image": null,
"src": "https://img.myshopline.com/image/store/1749109647423/harperwu-A-young-20-year-old-European-and-American-girl-wearing-419899a9-4f73-42a4-b3ff-57107ee49ae3.png?w=1024&h=1024",
"alt": null,
"caption": null,
"content_type": "IMAGE"
}
],
"featured_media": {
"alt": null,
"caption": null,
"content_type": "IMAGE",
"id": "7025981872526871687",
"preview_image": null,
"src": "https://img.myshopline.com/image/store/1749109647423/harperwu-A-young-20-year-old-European-and-American-girl-wearing-419899a9-4f73-42a4-b3ff-57107ee49ae3.png?w=1024&h=1024"
},
"handle": "multi-color-stitching-dress",
"combined_listing": null,
"is_gift_card": false,
"created_at": "2025-06-05T15:41:02+08:00",
"product_category": null,
"tags": "Hot Sale",
"title": "Multi-color stitching dress",
"updated_at": "2025-06-05T15:41:05+08:00",
"images": [
{
"src": "https://img.myshopline.com/image/store/1749109647423/harperwu-A-young-20-year-old-European-and-American-girl-wearing-419899a9-4f73-42a4-b3ff-57107ee49ae3.png?w=1024&h=1024",
"alt": null,
"id": "7025981872526871687"
}
],
"published_scope": "web",
"spu": null,
"variants": [
{
"sku": "240",
"barcode": "273847",
"inventory_policy": "continue",
"id": "18070259818752783618794095",
"image": null,
"option4": null,
"product_id": "16070259818748421542564095",
"weight_unit": "g",
"inventory_tracker": true,
"option5": null,
"position": 1,
"taxable": true,
"weight": "500.00",
"option1": "Yellow",
"option2": "S",
"title": "Yellow · S",
"inventory_item_id": "7025981877056704002",
"required_shipping": true,
"option3": null,
"price": "100.00",
"inventory_quantity": 100,
"compare_at_price": "56.00"
},
{
"product_id": "16070259818748421542564095",
"compare_at_price": "56.00",
"inventory_tracker": true,
"required_shipping": true,
"option5": null,
"image": null,
"option1": "Yellow",
"inventory_quantity": 100,
"sku": "242",
"position": 2,
"taxable": true,
"title": "Yellow · M",
"weight": "300.00",
"inventory_policy": "continue",
"option3": null,
"id": "18070259818752783618884095",
"option2": "M",
"option4": null,
"weight_unit": "g",
"inventory_item_id": "7025981877073481222",
"barcode": null,
"price": "100.00"
},
{
"price": "100.00",
"sku": "244",
"weight": "700.00",
"option5": null,
"position": 3,
"id": "18070259818752783618944095",
"option2": "L",
"option4": null,
"inventory_quantity": 100,
"title": "Black · L",
"weight_unit": "g",
"compare_at_price": "56.00",
"inventory_tracker": true,
"taxable": true,
"inventory_item_id": "7025981877056704004",
"required_shipping": true,
"option3": null,
"option1": "Black",
"product_id": "16070259818748421542564095",
"barcode": "273847",
"inventory_policy": "continue",
"image": null
},
{
"option2": "S",
"option4": null,
"title": "Grey · S",
"required_shipping": true,
"barcode": "273847",
"inventory_policy": "continue",
"price": "100.00",
"inventory_quantity": 100,
"weight_unit": "g",
"sku": "241",
"option3": null,
"option5": null,
"position": 4,
"id": "18070259818752783619014095",
"product_id": "16070259818748421542564095",
"taxable": true,
"inventory_item_id": "7025981877056704000",
"inventory_tracker": true,
"weight": "700.00",
"option1": "Grey",
"compare_at_price": "56.00",
"image": null
}
],
"vendor": null,
"status": "archived",
"combined_listing_role": null,
"product_type": "NORMAL",
"body_html": "<div class=\"xxkkk2\" style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: ProximaNova-Regular; line-height: 1.7; letter-spacing: 1px; white-space: normal; background-color: rgb(255, 255, 255); color: rgb(45, 45, 45); font-size: 14px;\">\n<div class=\"xxkkk2\" style=\"margin: 0px; padding: 0px; box-sizing: border-box; line-height: 1.7;\"><span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\"><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Style:</span> Cozy<br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: \"Noto Serif\", \"Noto Sans\", serif;'></span></div>\n<div class=\"xxkkk\" style=\"margin: 0px; padding: 0px; box-sizing: border-box; line-height: 1.7;\"><div class=\"xxkkk20\" style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: \"Noto Serif\", \"Noto Sans\", serif; line-height: 1.7;'>\n<p style='margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'><span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\"><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Occasion:Casual & Street</span></span></p>\n<span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\"><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Material:Polyester</span><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Length:</span> Medium<br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Sleeves Length:Long Sleeves</span><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Pattern Type:Mixed Color</span><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Material Stretch:Slight Stretch</span><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Season:</span> Fall<br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>With Belt:No</span><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Weight:0.310kg</span><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 1.7;'>Package:</span> 1 x Dress</span>\n</div></div>\n<div class=\"xxkkk20\" style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: \"Noto Serif\", \"Noto Sans\", serif; line-height: 1.7;'><span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\"></span></div>\n</div><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; font-family: ProximaNova-Regular; line-height: 1.7; letter-spacing: 1px; white-space: normal; color: rgb(45, 45, 45); font-size: 14px;\"><span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\"><strong style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><br style=\"margin: 0px; padding: 0px; box-sizing: border-box;\">Please Note:</strong><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'></span></p><div id=\"ext_statement\" style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: ProximaNova-Regular; white-space: normal; color: rgb(45, 45, 45); font-size: 14px;\">\n<div class=\"xxKKK2\" style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; line-height: 20px;\"><span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\">Due to possible physical differences between different monitors (e.g. models, settings, color gamut, panel type, screen glare, etc), the product photography is illustrative only and may not precisely reflect the actual color of the item received.<br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'></span></p></div>\n<div class=\"xxKKK2\" style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'>\n<span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\"><strong style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'>Style and Fit Disclaimer:</strong><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'></span><p style=\"margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; line-height: 20px;\"><span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\">We can guarantee that the overall style displayed in the photography is accurate, however there may be differences in how the style appears during wear. This depends on other physical variables, e.g. personal body size, body shape, limb proportion, height, etc.<br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><strong style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'>Instruction:</strong><br style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'></span></p>\n</div>\n<div class=\"xxKKK2\" style='margin: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif;'><span style=\"margin: 0px; padding: 0px; box-sizing: border-box; font-family: Arial;\">There may be 1 - 3cm differ due to manual measurement. Please choose the right one according to your actual situation.</span></div>\n</div><p style='margin-top: 0px; margin-bottom: 0px; padding: 0px; box-sizing: border-box; font-family: andy-money, \"Noto Sans TC\", system-ui, -apple-system, \"Segoe UI\", Roboto, Ubuntu, Cantarell, \"Noto Sans\", sans-serif; line-height: 20px;'><br style=\"margin: 0px; padding: 0px; box-sizing: border-box; color: rgb(51, 51, 51); font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);\"></p><p><br></p>",
"image": {
"alt": null,
"id": "7025981872526871687",
"src": "https://img.myshopline.com/image/store/1749109647423/harperwu-A-young-20-year-old-European-and-American-girl-wearing-419899a9-4f73-42a4-b3ff-57107ee49ae3.png?w=1024&h=1024"
},
"subtitle": ""
}
]
}
Error response example
HTTP/1.1 401 Unauthorized
{
"errors": "ACCESS_TOKEN is expired!"
}
When a request fails, you can decide whether to retry the request based on the returned HTTP status code and error message.
Notes
When calling the REST Admin API, you must comply with the following data transmission and format specifications.
- When the API you call requires pagination, refer to Pagination mechanism.
- The response size limit for the REST Admin API is 8 MB. Use pagination to control the amount of data returned in a single request.
- Time fields in both requests and responses follow the ISO 8601 standard.
- When processing response data, you need to convert the time to the corresponding time zone based on your business needs. You can perform the conversion using the
iana_timezone(the store's time zone) field returned by the Get a store API.
Call restrictions
Your requests will be restricted in the following scenarios:
- The store is frozen, closed, or the plan has expired.
- Your request rate exceeds the rate limit of the REST Admin API.