Developer Documentation

Public API Reference

Access product catalogues, images, and dimensions using our OAuth 2.0 secured REST API. Authenticate once, then query your assigned channel's data.

Base URL https://nucleus.smdtechnologies.com/api/public/v1
Authentication OAuth 2.0

All product endpoints require a valid Bearer token. This API uses the OAuth 2.0 Client Credentials flow — your server authenticates directly without user involvement.

1
Obtain credentials — You will be issued a clientId and clientSecret by the system administrator.
2
Request a token — POST to /oauth/token with your credentials and grantType=client_credentials.
3
Use the token — Include it in every request: Authorization: Bearer <access_token>
4
Refresh when expired — Tokens expire after 3600 seconds (1 hour). Repeat step 2 to obtain a fresh token.
⚠ Rate Limiting & DDOS Protection
All product endpoints are subject to rate limiting. Excessive requests may be blocked automatically. Cache responses where possible.
Obtain Access Token

Exchange your client credentials for a short-lived Bearer token used to authenticate product API calls.

POST /oauth/token Client Credentials Token
Overview
Request
Response
Content-Type: application/x-www-form-urlencoded
The token endpoint accepts form-encoded fields, not JSON.
Form Fields
FieldTypeRequiredDescription
clientIdstringrequiredThe client identifier issued to your integration.
clientSecretstringrequiredThe client secret. Stored as a SHA-256 hash server-side — never logged in plaintext.
grantTypestringrequiredMust be exactly client_credentials.
Response Codes
200Token issued. Response contains access_token, token_type, and expires_in.
400Invalid grantType — must be client_credentials.
401Invalid clientId / clientSecret, or the channel is inactive.
# cURL example curl -X POST https://your-domain.com/oauth/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "clientId=your_client_id" \ -d "clientSecret=your_client_secret" \ -d "grantType=client_credentials"
{ "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "token_type": "Bearer", "expires_in": 3600 }
Products Bearer Required

All endpoints below require Authorization: Bearer <access_token> and Content-Type: application/json for POST requests.

GET /api/public/v1/products List all SKUs
Overview
Request
Response

Returns all product SKU codes assigned to your channel. Use the returned SKUs as input to /products-details, /product-images, and /product-dimensions.

Response Codes
200Returns count and a products array of SKU strings.
401Unauthorized — missing or invalid Bearer token.
curl -X GET https://your-domain.com/api/public/v1/products \ -H "Authorization: Bearer <access_token>"
{ "count": 3, "products": [ "ENDER-2PRO", "ENDER-3V2", "WF-LC900/VZE" ] }
GET /api/public/v1/products/full Full product catalogue
Overview
Request

Convenience endpoint that returns enriched product data for your entire channel in a single call. Internally fetches your SKU list, then retrieves full product details for each. Use this when you need everything in one request.

Response Codes
200Array of full product objects for your channel.
401Unauthorized.
curl -X GET https://your-domain.com/api/public/v1/products/full \ -H "Authorization: Bearer <access_token>"
POST /api/public/v1/products-details Product details by SKU list
Overview
Request

Returns core product data for a supplied list of SKUs. Use this for granular control when you only need a subset of your catalogue.

Request Body
FieldTypeRequiredDescription
skusstring[]requiredArray of SKU codes to retrieve details for.
Response Codes
200Array of product detail objects.
400Missing or invalid SKU list.
401Unauthorized.
curl -X POST https://your-domain.com/api/public/v1/products-details \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "skus": ["ENDER-2PRO", "ENDER-3V2"] }'
POST /api/public/v1/product-dimensions Dimensions by SKU list
Overview
Request
Response

Returns dimensional and physical data for the requested SKUs. Products with no dimension records will have an empty dimensions array.

Request Body
FieldTypeRequiredDescription
skusstring[]requiredArray of SKU codes.
Dimension Fields
FieldTypeDescription
idintDimension record identifier
lengthdecimal?Product length
widthdecimal?Product width
heightdecimal?Product height
grossWeightdecimal?Gross weight
barcodestring?Product barcode
Response Codes
200Returns total count and products array with dimension data per SKU.
400Missing or invalid SKU list.
401Unauthorized.
curl -X POST https://your-domain.com/api/public/v1/product-dimensions \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "skus": ["ENDER-2PRO"] }'
{ "total": 1, "products": [ { "productId": 42, "sku": "ENDER-2PRO", "dimensions": [ { "id": 7, "length": 36.5, "width": 22.0, "height": 40.0, "grossWeight": 5.2, "barcode": "6970919861013" } ] } ] }
POST /api/public/v1/product-images Images grouped by SKU
Overview
Request
Response

Returns product images grouped by SKU. Every requested SKU is always present in the response — those with no images return an empty images array. Images are sorted by displayOrder ascending.

Request Body
FieldTypeRequiredDescription
skusstring[]requiredArray of SKU codes to retrieve images for.
Image Fields
FieldTypeDescription
urlstringFull URL to the product image. Empty string if unavailable.
displayOrderlong?Sort order for display. Lower values display first.
Response Codes
200Array of { sku, images[] } objects — all requested SKUs are always included.
400Missing or invalid SKU list.
401Unauthorized.
curl -X POST https://your-domain.com/api/public/v1/product-images \ -H "Authorization: Bearer <access_token>" \ -H "Content-Type: application/json" \ -d '{ "skus": ["WF-LC900/VZE", "KBD-G900/BCE"] }'
[ { "sku": "WF-LC900/VZE", "images": [ { "url": "https://cdn.example.com/WF-LC900-1.jpg", "displayOrder": 1 }, { "url": "https://cdn.example.com/WF-LC900-2.jpg", "displayOrder": 2 } ] }, { "sku": "KBD-G900/BCE", "images": [] } ]