Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

In order to assist with the Data Integration (DI) efforts with 3rd party systems (ex: graphQL, Prismic, GraphCMS, BigQuery, PlentyMarkets, GCS, Contentful, etc), Boxalino is presenting the Data Transformer service https://boxalino-di-transformer-krceabfwya-ew.a.run.app/

...

  1. Review the Transformer services:

    1. is your connector type is not yet supported, please get in touch with Boxalino.

  2. Use the https://boxalino-di-transformer-krceabfwya-ew.a.run.app/transformer/view service to identify the body content requested for the API request.

  3. Identify the content types (blog, banner, categories, etc) that must be integrated from your 3rd party source.

  4. Prepare the connector options https://boxalino.atlassian.net/wiki/spaces/BPKB/pages/662536193/Transformer#CONNECTOR with content from your 3rd party system.

  5. Do a test connector request https://boxalino.atlassian.net/wiki/spaces/BPKB/pages/662536193/Transformer#TEST-REQUEST

  6. Prepare the mappinghttps://boxalino.atlassian.net/wiki/spaces/BPKB/pages/662536193/Transformer#MAPPING for each content type you want to export.

  7. Do a test sample request https://boxalino.atlassian.net/wiki/spaces/BPKB/pages/662536193/Transformer#REQUEST-DEFINITION

...

 

Endpoint

full data sync

https://boxalino-di-transformer-krceabfwya-ew.a.run.app

1

 

delta data sync

TBC

2

instant data sync

TBC

3

Action

/sync

42

Method

POST

53

Body

use the public endpoint
https://boxalino-di-transformer-krceabfwya-ew.a.run.app/transformer/view
to check the required BODY structure for your integration use-case (it depends on the content type and connector type)

64

Headers

Authorization

Basic base64<<DATASYNC API key : DATASYNC API Secret>>

note: use the API credentials from your Boxalino account that have the ADMIN role assigned

75

 

Content-Type

application/json

86

 

client

account name

97

 

mode

data sync mode: F for full, D for delta

108

 

type

product, user, content, user_content, order.

if left empty - it will check for all tables with the given tm

119

 

tm

(optional) time , in format: YmdHis

technical: used to identify the documents version

1210

 

ts

(optional) timestamp, must be millisecond based in UNIX timestamp

1311

dev

(optional) use this to mark the content for the dev data index

...

The connector properties are:

  1. type (select from the available optionsprismic, graphcms, strapi, gcs, plentymarket, sftp)

  2. options (gets generated based on the selected connector type)

...

Expand
titlePrismic Connector Properties
Code Block
"connector": {
  "type": "prismic",
  "options": {
      "query": [],
      "method": "GET",
      "access_token": "",
      "url": ""
  }
}

The query content must be a list of filters and it should be escaped (copy-paste each [] filter into an escape/unescape online tool)

Review this sample from Boxalino`s public Prismic repository:

Code Block
"connector": {
    "type": "prismic",
    "options": {
      "url": "https://rtux-integration.cdn.prismic.io/api/v2/",
      "access_token": "MC5ZSkU4SnhBQUFDSUFXSXZR.77-9QO-_vWR577-977-9HO-_ve-_ve-_vXPvv73vv71LeO-_vUNi77-9Ii3vv73vv73vv71sC2Xvv71A77-9IA",
      "query": ["[at(document.type, \"blog\")]"]
    }
  }
Expand
titleGraphCMS Connector Properties
Code Block
"connector": {
  "type": "graphql",
  "options": {
      "fields": "",
      "type": "",

     "method": "POST",
      "token": "",
      "endpoint": "",
      "filters": "",
      "locales": []
  }
}

The fields and filters must be escaped (copy-paste the graphiQL section into an escape/unescape online tool)
Review this sample from Boxalino`s public GraphCMS repository:

