API Version 2

You're seeing the documentation for the older version of System of Record API. Please consider using the most recent version of this API.

Endpoint and Authentication

Please refer to the API overview section to get the API endpoint, query format and authentication process

Customer Profiles

List

GET /api/customer_profiles?sor_identifiers=sor_identifiers&customer_id_type=customer_id_type&attribute_keys=attribute_keys&page=page&num_per_page=num&updated_since=updated_since

Export endpoint (see how to use it here):

GET /api/customer_profiles/export?sor_identifiers=sor_identifiers&customer_id_type=customer_id_type&attribute_keys=attribute_keys&updated_since=updated_since

This API retrieves a batch of customer profiles along with the associated attributes values.

Pagination and filters are used to limit the amount of profiles for each request.

Query parameters

Property Type Description Default
customer_id_type string Filter by the type of customer id, options: user_id, device_id -
customer_ids string List of customer IDs, separated by commas, used to filter the customer profiles returned in the API output -
sor_identifiers string List of SOR identifiers separated by commas, used to define the Systems of Records to return for each profile in the output -
attribute_keys string List of attribute keys separated by commas, used to filter the SOR keys to return for each profile in the API output: only SORs containing a key matching this parameter will be returned, and only this key will be listed -
page integer The page number to fetch. This number must be a positive integer greater then or equal to 1 1
num_per_page integer The maximal number of profiles per page. This number must be a positive integer greater than or equal to 1 and lower than or equal to 10000 2000
updated_since datetime If provided, returns only the list of profiles for which there were attribute changes since this date. Attributes that were removed before this date are not returned. If the attribute was removed after the date and there has been other changes to this attribute after the date, the property removed is marked as true. For set attributes, returns the current state of the set if the set suffered any modifications since the date. -

Response

Status: 200 OK without updated_since param

{
  "success": true,
  "result": {
    "total_pages": 2,
    "total_profiles": 20,
    "profiles": [
      {
        "customer_id": "maximillian_weber@ritchiehyatt.name",
        "customer_id_type": "user_id",
        "attributes": {
          "global": {
            "first_name": "maximillian",
            "last_name": "weber",
            "email": null,
            "date_of_birth": null,
            "gender": null,
            "country": null,
            "city": null,
            "region": null,
            "profile_picture_url": null
          },
          "SOR-SDK_2a116e0767a7dc76e85d566": {
            "favorite_team": "PSG",
            "other_team": null
          }
        },
        "applications": [
          {
            "app_id": "FAAPPLI_Eg1dK5g",
            "sor_id": "SOR-SDK_2a116e0767a7dc76e85d566",
            "installations": [{
              "device_id": "01FF1D5F-41B0-4444-B145-E608BC45FFD1"
            }]
          }
        ]
      },
      {
        "customer_id": "robert.hill@mymail.org",
        "customer_id_type": "user_id",
        "attributes": {
          "global": {
            "first_name": "robert",
            "last_name": "hill",
            "email": "robert.hill@mymail.org",
            "date_of_birth": null,
            "gender": null,
            "country": null,
            "city": null,
            "region": null,
            "profile_picture_url": null
          },
          "SOR-SDK_2a116e0767a7dc76e85d566": {
            "favorite_team": "Real Madrid",
             "other_team": null
          }
        },
        "applications": [
          {
            "app_id": "FAAPPLI_Eg1dK5g",
            "sor_id": "SOR-SDK_2a116e0767a7dc76e85d566",
            "installations": [{
              "device_id": "FA3A11ED-200E-31DD-C409-430CBAE3204C"
            }]
          }
        ]
      }
    ]
  }
}

Status: 200 OK with updated_since param

{
  "success": true,
  "result": {
    "profiles": [
      {
        "customer_id": "maximillian_weber@ritchiehyatt.name",
        "customer_id_type": "user_id",
        "attributes": {
          "global": {},
          "SOR-SDK_2a116e0767a7dc76e85d566": {
            "favorite_team": {"value": "PSG", "removed": false},
            "other_team": {"value": null, "removed": true}
          }
        },
        "applications": [
          {
            "app_id": "FAAPPLI_Eg1dK5g",
            "sor_id": "SOR-SDK_2a116e0767a7dc76e85d566",
            "installations": [{
              "device_id": "01FF1D5F-41B0-4444-B145-E608BC45FFD1"
            }]
          }
        ]
      }
    ],
    "next": "https://api.follow-apps.com/api/customer_profiles?page=2"
  }
}

