RecomNext

Importing the product catalog

Load items into RecomNext via direct API upserts or scheduled catalog feeds. Configure dimensions, field mapping, freshness, and embedding templates so recommendations, nextQL, and vector search work correctly.

API base URLs
Engine API base URLAdmin UI
https://api.proxy.vpn.recomnext.com/apihttps://admin.proxy.vpn.recomnext.com

Use the engine base URL as baseUrl in widgets and SDKs.

Catalog model

Each item has a stable externalId (your SKU or product ID), an optional top-levelcategory, and a flexible attributes object. Recommendations returnitemId, which matches externalId from ingestion.

SettingTypeDefaultDescription
externalIdstring—Required. Primary catalog key from your system.
categorystring—Optional. Used in filters, diversity, and fallbacks.
attributesobject—Price, stock, images, genres, etc. Referenced in nextQL as quoted keys.
expiresAtISO date—Optional. Catalog metadata for expiry; does not auto-delete items.
Method A — Direct API ingestion

Best for real-time updates, ERP sync, and incremental price or stock changes. Requires API key or HMAC private token — not browser public tokens.

Request
POST https://api.proxy.vpn.recomnext.com/api/ingestion/items
Content-Type: application/json
X-Tenant-Id: aurora-games
X-Api-Key: rnx_key_...

{
  "items": [
    {
      "externalId": "game-elden-ring",
      "category": "pc",
      "attributes": {
        "name": "Elden Ring",
        "price": 59.99,
        "stock": 120,
        "genre": ["rpg", "action"],
        "featured": true,
        "releaseDate": "2022-02-25"
      }
    },
    {
      "externalId": "game-hades",
      "category": "pc",
      "attributes": {
        "name": "Hades",
        "price": 24.99,
        "stock": 0,
        "genre": ["roguelike"]
      }
    }
  ]
}
Response
{ "upserted": 2 }
Use case
Real-time stock and price sync

Your OMS pushes deltas every few minutes. Upsert only changed SKUs in batches of 100–500. Use a global in-stock rule or scenario filter'stock' > 0 — out-of-stock items remain in catalog for analytics.

await client.ingestion.upsertItems([
  { externalId: 'game-hades', category: 'pc', attributes: { stock: 45, price: 19.99 } },
]);
Use case
New release day

Add the SKU with rich attributes before marketing goes live. Set featured: true and pair with a booster in the homepage scenario.

Method B — Catalog feeds

Best for nightly or hourly full-catalog sync from a partner API or JSON URL. One active feed per tenant.

SettingTypeDefaultDescription
sourceTypeapi | json_url—Pull from REST API or static JSON URL.
itemsPathJSONPath—Path to array of raw items, e.g. $.data
itemIdPathpath—Field for externalId, e.g. sku
mappingRulesarray—Maps source fields to attributes, category, or semantic targets.
paginationobject—none, cursor, or limit_offset for large catalogs.
scheduleModemanual | interval | cron—When sync runs automatically.
Example feed configuration
POST https://api.proxy.vpn.recomnext.com/api/catalog/feeds
{
  "sourceType": "api",
  "url": "https://catalog.auroragames.example/v1/products",
  "method": "GET",
  "itemsPath": "$.data",
  "itemIdPath": "sku",
  "pagination": {
    "mode": "cursor",
    "cursorParam": "cursor",
    "cursorPath": "$.nextCursor",
    "pageSize": 200
  },
  "mappingRules": [
    { "property": "name", "path": "title", "dataType": "string", "target": "name" },
    { "property": "price", "path": "pricing.usd", "dataType": "double", "target": "basePrice" },
    { "property": "coverUrl", "path": "media.cover", "dataType": "image", "target": "coverImage" },
    { "property": "genre", "path": "tags", "dataType": "enum", "target": "attributes", "facetable": true },
    { "property": "stock", "path": "inventory.available", "dataType": "int", "target": "attributes" }
  ]
}