Code Block
{
  "connector": {
    "type": "graphql",
    "options": {
      "endpoint": "https://api-eu-central-1.graphcms.com/v2/ckll4a83ni7og01yzfr3k9yc4/master",
      "token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImdjbXMtbWFpbi1wcm9kdWN0aW9uIn0.eyJ2ZXJzaW9uIjozLCJpYXQiOjE2MjI1NjIzMzMsImF1ZCI6WyJodHRwczovL2FwaS1ldS1jZW50cmFsLTEuZ3JhcGhjbXMuY29tL3YyL2NrbGw0YTgzbmk3b2cwMXl6ZnIzazl5YzQvbWFzdGVyIiwiaHR0cHM6Ly9tYW5hZ2VtZW50LW5leHQuZ3JhcGhjbXMuY29tIl0sImlzcyI6Imh0dHBzOi8vbWFuYWdlbWVudC5ncmFwaGNtcy5jb20vIiwic3ViIjoiZjZlMTcyNGYtOTI2NS00OTFjLWEwMzktYzFkNGI2ZDExZDA5IiwianRpIjoiY2twZTdweDVoZGR2bzAxejU1NjNwZjc1cCJ9.MjYP8I7OvwyOkiHiB22LPwOfRzEt_ilvp6jHTVufkQEs6UTxJeuOEDvcojbMAgiEa3lStbc3mOVDezOQhMoLdD-UYoSzGyKmzIBI76vsVv5xbkhKwnLBnmX2ssRHMfOgIuyEpG16SwNiyKuBOZdhC39dapEWwSn2bzWqSi4Y-LvIdsANlHfgdwzVzkJNfNAO-2oOMQC4h-QfBlUVoSEQPYLPmGDOUpcawnHXc60Lyg9rCdxooG9YVzXUeqoi4SIc8feHH4My4s_Eb9mprP6sewezTIb4ldPCVwAlh2xl5BrWYDLLNbhgVMmUVaNZjXSS40egT4xxIWiNPw4axCAKZbgsk78lgHo51t0hz8j6qIfn9G_ZNzMagKQRupx4guuMQXiXg30WjSE09HBv6QjDLQRz9A89eRAKCiGVddKGAvXy_cZrAi2OZ_gtsX993wR-kt6AtNZ7s2U5IZPribvLbiNBMtwh1kRfz_t_bUFLCJs7J332odSDkxL38LqR7oRNStZv6EqAXmelWYqBsUvnwZWI3DYqjysYfjb4JALSTwOa4zfDHDkzlaKOiIZwZkI0GroSed_fmL6cfkpmN63CRY3qNQfwG7cXT0mOuOTJSzRBw1QigfCVnM_M2881eBaBdpdwXw3zF7FlxJL1Y0uMSQ0RZ2l3WC81xH7KqUUlUPw",
      "type": "blogs",
      "fields": "{\r\n    title\r\n    __typename\r\n locale createdAt active locale\r\nid metaDescription metaTitle publishedAt createdAt\r\nseoLink updatedAt content { active\r\n html text } id\r\nheaderImage { url id metaDescription\r\nwidth height fileName} stage metaTitle\r\nbackground { css hex publishedAt\r\n} brands { id seoLink\r\nname locale } createdBy updatedAt\r\n{ id name } contenthistory {\r\n      html\r\n      text\r\n    }\r\n createdAt } publishedBy { id name } updatedBy { id name } localizations { id locale } }",
    headerImage {\r\n   "locales": [
   url\r\n      id\r\n"de_CH",
    }\r\n    stage\r\n"fr_CH"
   background {\r\n      css\r\n      hex\r\n    }\r\n    brands {\r\n      id\r\n      name\r\n    }\r\n    createdBy {\r\n      id\r\n      name\r\n    }\r\n    history {\r\n      createdAt\r\n    }\r\n    publishedBy {\r\n      id\r\n      name\r\n    }\r\n    updatedBy {\r\n      id\r\n      name\r\n    }\r\n  }",
      "locales": [
        "de_CH",
        "fr_CH"
      ],
      "filters": "active: true"
    }
  }
}

The filters are optional.
We recommend to sync fully the existing content type and use the API request to set filters.

For example, in case of localization, if your content (ex: blog) is not active in one of the languages and you set a filter for this - the default language values will be set.

...

  1. do a test/sample request without any mapping declaration to identify the default mappings

    1. In the case of prismic integrations, the following mappings are added by default:

      Code Block
      "id": "id",
      "type": "type",
      "creation": "first_publication_date",
      "last_update": "last_publication_date",
      "link": "uid",
      "string_attributes" : {"linked_ids":"alternate_languages[*].id"},
      "localized_string_attributes" : ["slugs", "href"],
      "raw" : {
        "localized_string_attributes" : [
          "alternate_languages",
          "linked_documents"
        
    "linked_documents" ]
    1. ]
      }