Status: 400

{
    "status": "400",
    "success": false,
    "error_message": "Param xxxxx is not valid"
}

View

GET /api/customer_profiles/customer_id?customer_id_type=type&sor_identifiers=sor_identifiers&attribute_keys=_attribute_keys&customer_id_type=customer_id_type

This API retrieves the profile for a specific customer according the customer_id passed.

Query parameters

Property Type Description Default
customer_id string Customer id taken from the SOR.
If your customer id is an e-mail, for instance, don't forget to encode both the @ and . signs in the URL to ensure the APIs receive the full parameter, e.g. me@gmail.com becomes me%40gmail%2Ecom.
required
customer_id_type string Filter by the type of customer_id, user_id or device_id -
sor_identifiers string List of SOR identifiers separated by commas, used to define the Systems of Records to return for each profile in the output -
attribute_keys string List of attribute keys separated by commas, used to filter the SOR keys to return for each profile in the API output: only SORs containing a key matching this parameter will be returned, and only this key will be listed -

Response

Status: 200 OK

{
  "success": true,
  "result": [
    {
      "customer_id": "maximillian_weber@ritchiehyatt.name",
      "customer_id_type": "user_id",
      "attributes": {
        "global": {
          "first_name": "maximillian",
          "last_name": "weber",
          "email": null,
          "date_of_birth": null,
          "gender": null,
          "country": null,
          "city": null,
          "region": null,
          "profile_picture_url": null
        },
        "SOR-SDK_2a116e0767a7dc76e85d566": {
          "favorite_team": "PSG",
          "other_team": null
        }
      },
      "applications": [
        {
          "app_id": "FAAPPLI_Eg1dK5g",
          "sor_id": "SOR-SDK_2a116e0767a7dc76e85d566",
          "installations": [{
            "device_id": "01FF1D5F-41B0-4444-B145-E608BC45FFD1"
          }]
        }
      ]
    }
  ]
}

Feeding Customer Profiles with values

FollowAnalytics Ruby gem

We provide a ruby gem to help you modify values for profiles stored in FollowAnalytics.

Specific end-point

Feeding a Customer Profile with values can be done either from the SDK or from other external systems. This chapter does not cover the SDK functionality, but focuses on external systems.

Please use the end-point https://sor.follow-apps.com for this feature:

https://sor.follow-apps.com/api/attribute_values

Feeding a profile

Use CSV files for recurrent large data sets

If you intend to send large data sets on a regular basis, please use the batch CSV imports documented below.

POST /api/attribute_values

Body parameters

It takes a JSON object containing the following keys:

Property Type Description Default
sor string The System of Record identifier required
api_key string The API Key associated to this SOR required
customer_attribute_values array of objects An array of customer_attribute_value object (called CAV below to simplify reading) required
CAV[attribute_key] string The Attribute key. required
CAV[attribute_value] string The value of this attribute for this Customer. Possible values are listed below. required
CAV[customer_id] string The customer identifier required
CAV[action_type] string Used to ADD or REMOVE a specific value in an attribute of type Set. You can also use DEL to empty the set or UPSERT to replace all set values at once. required for Set attributes

Possible attribute values:

Value Type Description
Test string Limit of 256 Unicode characters
10 number Limit: 2**63 - 1
-1420.2 number Limit: -(2**63 - 1)
true boolean
false boolean
2016-12-22 date
2016-12-22T13:02:53Z datetime
null any Removes the value

The only possible action for scalar (non Set) attributes is upsert, that is update value of an existing attribute or create a new one with the given value if it does't exist yet. It is not possible to perform a different action for scalar attributes.

If the attribute is of type Set, then action_type parameter is required. It may be one of the following

Example

