inRiver REST Proxy

Lift low-level inRiver API to a business-relevant level

The Challenge


API and outputs are strongly driven by inRiver internal setup and persistence. A data recipient typically should not be confronted with "includes", lookup for "CVLs" or "Resource rendition URLs".


Standard API and REST expose atomic inRiver data aspects - always based on the (internal and numeric) entityId. This requires a lot of back-and-forth to fetch all relevant data. Also entityId not suited as external identifier as it may change over time or across environments.

Complex to use

API for retrieval is difficult to use as it separates querying from downloading and requires in-depth understanding of the underlying data model. All interaction from external side should happen on business-relevant level, similar to "SELECT" or "UPSERT" actions offered by other modern Cloud-based services.

The rescue: Until inRiver can incorporate a more business-relevant API, BrainBoutique offers a REST Proxy to "lift" inRiver access to a business-relevant level:

  • OpenAPI / Swagger definition
  • Orchestrates low-level inRiver API and compiles information fragments into business-relevant representations
  • Standard search / download / upload functionality for entity data
  • Caching and monitoring

The integration is based on a flexible but business-relevant representation of all uploaded and downloaded information: The Canonical Data Format.

Canonical Data Format

To make your product data more relevant to Business, external recipients and other systems, a Canonical Data Format is uses to represent all data stored in inRiver.

In contrast to low-level key-value-pairs for inRiver "fields" per "entity", the aggregation level of the Canonical Model is a business-relevant level of aggregation. For example, all different sizes for a product can be exposed in one go.

For example, a SAP sourced product could be modeled as "Material" in inRiver with a set of ("included") entities of type "Color". The JSON representation of such a product could look like:

    "MaterialSeriesName": "FASHION 1102",
    "MaterialGender": {
      "#": "FA",
      "en": "Female",
      "$": "Female"
    "MaterialStyleCode": {
      "#": "Mini",
      "en": "Mini",
      "$": "Mini"
    "MaterialSeries": "17309",
    "MaterialMaterialDescription": {
      "en": "Fashion 1102 Mini",
      "de": "Fashion 1102 Mini",
      "da": "Fashion 1102 Mini", ...
    "MaterialColors": [
        "ColorWashingInstructions": [
            "#": "8",
            "en": "machine wash 30°C",
            "#": "17",
            "en": "Do not bleach",
          }, ...
        "ColorCode": {
          "#": "00AS",
          "en": "CARAMBOLE",
          "de": "CARAMBOLE", ...
        }, ...
        "ColorSKUData": [
            "SKUStatus": "40",
            "SKUGridId": "00AS000L",
            "SKUSizeDisplayNameINTL": "L", ...
            "SKUStatus": "40",
            "SKUGridId": "00AS000M",
            "SKUSizeDisplayNameINTL": "M", ...
          }, ...
        "ColorCode": {
          "#": "00GT",
          "en": "VANILLE",
          "de": "VANILLE", ...
        }, ...

The recipient of such a representation of inRiver data is not confronted with internal details on how the information is persisted. Especially, following aspects are represented in a way that does not require knowledge of the underlying system:

  • Localized data
  • Inline CVL ("Controlled Vocabulary List") data
  • Relations traversed ("included" or "includes")
  • ...and many more...

REST Proxy

Until inRiver is providing an integration-friendly version of the REST API, BrainBoutique is proud to provide a REST Proxy. Documented via OpenAPI (Swagger) it allows easy access to inRiver managed data:

  • CRUD operations (including lookup based on business-relevant entity keys)
  • Various output formats (JSON, CSV, ...)
  • Data model caching
  • Transparent security based on APIKey

OpenAPI specification - including Swagger frontend - is accessible via

Please get in contact to obtain credentials for test-driving the functionality with your own data!

Swagger definition (snapshot):