b. In the case of graphCms integrations, the following mappings are added by default:

Code Block
"id": "id",
"type": "__typename",
"creation": "createdAt",
"last_update": "updatedAt",
"persona_type": "createdBy.name",
"persona_id": "createdBy.id",
"localized_string_attributes" : ["stage"],
"localized_datetime_attributes" : {"published_at":"publishedAt"}

e) export of properties as raw JSON - use the raw node in the mapping

  1. properties will be available as bxraw_<repository <property name>

  2. this is helpful useful for exporting slices and other properties headless CMS specific content types that would require specific rendering in your template (ex: slices, sections, etc)

f) export linked-content : either using the contents property from the Data Structure or by exporting it as raw JSON

  1. the mapping for contents is done in the following way: "contents":{"<source for input>":{"data-structure field":"prismic CMS field"}}"

g) in order to establish in which languages the content is available, a “language status” property is added dynamically ( value 0/1 based on language)

...

Expand
titleGraphCMS Mapping sample

Warning : the mapping fields must exist in the connector options ~fields~ property.

Code Block
"mapping": {
    "id": "id",
    "type": "__typename",
    "creation": "createdAt",
    "last_update": "updatedAt",
    "persona_type": "createdBy.name",
    "persona_id": "createdBy.id",
    "title": "title",": {
    "short_descriptiontitle": "title",
    "description": "content.text",
    "images": "headerImage.url",
    "link": "seoLink",
    "tags": {
      "brands":"brands[*].name"
    },
    "parent_content_idsstatus": "stage",
    "contentsstring_attributes": [],{
      "productsbackground_hex": []"background.hex",
    "customers": [],     "storesbackground_css": "background.css",
      "statusbrand_ids" : "statebrands[*].id",
    "string_attributes": {
      "backgroundbrands" : "background.hex",brands[*].name"
    },
    "backgroundlocalized_numeric_cssattributes": "background.css",{
      "brand_idsactive" : "brands[*].idactive"
    },
    "localized_string_attributes": {
      "meta_title": "metaTitle",
      "meta_description": "metaDescription",
      "content":"content.htmlmetaDescription",
      "slugscontent": "seoLinkcontent.html"
    },
    "numeric_attributesraw": {},
        "localized_numericstring_attributes": {}, [
          "datetime_attributes": {content",
          "published_at":"publishedAt"background",
          "brands",
     },     "localized_datetime_attributes": {headerImage"
        ]
    }
  }

Info

At Boxalino, we try to map the way our client expects for a headless integration to work.

For this reason, if your connector integration libraries allows for content to be accessed as HTML or text (ex: data.content) - this is as well possible.

In the above sample:

  1. data.content is a RichText (editor) input

  2. when using the mapping “description”:data.content - it will be exported as TEXT

  3. when adding the mapping for localized_string_attributes - it will be exported as HTML.

  4. when adding the mapping in raw it will be exported as raw JSON

...

This must be declared in order to map the exported language (ex: “de”) with your connector export defined value (ex:”en-de”).

Code Block
"languages": {
  "de": "en-de",
  "fr": "fr-ch"
}

The languages list is used in order to load the data from the headless CMS (per language). Further it will identify which ID from locale A is linked to which ID from locale B in order to generate localized data.

AVAILABLE SERVICES

In order to allow our integrators to validate that the existing data available in the 3rd party systems is properly exported, a few helper services are available:

...

You can also use the SAMPLE trigger in order to access one element of the given requested types.

The JSON response will be the JSONL structure as it is exported to Boxalino GCS.

...

Expand
titleJSON body content for the SAMPLE request
Code Block
languagejson
[
 
{
 
  "connector": {
 
    "type": "prismic",

     "options": {
        "url": "https://rtux-integration.cdn.prismic.io/api/v2/",
        "access_token": "MC5ZSkU4SnhBQUFDSUFXSXZR.77-9QO-_vWR577-977-9HO-_ve-_ve-_vXPvv73vv71LeO-_vUNi77-9Ii3vv73vv73vv71sC2Xvv71A77-9IA",
 
      "query": [
          "[at(document.type, \"category\")]"
        ]
      }
    },
    "document" : {
      "type" : "content"
    },
    "mapping": {
      "title": "data.name",
      "description": "data.description",
      "images": "data.header_image.url",
      "tags": {
        "default": "tags"
      },
 {
     "parent_content_idstitle": "data.parent_category.idname",
      "statusdescription": "data.statusdescription",
     "images": "string_attributes": {data.header_image.url",
         "default_tags"parent_content_ids": "tags"data.parent_category.id",
      },
 "status": "data.status",
    "localized_string_attributes": {

       "category_title": "data.category_title",
        "slugs": "slugs",
        "linked_language_id": "alternate_languages[*].id"
      },
 
    "numeric_attributes": [{
      "position":  "data.position",
        "show_in_navigation": "data.show_in_navigation"
      ]},
   },
  "rawlanguages" : {
 
      "localized_string_attributes" : [
          "data.header_image",
   "de": "en-de",
    "fr":  "data.description"fr-ch"
  }
},
{
  "connector": ]{
    "type": "prismic",
}     },"options": {
      "languagesurl": {"https://rtux-integration.cdn.prismic.io/api/v2/",
      "deaccess_token": "en-deMC5ZSkU4SnhBQUFDSUFXSXZR.77-9QO-_vWR577-977-9HO-_ve-_ve-_vXPvv73vv71LeO-_vUNi77-9Ii3vv73vv73vv71sC2Xvv71A77-9IA",
      "frquery": ["[at(document.type, "fr-ch"\"blog\")]"]
    }
  },
  {
  "document" : {
    "type" : "content"
  },
  "connectormapping": {
      "typetitle": "prismicdata.name",
      "optionsdescription": {"data.description",
        "urlimages": "https://rtux-integration.cdn.prismic.io/api/v2/data.header_image.url",
        "accessparent_content_tokenids": "MC5ZSkU4SnhBQUFDSUFXSXZR.77-9QO-_vWR577-977-9HO-_ve-_ve-_vXPvv73vv71LeO-_vUNi77-9Ii3vv73vv73vv71sC2Xvv71A77-9IA",
 data.parent_category.id",
      "querystatus": [
          "[at(document.type, \"blog\")]""data.status",
      "string_attributes": {
 ]       }
    },
    "document": {"default_tags": "tags",
        "typecategories": "contentdata.parent_category.id"
      },
    "mapping  "localized_string_attributes": {
        "category_title": "data.category_title"
      },
      "descriptionnumeric_attributes": "data.content",{
        "imagesposition": "data.header_image.url"position"
      },
      "tagslocalized_numeric_attributes": {
        "defaultenabled": "tagsdata.status",
        "categoryshow_in_navigation": "data.category.tagsshow_in_navigation"
      },
      "raw": {
        "parentlocalized_contentstring_idsattributes": [
          "data.category.idheader_img",
        "status":  "data.statusdescription",
          "stringdata.category_attributestitle":,
 [         "data.parent_category.uid"
      ],  ]
    "localized_string_attributes": { }
  },
    "alternate_languages": "alternate_languages[*].id",{
        "meta_title"de": "data.meta_titleen-de",
        "contentfr": "data.contentfr-ch"
  }
   },
 {
    "numeric_attributesconnector": [{
      "type":  "data.position"prismic",
      "options": {
],         "localized_numeric_attributes": {"url": "https://rtux-integration.cdn.prismic.io/api/v2/",
         "productaccess_idstoken": "data.product_ids[*].id"
MC5ZSkU4SnhBQUFDSUFXSXZR.77-9QO-_vWR577-977-9HO-_ve-_ve-_vXPvv73vv71LeO-_vUNi77-9Ii3vv73vv73vv71sC2Xvv71A77-9IA",
     },       "rawquery" : {[
        "localized_string_attributes" : "[at(document.type, \"newsletter\")]"
         "data.header_image",]
      }
    "data.content",
 },
        "data.title"
"document": {
       ]"type": "content"
    },
  }  "mapping": {
 },     "languagestitle": {"data.name",
      "deshort_description": "en-de",
      "frdescription": "fr-ch"data.description",
    }   },
"images": "data.header_img.url",
 {     "connectorparent_content_ids": {"",
      "typestatus": "graphqldata.status",
      "optionsstring_attributes": {},
        "endpoint": "https://api-eu-central-1.graphcms.com/v2/ckll4a83ni7og01yzfr3k9yc4/master","localized_string_attributes": {
        "tokendescription_bottom": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImdjbXMtbWFpbi1wcm9kdWN0aW9uIn0data.eyJ2ZXJzaW9uIjozLCJpYXQiOjE2MjI1NjIzMzMsImF1ZCI6WyJodHRwczovL2FwaS1ldS1jZW50cmFsLTEuZ3JhcGhjbXMuY29tL3YyL2NrbGw0YTgzbmk3b2cwMXl6ZnIzazl5YzQvbWFzdGVyIiwiaHR0cHM6Ly9tYW5hZ2VtZW50LW5leHQuZ3JhcGhjbXMuY29tIl0sImlzcyI6Imh0dHBzOi8vbWFuYWdlbWVudC5ncmFwaGNtcy5jb20vIiwic3ViIjoiZjZlMTcyNGYtOTI2NS00OTFjLWEwMzktYzFkNGI2ZDExZDA5IiwianRpIjoiY2twZTdweDVoZGR2bzAxejU1NjNwZjc1cCJ9.MjYP8I7OvwyOkiHiB22LPwOfRzEt_ilvp6jHTVufkQEs6UTxJeuOEDvcojbMAgiEa3lStbc3mOVDezOQhMoLdD-UYoSzGyKmzIBI76vsVv5xbkhKwnLBnmX2ssRHMfOgIuyEpG16SwNiyKuBOZdhC39dapEWwSn2bzWqSi4Y-LvIdsANlHfgdwzVzkJNfNAO-2oOMQC4h-QfBlUVoSEQPYLPmGDOUpcawnHXc60Lyg9rCdxooG9YVzXUeqoi4SIc8feHH4My4s_Eb9mprP6sewezTIb4ldPCVwAlh2xl5BrWYDLLNbhgVMmUVaNZjXSS40egT4xxIWiNPw4axCAKZbgsk78lgHo51t0hz8j6qIfn9G_ZNzMagKQRupx4guuMQXiXg30WjSE09HBv6QjDLQRz9A89eRAKCiGVddKGAvXy_cZrAi2OZ_gtsX993wR-kt6AtNZ7s2U5IZPribvLbiNBMtwh1kRfz_t_bUFLCJs7J332odSDkxL38LqR7oRNStZv6EqAXmelWYqBsUvnwZWI3DYqjysYfjb4JALSTwOa4zfDHDkzlaKOiIZwZkI0GroSed_fmL6cfkpmN63CRY3qNQfwG7cXT0mOuOTJSzRBw1QigfCVnM_M2881eBaBdpdwXw3zF7FlxJL1Y0uMSQ0RZ2l3WC81xH7KqUUlUPwdescription_bottom",
        "typecontact": "blogsdata.contact",
        "fieldsbenefits": "{\r\n    title\r\ndata.benefits",
    __typename\r\n    locale\r\n "footer_disclaimer": "data.footer_disclaimer",
  createdAt\r\n    active\r\n  "footer_address":  id\r\n"data.footer_address"
    metaDescription\r\n  },
 metaTitle\r\n    publishedAt\r\n    seoLink\r\n "raw": {
     updatedAt\r\n    content {\r\n"localized_string_attributes": [
      html\r\n    "data.header_img",
 text\r\n    }\r\n    headerImage {\r\n "data.shop_link",
     url\r\n      id\r\n"data.description",
    }\r\n    stage\r\n  "data.description_bottom",
 background  {\r\n      css\r\n  "data.benefits",
    hex\r\n    }\r\n  "data.footer_address"
 brands {\r\n      id\r\n]
     name\r\n }
  }\r\n  },
 createdBy {\r\n  "languages": {
  id\r\n    "de":  name\r\n"en-de",
    }\r\n  "fr": "fr-ch"
history {\r\n   }
  createdAt\r\n},
  {
}\r\n    publishedBy"connector": {\r\n
     id\r\n   "type": "graphcms",
   name\r\n    }\r\n"options": {
   updatedBy {\r\n    "endpoint":  id\r\n"https://api-eu-central-1.graphcms.com/v2/ckll4a83ni7og01yzfr3k9yc4/master",
      name\r\n    }\r\n  }"token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImdjbXMtbWFpbi1wcm9kdWN0aW9uIn0.eyJ2ZXJzaW9uIjozLCJpYXQiOjE2MjI1NjIzMzMsImF1ZCI6WyJodHRwczovL2FwaS1ldS1jZW50cmFsLTEuZ3JhcGhjbXMuY29tL3YyL2NrbGw0YTgzbmk3b2cwMXl6ZnIzazl5YzQvbWFzdGVyIiwiaHR0cHM6Ly9tYW5hZ2VtZW50LW5leHQuZ3JhcGhjbXMuY29tIl0sImlzcyI6Imh0dHBzOi8vbWFuYWdlbWVudC5ncmFwaGNtcy5jb20vIiwic3ViIjoiZjZlMTcyNGYtOTI2NS00OTFjLWEwMzktYzFkNGI2ZDExZDA5IiwianRpIjoiY2twZTdweDVoZGR2bzAxejU1NjNwZjc1cCJ9.MjYP8I7OvwyOkiHiB22LPwOfRzEt_ilvp6jHTVufkQEs6UTxJeuOEDvcojbMAgiEa3lStbc3mOVDezOQhMoLdD-UYoSzGyKmzIBI76vsVv5xbkhKwnLBnmX2ssRHMfOgIuyEpG16SwNiyKuBOZdhC39dapEWwSn2bzWqSi4Y-LvIdsANlHfgdwzVzkJNfNAO-2oOMQC4h-QfBlUVoSEQPYLPmGDOUpcawnHXc60Lyg9rCdxooG9YVzXUeqoi4SIc8feHH4My4s_Eb9mprP6sewezTIb4ldPCVwAlh2xl5BrWYDLLNbhgVMmUVaNZjXSS40egT4xxIWiNPw4axCAKZbgsk78lgHo51t0hz8j6qIfn9G_ZNzMagKQRupx4guuMQXiXg30WjSE09HBv6QjDLQRz9A89eRAKCiGVddKGAvXy_cZrAi2OZ_gtsX993wR-kt6AtNZ7s2U5IZPribvLbiNBMtwh1kRfz_t_bUFLCJs7J332odSDkxL38LqR7oRNStZv6EqAXmelWYqBsUvnwZWI3DYqjysYfjb4JALSTwOa4zfDHDkzlaKOiIZwZkI0GroSed_fmL6cfkpmN63CRY3qNQfwG7cXT0mOuOTJSzRBw1QigfCVnM_M2881eBaBdpdwXw3zF7FlxJL1Y0uMSQ0RZ2l3WC81xH7KqUUlUPw",
        "filterstype": "active:trueblogs",
        "localesfields" : ["{ title __typename locale createdAt active id metaDescription metaTitle publishedAt  "de_CH",
 seoLink updatedAt content {  html text } headerImage { url id "fr_CH"width height fileName} stage background { css hex } ]brands { id name   locale } createdBy { id name }, history { createdAt } "document":publishedBy { id name } updatedBy { id "type": "content"
    },
    "mapping": {
      "id": "id",
      "type": "__typenamename } localizations { id locale } }",
        "creationlocales": ["createdAtde_CH", "fr_CH"]
       "last_update": "updatedAt",
 }
    },
    "persona_typedocument" : "createdBy.name",{
      "persona_idtype" : "createdBy.idcontent",
    },
    "titlemapping": "title",{
      "short_descriptiontitle": "title",
      "description": "content.text",
      "images": "headerImage.url",
      "link": "seoLink",
      "tags": {
        "brands": "brands[*].name"
      },
      "parent_content_idsstatus": "stage",
      "contentsstring_attributes": [],{
        "productsbackground_hex": [],
      "customers": [],
"background.hex",
        "storesbackground_css": "background.css",
       "status": "activebrand_ids", :      "string_attributes": {"brands[*].id",
        "backgroundbrands" : "background.hex",
 brands[*].name"
      },
      "backgroundlocalized_numeric_cssattributes": "background.css",{
        "brand_idsactive" : "brands[*].idactive"
      },
      "localized_string_attributes": {
        "meta_title": "metaTitle",
        "meta_description": "metaDescription",
        "content": "content.html",
      },
      "slugsraw": "seoLink"
 {
    },       "numericlocalized_string_attributes": {}, [
            "localized_numeric_attributes": {content",
            "display":"active"
background",
     },       "datetime_attributes": {brands",
            "published_at": "publishedAt"headerImage"
          },]
       "localized_datetime_attributes": {}
    },
    "languages": {
      "de": "de_CH",
      "fr": "fr_CH"
    }
  }
]

...