{
    "sor": "SOR_XXXX",
    "api_key": "XXXXXXXX",
    "customer_attribute_values": [
        {
            "customer_id" : "098713490",
            "attribute_key" : "contract_type",
            "attribute_value" : "Premium"
        },
        {
            "customer_id" : "098713490",
            "attribute_key" : "client_type",
            "attribute_value" : null
        },
        {
            "customer_id" : "098713490",
            "attribute_key" : "hobbies",
            "attribute_value" : "Sport",
            "action_type" : "ADD"
        },
        {
            "customer_id" : "098713490",
            "attribute_key" : "hobbies",
            "attribute_value" : "Reading",
            "action_type" : "REMOVE"
        },
        {
            "customer_id" : "098713490",
            "attribute_key" : "hobbies",
            "attribute_value" : "Reading;Hiking;Singing",
            "action_type" : "UPSERT"
        },
        {
            "customer_id" : "098713491",
            "attribute_key" : "fav_team",
            "attribute_value" : "France"
        },
        {
            "customer_id" : "098713492",
            "attribute_key" : "fav_team",
            "attribute_value" : "Italy"
        }
    ]
}

Response

The response will return the request_id that will allow to track the progress of the request.

Status: 200 OK

{
    "success" : true,
    "result": {
        "requestId": "1522771731812-vl9cUtxfZtMl"
    },
    "errorMessage": null,
    "errorCode": 0
}

Retrieving Customer Attribute Values

GET /api/attribute_values?sor_id=sor_id&customer_id=c_id&customer_type=type&with_validity_dates

Returns all the Customer Attribute values of the given Customer Profile, for a specific System of Record.

Query parameter

Property Type Description Default
sor_id string The identifier of the System of Record to fetch the results from. required
customer_id string Customer id to retrieve the profile.
If your customer id is an e-mail, for instance, don't forget to encode both the @ and . signs in the URL to ensure the APIs receive the full parameter, e.g. me@gmail.com becomes me%40gmail%2Ecom.
required
customer_type string Filter by the type of customer_id, user_id or device_id. If the sor_id param does not correspond to a Custom SOR, and the customer_type is device_id, the API returns instead the attributes for the last user that used the device provided. required
with_validity_dates boolean Request the values with the latest dates they became valid, or without these.
If this value is true, the format of the response will be adapted.
false

Response

Without requesting dates ( with_validity_dates=false ):

Status: 200 OK

{
  "success": true,
  "result":
    {
      "customer_id": "maximillian",
      "customer_id_type": "user_id",
      "attribute_values": {
        "first_name": "maximillian",
        "last_name": "weber",
        "contract_type": "Premium",
        "client_type": null,
        "hobbies": [],
        "favorite_team": "France",
        "languages": ["French", "English"],
        "city": null,
        "region": null,
      }
    }
}

With the validity dates ( with_validity_dates=true ):

Status: 200 OK

{
  "success": true,
  "result":
    {
      "customer_id": "maximillian",
      "customer_id_type": "user_id",
      "attribute_values": {
        "first_name": {
          "value": "maximillian",
          "since": "2017-10-25T23:48:46:299Z"
        },
        "last_name": {
          "value": "weber",
          "since": "2017-10-25T23:48:46:299Z"
        },
        "contract_type": {
          "value": "Premium",
          "since": "2017-11-13T06:55:21:437Z"
        },
        "client_type": {
          "value": null,
          "since": null
        },
        "hobbies": {
          "value": [],
          "since": null,
          "elements": []
        },
        "favorite_team": "France",
        "languages": {
          "value": ["French", "English"],
          "since": "2017-12-05T11:34:51:701Z",
          "elements": [
            {
              "value": "French",
              "since": "2017-10-29T21:47:30:630Z"
            },
            {
              "value": "English",
              "since": "2017-12-05T11:34:51:701Z"
            }
          ]
        },
        "city": {
          "value": null,
          "since": null
        },
        "region": {
          "value": null,
          "since": null
        },
      }
    }
  }

Batch CSV import of attribute values

You can send CSV files to FollowAnalytics to import large attribute data sets. This is the recommended way for recurrent batch syncs, instead of the regular JSON API described above. All CSV files must use UTF-8 encoding.

Use the common end-point

This uses the regular, common end-point given in the API overview page, contrary to the JSON upload of attributes which is done through a specific one.

POST /api/attribute_values/batch_import

Query parameter

Property Type Description Default
file_url string URL to the CSV file, gzipped or not required unless uploaded as part of request
sor_id string The System of Record identifier required
api_key string The API Key associated to this SOR required
request_headers map Key-values to use as headers in the call to the file URL, if necessary. Useful for Authentication, e.g. { "Authorization": "abcd", "x-ms-blob-type": "def", ...} -

