Assets API
Overview
Use the Assets API to resolve one or more Product IDs to signed offsets.json URLs for Vyking VTO and Viewer integrations.
The API parameter is named skuIds; pass your Product IDs in that query parameter.
Account structure: Client -> License -> Product IDs.
You can query assets directly by Product ID, or list the Product IDs attached to a license. If your account has one license, all available Product IDs are attached to that license.
Signed URLs require VTO and Viewer distributions that support signed
offsets.jsonURLs. Older distributions will not be able to load these URLs.
Base URL
https://api-assets.vyking.io
Authentication
Include your API key in every request. Either header is supported:
Authorization: Bearer your-api-key
or:
x-api-key: your-api-key
Scope and Limits
- Asset endpoints require the
assets:readscope. - License endpoints require the
licenses:readscope. - Rate limit: 100 requests per second for asset and license checks.
- Batch size: up to 50 Product IDs per assets request.
- Rate limit errors:
429 Too Many Requests
If you receive a 429 response, throttle requests or retry with backoff.
Endpoints
| Purpose | Endpoint | Notes |
|---|---|---|
| Get assets | GET /client/assets?skuIds=sku1,sku2,... | Returns asset information and signed URLs when available. |
| Check asset license | GET /client/assets/check?skuId=sku1 | Checks whether one Product ID exists and is licensed. |
| List licenses | GET /client/license | Returns all licenses available to the authenticated client. |
| Get license | GET /client/license/:licenseId | Returns details for one license. |
| List Product IDs for license | GET /client/license/:licenseId/skus | Returns Product IDs and signed URLs attached to one active license. |
Listing Available Assets
The simplest way to see all assets available to your account is to call the license SKU endpoint:
GET /client/license/:licenseId/skus
This returns every Product ID attached to that license, along with the signed assetsUrl for each available offsets.json. For accounts with one license, this is usually the best endpoint to use when you want to discover the full asset list.
Use GET /client/assets?skuIds=... when you already know which Product IDs you want to load or refresh.
Example response:
{
"message": "License SKUs retrieved successfully",
"data": [
{
"exists": true,
"skuId": "A57494122",
"assetPath": "/vyking-assets/.../offsets.json",
"assetType": "footwear",
"activatedAt": "2026-05-08T09:46:58.624Z",
"assetsUrl": "https://cdn.vyking.io/vyking-assets/.../offsets.json?Policy=...&Key-Pair-Id=...&Signature=...",
"signatureExpiresAt": "2026-05-15T10:02:26.000Z"
},
{
"exists": true,
"skuId": "A57493877",
"assetPath": "/vyking-assets/.../offsets.json",
"assetType": "footwear",
"activatedAt": "2026-05-08T09:46:57.300Z",
"assetsUrl": "https://cdn.vyking.io/vyking-assets/.../offsets.json?Policy=...&Key-Pair-Id=...&Signature=...",
"signatureExpiresAt": "2026-05-15T10:02:26.000Z"
}
],
"meta": {
"timestamp": "2026-05-08T10:02:26.000Z",
"path": "/client/license/{your_license_id}/skus"
}
}
Requests
skuIds accepts a comma-separated list:
GET /client/assets?skuIds=sku1,sku2,sku3
The API also accepts repeated query parameters:
GET /client/assets?skuIds=sku1&skuIds=sku2&skuIds=sku3
licenseId must be a UUID.
Response Format
Successful responses are wrapped with a message, data, and meta object:
{
"message": "Assets retrieved successfully",
"data": [],
"meta": {
"timestamp": "2026-07-10T12:00:00.000Z",
"path": "/client/assets?skuIds=sku1"
}
}
Error responses use the same wrapper and may include an errors array:
{
"message": "Validation failed",
"data": null,
"errors": ["Maximum of 50 SKU IDs allowed per request"],
"meta": {
"timestamp": "2026-07-10T12:00:00.000Z",
"path": "/client/assets?skuIds=..."
}
}
Common status codes:
| Status | Meaning |
|---|---|
400 | Invalid request, or expired license when listing license SKUs. |
401 | Missing or invalid API key. |
403 | API key does not have the required scope. |
404 | Requested license was not found for the client. |
429 | Rate limit exceeded. |
Asset Fields
Asset responses may include:
| Field | Type | Description |
|---|---|---|
skuId | string | Product ID requested. |
exists | boolean | Whether the Product ID exists for the client. |
isLicensed | boolean | Whether the Product ID is covered by an active license. |
assetPath | string | Original asset path. |
assetType | string | Asset category, such as footwear, wristwear, headwear, apparel, or generic. |
metadata | object | Optional asset metadata. |
assetsUrl | string | Signed URL to the offsets.json asset when available. |
signatureExpiresAt | string | ISO 8601 timestamp when the signed URL expires. |
activatedAt | string | ISO 8601 timestamp when the Product ID was added to a license. Returned by license SKU listing. |
Use assetsUrl directly with VTO or Viewer. It includes the signature needed to load the offsets.json asset and its related resources.
If a Product ID does not exist, the response item includes skuId, exists: false, and isLicensed: false. If a Product ID exists but is not licensed, no signed URL is returned.
License Fields
License responses may include:
| Field | Type | Description |
|---|---|---|
licenseId | string | License ID. |
maxSkus | number | Maximum number of Product IDs allowed for the license. |
expirationDate | string | ISO 8601 timestamp when the license expires. |
createdAt | string | ISO 8601 timestamp when the license was created. |
updatedAt | string | ISO 8601 timestamp when the license was last updated. |
skuCount | number | Current number of Product IDs attached to the license. |
isExpired | boolean | Whether the license has expired. |
Usage Notes
- Batch Product ID lookups where possible.
- Check
exists,isLicensed, andassetsUrlbefore using a returned asset. - Cache signed URLs until
signatureExpiresAt. - Treat signed URLs as sensitive data.
- Use a current VTO or Viewer distribution for signed
offsets.jsonURLs.
Typical Flow
- If needed, call
GET /client/licenseto find your license ID. - Call
GET /client/license/:licenseId/skusto list available Product IDs and signedoffsets.jsonURLs for that license. - Pass the signed
assetsUrlto your VTO or Viewer integration. - If you already know the Product IDs you need, call
GET /client/assets?skuIds=...directly.
Examples
Get Assets for a Product ID
curl --request GET \
--url 'https://api-assets.vyking.io/client/assets?skuIds=3WE30074422' \
--header 'x-api-key: {vy_api_key_your_api_key}'
Get Assets for Multiple Product IDs
curl --request GET \
--url 'https://api-assets.vyking.io/client/assets?skuIds=sku1,sku2,sku3' \
--header 'x-api-key: {vy_api_key_your_api_key}'
Check a Product ID
curl --request GET \
--url 'https://api-assets.vyking.io/client/assets/check?skuId=3WE30074422' \
--header 'x-api-key: {vy_api_key_your_api_key}'
List Licenses
curl --request GET \
--url 'https://api-assets.vyking.io/client/license' \
--header 'x-api-key: {vy_api_key_your_api_key}'
List Product IDs for a License
curl --request GET \
--url 'https://api-assets.vyking.io/client/license/{your_license_id}/skus' \
--header 'x-api-key: {vy_api_key_your_api_key}'