Skip to main content

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.json URLs. 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:read scope.
  • License endpoints require the licenses:read scope.
  • 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

PurposeEndpointNotes
Get assetsGET /client/assets?skuIds=sku1,sku2,...Returns asset information and signed URLs when available.
Check asset licenseGET /client/assets/check?skuId=sku1Checks whether one Product ID exists and is licensed.
List licensesGET /client/licenseReturns all licenses available to the authenticated client.
Get licenseGET /client/license/:licenseIdReturns details for one license.
List Product IDs for licenseGET /client/license/:licenseId/skusReturns 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:

StatusMeaning
400Invalid request, or expired license when listing license SKUs.
401Missing or invalid API key.
403API key does not have the required scope.
404Requested license was not found for the client.
429Rate limit exceeded.

Asset Fields

Asset responses may include:

FieldTypeDescription
skuIdstringProduct ID requested.
existsbooleanWhether the Product ID exists for the client.
isLicensedbooleanWhether the Product ID is covered by an active license.
assetPathstringOriginal asset path.
assetTypestringAsset category, such as footwear, wristwear, headwear, apparel, or generic.
metadataobjectOptional asset metadata.
assetsUrlstringSigned URL to the offsets.json asset when available.
signatureExpiresAtstringISO 8601 timestamp when the signed URL expires.
activatedAtstringISO 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:

FieldTypeDescription
licenseIdstringLicense ID.
maxSkusnumberMaximum number of Product IDs allowed for the license.
expirationDatestringISO 8601 timestamp when the license expires.
createdAtstringISO 8601 timestamp when the license was created.
updatedAtstringISO 8601 timestamp when the license was last updated.
skuCountnumberCurrent number of Product IDs attached to the license.
isExpiredbooleanWhether the license has expired.

Usage Notes

  • Batch Product ID lookups where possible.
  • Check exists, isLicensed, and assetsUrl before 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.json URLs.

Typical Flow

  1. If needed, call GET /client/license to find your license ID.
  2. Call GET /client/license/:licenseId/skus to list available Product IDs and signed offsets.json URLs for that license.
  3. Pass the signed assetsUrl to your VTO or Viewer integration.
  4. 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}'