You can also upload the file directly as if part of a web form. The key for the file must be file.

File contents

The file can be gzipped. The CSV file itself must be encoded with UTF-8 and have the following header:

user_id,attribute_key,value

The key must match an existing attribute of the right type

This API will ignore values for keys not found for the provided SOR identifier.

Set values

Each line for a Set attribute is considered as the new full state of the Set. In other words, for a given user and given Set attribute, any list of values provided replaces all current values.

Values for a given user and set are put on the same line, separated by semi-colons. For instance, a CSV line where we set value1 and value2 as the two new and only values of the Set identified by the key my_set is as follows:

abcd,my_set,value1;value2

Example

The following CSV file:

user_id,attribute_key,value
abcd,my_set,value1;value2
efgh,my_set,value2;value3;value4
efgh,my_number,1234

Hosted at https://path.to/my/file.csv, you would send it as follows:

{
    "file_url": "https://path.to/my/file.csv",
    "sor_id": "SOR_767yUpsMJoTWi0mz",
    "api_key": "XXXXXXXX"
}

Response

Processing is done asynchronously, including the download of your file. When you call the API, a job ID is returned if all parameters are valid.

Use this job ID in communicating with us if you have an issue with your jobs.

Status: 200 OK

{
    "success": true,
    "result": {
        "jid": "c98de272c6e42d93e7d2b969",
        "import_id": "import_id_1"
    }
}

Monitoring of CSV imports

You can verify the status of your recent imports. The import job ids and the details of import errors are available for one week.

GET /api/attribute_values/import_jobs

Query parameter

There are no parameters for this query.

Response

The query returns the list of import jobs for the currently logged in user.

Status: 200 OK

{
    "success": true,
    "result": {
        "import_id_1": "2019-01-02 11:12:13",
        "import_id_2": "2019-02-03 11:12:13",
        "import_id_3": "2019-03-03 11:12:13"
    }
}

GET /api/attribute_values/import_errors?job_id=job_id&customer_id=customer_id

Query parameter

Property Type Description Default
job_id string The identifier of the import required
customer_id string The identifier of a customer id -

Response

The query returns the list of import jobs for the currently logged in user or, in alternative, for a specific customer.

Status: 200 OK

{
    "success": true,
    "result": {
        "attribute_errors": [
            {
                "job_id": "import_id_1",
                "customer_id": "Bob",
                "key": "age",
                "sor": "SOR_XXX",
                "date": "2019-01-02T11:12:13",
                "source": "AttributeCleaner",
                "message": "attributeKey is empty",
                "raw": "{\n\"sor\":\"SOR_XXXX\",\n\"api_key\":\"XXXXXXXX\",\n\"customer_attribute_values\": [\n{\n\"customer_id\" :\"098713490\",\n\"attribute_key\" :\"contract_type\",\n\"attribute_value\" :\"Premium\"\n}\n]\n}"
            }
        ]
    }
}

Systems of Records

List

GET /api/system_of_records?type=type

This call lists all the Systems Of Records available for your entity.

There are three types of systems of records (key type):

If the param type is invalid, no system of records are returned.

Query parameter

Property Type Description Default
type string Filter results by type. Can be app, custom, or global. -

Response

Status: 200 OK

{
    "success": true,
    "result": [
        {
            "name": "Global SoR for Your Entity",
            "identifier": "SOR_id3nt1f13r",
            "type": "global",
            "api_keys": [
                "ebi97ujupC_tHQ"
            ],
            "attributes_count": 2,
            "disabled": false,
            "customer_attributes": [
                {
                    "disabled": false,
                    "identifier": "FACA_1518ddb56f2234933400dd0af9",
                    "key": "profit-focused-client-driven-standardization",
                    "label": "Smith and Sons",
                    "sources": [
                        "DEFAULT"
                    ],
                    "value_type": "String"
                },
                {
                    "disabled": false,
                    "identifier": "FACA_da6e51e7e4d8eb305f236a8977e6ab7c",
                    "key": "devolved-executive-matrices",
                    "label": "Schuppe, Zboncak and Mertz",
                    "sources": [
                        "DEFAULT"
                    ],
                    "value_type": "String"
                }
            ]
        },
        {
            "name": "SOR for app XYZ",
            "identifier": "SOR-SDK_your.package.name",
            "type": "app",
            "api_keys": [
                "FH7nIacl4f"
            ],
            "attributes_count": 0,
            "disabled": false,
            "customer_attributes": []
         }
    ]
}