Workflow: POST /catalog/feeds/:id/preview → activate → sync. Items not seen in a sync can be marked available: false (see availability below).

Use case
Multi-region catalog with nested JSON

Map regional price into attributes.price_us and attributes.price_eu. SetfieldMapper.basePricePath to the region you surface in widgets, or include both inincludedProperties when fetching recs.

Dimensions

Dimensions describe attribute metadata for admin UI, faceting, and nextQL discoverability. They do not replace storing values on items — they document what 'genre' or 'platform' means.

PUT https://api.proxy.vpn.recomnext.com/api/catalog/tenant-settings
{
  "dimensions": [
    {
      "key": "genre",
      "type": "enum",
      "label": "Genre",
      "facetable": true,
      "filterable": true,
      "boostable": true,
      "source": "manual"
    },
    {
      "key": "platform",
      "type": "string",
      "label": "Platform",
      "filterable": true
    }
  ]
}
SettingTypeDefaultDescription
typeenum | string | number | boolean | date—How the attribute is interpreted.
facetableboolean—Eligible for search facets (with hybrid search).
filterableboolean—Shown as filterable in admin and nextQL tooling.
boostableboolean—Documented as safe for booster expressions.
sourcemanual | feed—feed dimensions can be merged from catalog feed sync.
Field mapper (mappings)

When your stored JSON is not flat attributes.*, configure paths for admin display and semantic feed targets. This does not change projection paths — use literal document paths in includedProperties.

PUT https://api.proxy.vpn.recomnext.com/api/catalog/tenant-settings
{
  "fieldMapper": {
    "externalIdPath": "attributes.sku",
    "namePath": "attributes.title",
    "categoryPath": "attributes.platform",
    "coverImagePath": "attributes.media.cover",
    "basePricePath": "attributes.pricing.usd",
    "taxonomyPath": "attributes.taxonomyPath"
  }
}
SettingTypeDefaultDescription
externalIdPathpath—Display identity when not top-level externalId.
namePathpath—Product title for admin and widgets.
coverImagePathpath—Primary image URL.
basePricePathpath—Default price field for cards.
taxonomyPathpath—Category tree or breadcrumb path.
Freshness configuration

Freshness tells the engine which attribute represents item age for scenario constraintfreshnessBoostDays (ranking boost, not hard filtering).

{
  "freshness": {
    "keyPath": "attributes.releaseDate",
    "type": "date",
    "fallbackToCreatedAt": true
  }
}
Use case
Boost new releases on homepage

Set freshnessBoostDays: 14 on the homepage scenario. Items with release dates in the last 14 days get a scoring boost. For hard cutoffs, add a scenario filter like'releaseDate' > '2026-01-01' (depends on stored format).

Embedding templates

Similar-products and vector search embed item text derived from templates. After upsert, indexing runs asynchronously when a template exists.

SettingTypeDefaultDescription
slugstring—Template identifier for category-specific overrides.
templatestring—Format string: {name}, {category}, {description}, plus attribute keys.
isDefaultboolean—Tenant fallback when no category match.
appliesTostring[]—Categories using this template.
POST https://api.proxy.vpn.recomnext.com/api/catalog/embedding-templates
{
  "name": "Games default",
  "slug": "games-default",
  "template": "{name} | {category} | genres: {genre} | {description}",
  "isDefault": true,
  "appliesTo": []
}
Use case
Category-specific templates

PC games include platform and genre; DLC items emphasize parent game name. Create templates withappliesTo: ["pc", "console"] for richer vectors on PDP similar-products.

Availability and lifecycle

Distinguish out of stock (attribute, filter with nextQL) from delisted(feed-managed available: false). Recommendations generally exclude unavailable items.

SettingTypeDefaultDescription
attributes.stocknumber—Business stock; use filters to hide from recs.
availableboolean—Set false when item missing from feed sync.
feedManagedboolean—Item owned by active catalog feed.