View

GET /api/system_of_records/sor_identifier

Gets information about a single System of Records. This is more detailed than the list because it contains information about the attributes as well.

Query parameter

Property Type Description Default
sor_identifier string The System of Records identifier to view required

Response

Status: 200 OK

{
    "success": true,
    "result": {
        "name": "Global SoR for Your Entity",
        "identifier": "SOR_id3nt1f13r",
        "type": "global",
        "api_keys": [
            "ebi97ujupC_tHQ"
        ],
        "attributes_count": 2,
        "disabled": false,
        "customer_attributes": [
            {
                "disabled": false,
                "identifier": "FACA_1518ddb56f2234933400dd0af9",
                "key": "profit-focused-client-driven-standardization",
                "label": "Smith and Sons",
                "sources": [
                    "DEFAULT"
                ],
                "value_type": "String"
            },
            {
                "disabled": false,
                "identifier": "FACA_da6e51e7e4d8eb305f236a8977e6ab7c",
                "key": "devolved-executive-matrices",
                "label": "Schuppe, Zboncak and Mertz",
                "sources": [
                    "DEFAULT"
                ],
                "value_type": "String"
            }
        ]
    }
}

Create

POST /api/system_of_records

Creates a custom SoR, with a name.

Please note that SDK-based Systems of Records are created automatically, so there is no need to create on manually. Also, the global System of Record is always present, no need to create that either.

Body parameter

Property Type Description Default
name string Name of the new SOR required

Example

{
    "name": "My Custom SoR"
}

Response

Status: 200 OK

{
    "success": true,
    "result": {
        "name": "My Custom SoR",
        "identifier": "SOR_767yUpsMJoTWi0mz",
        "type": "custom",
        "api_keys": [
            "tBqL8qvvAhfyAQ"
        ],
        "attributes_count": 0,
        "disabled": false
    }
}

Update

PUT /api/system_of_records/sor_identifier

Modifies a System of Records.

Only custom system of records can be modified.

Query parameter

Property Type Description Default
sor_identifier string The System of Records identifier required

Body parameter

Property Type Description Default
name string New name for the SOR required

Example

{
    "name": "My Custom SoR"
}

Response

Status: 200 OK

{
    "success": true,
    "result": {
        "name": "My Custom SoR",
        "identifier": "SOR_767yUpsMJoTWi0mz",
        "type": "custom",
        "api_keys": [
            "tBqL8qvvAhfyAQ"
        ],
        "attributes_count": 0,
        "disabled": false
    }
}

Delete

DELETE /api/system_of_records/sor_identifier

Deletes a System of Records.

Please note that this is not very useful for live SDK-based Systems of Records, as the entry will automatically be regenereted upon next call. In that case, disabling the System of Records is advised.

Also, please note that only custom system of records can be deleted.

Query parameter

Property Type Description Default
sor_identifier string Identifier for the SOR to delete required

Response

Status: 200 OK

{
    "success": true
}

Disable

PUT /api/system_of_records/sor_identifier/disable

Disables a System of Records. A global system of record cannot be disabled. Trying to disable an already disabled system of record will result in an API error.

Query parameter

Property Type Description Default
sor_identifier string Identifier of the SOR to disable required

Response

Status: 200 OK

{
    "success": true
}

Enable

PUT /api/system_of_records/sor_identifier/enable

Enables a System of Records. A global system of record cannot be enabled, since its enabled by default. Trying to enable an already enabled system of record will result in an API error.

Query parameter

Property Type Description Default
sor_identifier string Identifier of the SOR to enable required

Response

Status: 200 OK

{
    "success": true
}

Customer Attributes

This section covers the definition of the attributes onto SORs: key, type, and so on.

View

GET /api/customer_attributes/ca_identifier

Gets information about a single customer attribute.

Query parameter

Property Type Description Default
ca_identifier string The Customer Attribute identifier required

Response

Status: 200 OK

{
    "success": true,
    "result": {
        "identifier": "FACA_eVYy7KP9PZqP_B8w",
        "key": "is_valid",
        "label": "Is valid",
        "value_type": "Boolean",
        "disabled": false,
        "system_of_record_identifier": "SOR-SDK_2a116e0767a7dc76e85a5ef85434d92b"
    }
}

Create

POST /api/customer_attributes

Creates a customer attribute, with a custom label and a type.

Body parameter

Property Type Description Default
system_of_record_identifier String The Customer Attribute related SOR required
key String The Customer Attribute key required
label String The Customer Attribute displayed name required
type String The Customer Attribute value type: String, Number, Boolean, Date, DateTime or Set required

Example

{
    "system_of_record_identifier": "SOR-SDK_c7a5a35762fd9e50006fd77215599dfb",
    "key": "My Attr",
    "label": "my_attr",
    "type": "String"
}

Response

Status: 200 OK

{
    "success": true,
    "result": {
        "identifier": "FACA_0OkzOc8",
        "key": "My Attr",
        "label": "my_attr",
        "value_type": "String",
        "disabled": false
    }
}

Modify

PUT /api/customer_attributes/ca_identifier

Modifies a customer attribute. Only the label of a customer attribute can be changed.

Query parameter

Property Type Description Default
ca_identifier string The Customer Attribute identifier required

Body parameter

Property Type Description Default
label String The new label of the customer attribute. Leave it empty if you don't wish to change it required

Example

{
    "label": "Test"
}

Response

Status: 200 OK

{
    "success": true,
    "result": {
        "identifier": "FACA_eVYy7KP9PZqP_B8w",
        "key": "is_valid",
        "label": "Test",
        "value_type": "Boolean",
        "disabled": false,
        "system_of_record_identifier": "SOR-SDK_2a116e0767a7dc76e85a5ef85434d92b"
    }
}

Delete

DELETE /api/customer_attributes/ca_identifier

Deletes a customer attribute along with all the values associated to it.

It is not advised to delete attributes from a live System of Records. Because of auto-declaration, the attribute is going to be recreated upon the next receival of a value. If you don't want to receive these values, but you cannot modify the external system, you can disable the attribute instead.

An attribute that is currently being used in the filters of a campaign or segment cannot be deleted.

Query parameter

Property Type Description Default
ca_identifier string The Customer Attribute identifier required

Response

Status: 200 OK

{
    "success": true
}

Disable

PUT /api/customer_attributes/ca_identifier/disable

By default, all attributes are enabled, but it is possible to disable one. By doing so, all future values sent for this attribute will be refused, until the attribute is enabled again.

Attributes in the global SOR can be disabled or enabled as well. Disabling an attribute in the global SOR does not disable any attribute with the same key in custom or SDK SORs of the same entity.

Query parameter

Property Type Description Default
ca_identifier string The Customer Attribute identifier required

Response

Status: 200 OK

{
    "success": true
}

Enable

PUT /api/customer_attributes/ca_identifier/enable

Enables a previously disabled attribute. Enabling an already enabled attribute is a no-op.

Query parameter

Property Type Description Default
ca_identifier string The Customer Attribute identifier required

Response

Status: 200 OK

{
    "success": true
}

Attributes removed since a praticular date

GET /api/removed_attributes?since=since?system_of_record_identifier=system_of_record_identifier

Returns all the attributes removed for the given system of record.

Query parameter

Property Type Description Default
system_of_record_identifier string The identifier of a system of record required
since timestamp If provided, only the attributes removed since this date will returned. Must be a valid date string (eg: '2020-01-01'), a timestamp string (eg: '2020-01-01 20:30') or a unix timestamp integer (eg: 1577910000) -

Response

Status: 200 OK

{ 
    "success":true,
    "result":[ 
        { 
            "id":32500,
            "system_of_record_id":1,
            "key":"attr1",
            "value_type":"Number",
            "label":"attributeTest1",
            "created_at":"2019-09-03T16:01:55.852Z",
            "updated_at":"2020-01-06T11:00:26.082Z",
            "identifier":"FACA_FgzfBvu",
            "removed":true,
            "shared":true,
            "disabled":false
        },
        { 
            "id":33050,
            "system_of_record_id":1,
            "key":"attr2",
            "value_type":"String",
            "label":"attributeTest2",
            "created_at":"2019-09-25T14:52:04.261Z",
            "updated_at":"2019-12-26T16:54:33.275Z",
            "identifier":"FACA_2BmN8T0",
            "removed":true,
            "shared":true,
            "disabled":false
        }
    ]
}