Emergency situation

In case of emergencies or breakdowns, you can send an SMS to our emergency hotline

On-call phone (SMS only)

+45 29 70 15 95

Send an SMS with the following information:

  • Your name and webshop
  • Description of the problem
  • Your callback phone number

Notes: This service is only for critical situations where your webshop is down or has serious problems. For regular support, please use our normal support channels.

Move your profiles to shared values

Here's how to link the same sizes, colors, and other values across multiple product profiles to shared values. You can do this in the admin panel, via the REST API, or with Claude—by running a test first and without affecting inventory, variants, or prices.

Reading time: approx. {eight} minutes
Shopejer Developer

If you have a lot of product profiles, you probably have the same size or color listed in all of them: “Medium” in the T-shirt profile, “Medium” in the pants profile, and maybe “M” in a third one. With shared values, they’ll all become the same value, so you and your customers can find everything in Medium across all profiles. This article shows you how to migrate your existing profiles, whether you have five or 600.

There are three ways to do this. Choose the one that works best for you:

  • Path A, in the admin panel: for those with a few profiles. You click through the profiles one at a time.
  • Option B, via the REST API: for your developer or integrator when there are many profiles.
  • Option C, with Claude: for those with many profiles who’d rather write in plain Danish than code.

If you’re unsure what a shared value is, start with the main article “Shared Values” or the brief explanation in the glossary.

Before you get started

What changes, and what doesn’t?

When you link a profile value to a shared value, you’re simply creating a link. The profile’s value remains exactly as it is. This means:

  • Your products, variants, stock levels, prices, and orders will not change.
  • Customers with items in their cart won’t notice a thing.
  • Everything can be undone. If you remove the link, the profile value reverts to a regular value.

Names are only changed when you request it: when you rename a value before linking it, when a developer uses the setting to correct the spelling (see track B), or when you later rename a shared value. Then all linked values will receive the new name, including those that were previously spelled differently. Orders always retain the name the item had when it was purchased.

Plan the Names First

Spend five minutes writing down which shared values you want. These are the names customers see when they filter. A few tips:

  • Choose one spelling. Should it be “M” or “Medium”? Decide and use the same one everywhere.
  • Keep different things separate. If two values mean different things, create two distinct values. An adult “M” and a children’s “M” aren’t the same size, so create, for example, “M” and “M (children’s).”
  • Only link attributes that mean the same thing. “No” in the Waterproof attribute is not the same as “No” in the Organic attribute. If you link them, customers will see both types of products when they filter by “No.”
  • Uppercase and lowercase letters are ignored. “medium” and “Medium” are considered the same name.

Split values only work for attributes of the “List of Values” type, which you fill in yourself. Fields that customers fill in cannot be split.

Track A: in the admin panel (few profiles)

This method is suitable when you have only a handful of profiles. Screenshots of all the screens can be found in the main article on Split Values.

1. Create the shared values

  1. Go to Webstore → Product Profiles.
  2. Click the Shared Values button in the top right corner.
  3. Type the name in the “Add value here” field and press Enter. You can create multiple values at once by separating them with semicolons, e.g., Small;Medium;Large.
  4. Drag the values into the order in which you want them to appear.

2. Make the profile’s values shared

  1. Open a profile under Webstore → Product Profiles.
  2. Find the attribute, such as Size, and click in the Values field.
  3. Type the name of a value the profile already has, such as “Medium.”
  4. A list of suggestions will appear. Next to the shared value, you’ll see “Make your value shared.” Select it with the mouse or using the arrow keys and Enter.
  5. The profile’s existing value will now display a link icon. No new value is created, and variants, inventory, and prices remain unchanged.
  6. Repeat this for each value. The link is saved immediately.

If “Already exists ” appears next to the suggestion, the value is already linked in this profile, and you can skip it.

If the profile spells the value differently

If the value is “M” in the profile but “Medium” among your shared values, you must rename it first:

  1. Click the pencil icon next to “M” in the profile and correct the name to “Medium.”
  2. Type “Medium” in the Values field, and select the suggestion to make your value shared.

If the attribute already has other shared values, the value will be linked the moment you rename it. You can see this by the link icon, and the suggestion list will indicate that it already exists. You’re now done with that value and can skip step 2. If the attribute doesn’t yet have any shared values, the link won’t be created until you select the suggestion in step 2.

Renaming a variant value only changes the name. Inventory figures and inventory history remain unchanged.

Be careful about two things

  • Do not select the shared value without renaming it first. If “Make your value shared” is not displayed, the profile will receive a new, additional value alongside the old one. If the attribute is a variant, this means a new variant with no inventory.
  • Never delete a value to select the split one instead. When you delete a variant value, the variant’s inventory history is lost. Rename it instead.

Path B: via REST API (multiple profiles)

For developers. This section is technical and is intended for those who create integrations for your online store. If you’re a store owner without a developer, use Track A or Track C.

The REST API has three endpoints for the migration: find the candidates, link them, and remove the link again if you change your mind. All calls use your API key as the raw key in the Authorization header, without “Bearer” in front. POST calls must have Content-Type: application/json. See Find or create an API key. In the examples, DIN_TOKEN is used in place of the key.

1. Create the shared values

Create the names that will appear in the online store. If a value already exists, the existing one is returned instead of a copy.

curl -X POST https://www.shoporama.dk/REST/attribute-shared-value \
  -H "Authorization: DIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"values": ["Small", "Medium", "Large"]}'

You can also skip this step and let the link call create the missing values (see create_missing below). However, in that case, the names will be whatever the profiles happen to use.

2. Find the candidates

The call finds list attributes with the same name across multiple profiles, e.g., "Size" in 40 profiles. You’ll get the attributes’ IDs, all values along with their counts, spellings that differ only in uppercase and lowercase letters (e.g., “s” and “S”), and which shared value each value already matches. Different names for the same size, such as "S" and "Small," are listed as two separate values. You’ll combine these using mapping in the next step.

curl "https://www.shoporama.dk/REST/attribute-shared-value/candidates?search=Størrelse" \
  -H "Authorization: YOUR_TOKEN"

Excerpt from the response:

{
    "candidates": [
        {
            "name": "Size",
            "attribute_count": 3,
            "profile_count": 3,
            "attributes": [
                {
                    "attribute_id": 3667,
                    "name": "Size",
                    "profile_id": 2939,
                    "profile_name": "Sweatshirts",
                    "is_variant": true,
                    "value_count": 3,
                    "linked_count": 0
                }
            ],
            "values": [
                {
                    "value": "S",
                    "count": 3,
                    "spellings": ["S"],
                    "attribute_shared_value_id": null
                }
            ]
        }
    ],
    "max_attributes_per_link": 50
}

Use `min_attributes ` (default 2) to see only names that appear in at least that many attributes. Go through the list and select only the attributes that mean the same thing.

3. Test the link

The link call maps each value in the attributes to the shared value with the same name. It runs as a test run unless you send "dry_run": false, in which case nothing is saved initially.

curl -X POST https://www.shoporama.dk/REST/attribute-shared-value/link \
  -H "Authorization: YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "attribute_ids": [3667, 3673, 3689],
    "mapping": {"S": "Small", "M": "Medium", "L": "Large"},
    "create_missing": false,
    "dry_run": true
  }'

Fields in the call:

  • attribute_ids: the attributes from step 2. Maximum of 50 per call. If you have more, split the list and make multiple calls.
  • mapping: maps the profile spellings to the shared value, e.g., {"S": "Small"}. Uppercase and lowercase letters are ignored. Values without a mapping are matched based on their own name.
  • create_missing: default is true; creates shared values for names that do not yet exist. If set to false, only the shared values you already have are used, and the rest remain unmatched.
  • rename: default is false, so the profiles retain their original spelling (“S” remains, but is linked to “Small”). With true, the profile values are also renamed to match the shared value. This affects the variant names in inventory lists, but not in old orders.
  • dry_run: default true.

4. Read the response

The response shows what will happen for each attribute and each value. Here, it’s abbreviated to a single attribute:

{
    "dry_run": true,
    "summary": {
        "attributes": 3,
        "values_linked": 9,
        "values_already_linked": 0,
        "shared_values_created": 0,
        "values_unmatched": 0,
        "values_renamed": 0
    },
    "attributes": [
        {
            "attribute_id": 3667,
            "name": "Size",
            "profile_id": 2939,
            "profile_name": "Sweatshirts",
            "values": [
                {
                    "attribute_value_id": 22302,
                    "value": "S",
                    "action": "link",
                    "attribute_shared_value_id": 1,
                    "shared_value": "Small"
                },
                {
                    "attribute_value_id": 22558,
                    "value": "M",
                    "action": "link",
                    "attribute_shared_value_id": 2,
                    "shared_value": "Medium"
                },
                {
                    "attribute_value_id": 22304,
                    "value": "L",
                    "action": "link",
                    "attribute_shared_value_id": 3,
                    "shared_value": "Large"
                }
            ]
        }
    ],
    "created_shared_values": [],
    "warnings": [],
    "errors": [],
    "notes": [
        "dry_run: nothing was changed. Call again with dry_run=false to apply."
    ]
}

Pay special attention to these fields:

  • action per value: link (linked), already_linked (already linked), unmatched (no shared value, and create_missing is disabled), or skipped_empty (empty value, skipped).
  • created_shared_values: the shared values that are created. If you see names you didn’t expect, add them to the mapping.
  • warnings: attributes where two values result in the same shared value, e.g., both “S” and “Small.” Both are linked, but neither is renamed so that the attribute does not end up with two identical values.
  • errors: e.g., an attribute that doesn’t exist, isn’t a list, belongs to a deleted profile, or there are more than 50 attributes. In that case, the API returns a 400 error, and nothing is saved.

5. Run the mapping

If the test run looks correct, send exactly the same call with `"dry_run": false`. The response has the same structure. You can safely run the call again: values that are already linked are marked as `already_linked`.

6. Check the result

Retrieve the shared values using GET /attribute-shared-value. The linked_count field shows how many profile values use each value. Then retrieve the products with a shared value across the profiles:

curl "https://www.shoporama.dk/REST/product?attribute_shared_value_id=2" \
  -H "Authorization: DIN_TOKEN"

| means “or,” and a comma means “and”: attribute_shared_value_id=2|3,5 means (Medium or Large) and the shared value with ID 5. Add in_stock=1 to retrieve only variants that are in stock. You can also add is_online=1. The other list filters on the product list, such as search, category_id, and profile_id, cannot be combined with this one.

7. Undo with unlink

Unlink removes the link for all values in the specified attributes. The profile values and shared values remain unchanged. Like link, unlink is a dry run unless you send "dry_run": false:

curl -X POST https://www.shoporama.dk/REST/attribute-shared-value/unlink \
  -H "Authorization: YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"attribute_ids": [3667], "dry_run": true}'
{
    "dry_run": true,
    "attribute_ids": [3667],
    "values_unlinked": 3,
    "errors": []
}

Here, too, the limit is 50 attributes per call. If you’ve used `rename`, the new name will remain after `unlink`. The entire API is described in the REST API documentation under “Shared Values.”

Track C: with Claude

If you’ve connected Claude to your online store (see Manage Your Store with AI), Claude can handle the entire migration for you. You type what you want, and Claude finds the attributes, shows you the results, and links them once you approve.

Examples of what you can type

  • "Find all attributes named 'Size' across my profiles, and show me what happens if you link them to the shared values 'Small,' 'Medium,' and 'Large.'"
  • "Create the shared values XS, Small, Medium, Large, and XL, and link all my sizes to them. Where the profile says S, M, or L, they should be linked to Small, Medium, and Large."
  • "What spellings of the colors do I have in my profiles? Suggest which shared values I should create."
  • "Remove the link to the shared values in the Children’s Clothing profile."

How Claude Works

Claude uses the same functions as the REST API. For developers who want to follow along in the audit log, the tools are:

  • attribute_shared_value_candidates (Find matching attribute values): finds attributes with the same name across multiple profiles.
  • attribute_shared_value_link (Link values to shared values): links the values, up to 50 attributes at a time.
  • attribute_shared_value_unlink (Unlink shared values): undoes the link.
  • Additionally, use attribute_shared_value_list and attribute_shared_value_create to view and create the shared values.

Claude is instructed to always run a test first and show you what will be linked, which shared values will be created, and any warnings. Only after you’ve given your approval will Claude proceed with the actual linking. If you have many profiles, Claude automatically divides the work into batches of 50.

If you’ve enabled Extra Security, you must approve the connection and the removal of connections in the admin panel before they’re carried out. The same applies if Claude needs to delete a shared value. The test run doesn’t change anything and therefore runs without approval.

After the migration

  • New values are linked automatically. When an attribute has shared values, a new value with the same name as a shared value is linked automatically. This also applies when you import products via CSV or when an integration creates values. Attributes without shared values are not affected, and new shared values are never created automatically.
  • The name is locked in the profile. A shared value has the same name across all profiles, so if you edit the name under “Shared Values,” the change applies to all profiles. If you want one profile to have its own name, click the pencil icon and select “Make a Regular Value.”
  • Filtering in the online store. In the Montana and MontanaB2B themes, the product filter merges the linked values under the shared value’s name. If the customer filters by “Medium,” products from all profiles are displayed. This requires that the filter be set up under Design → Filter. See the article on product filtering. Other themes show no difference to the customer.

How to undo

  • A single value in a single profile: Click the pencil icon next to the value in the profile and select “Make a Regular Value.”
  • An entire shared value: delete it on the Shared Values page using the checkmark. The profiles retain the value; it’s just no longer shared.
  • Multiple attributes at once: use the `unlink` command in the REST API, or ask Claude to remove the link.

In all cases, the profile values will remain as regular values. If you’ve renamed any values along the way, they’ll keep their new names.

Frequently Asked Questions

Could I accidentally break my products when I do this?

No. The link is an extra layer on top of your profiles. Products, variants, stock levels, prices, and orders remain unaffected, and you can always remove the link again. The only thing you need to be careful about is not deleting any values in the process.

How can I tell if a value is already shared?

In the profile, a shared value has a link icon. On the Shared Values page, there’s a number next to each value showing how many profile values use it. If the number is 0, nothing has been linked yet.

I have over 400 profiles. Do I really have to click through them all?

No. Ask Claude to do it, or have your developer use the REST API. Both methods link up to 50 attributes at a time, so even several hundred profiles can be handled in just a handful of calls—with a test run first.

Will this change anything in my pick lists or in inventory?

No, not without a renaming. Inventory counts and inventory history remain the same. If you rename a value—either manually or using the rename function in the API—the variant will be listed under the new name in the inventory lists. Orders that have already been placed, and thus their pick lists as well, will retain the name the item had when it was purchased.

When will my customers notice the difference?

As soon as the items are linked, if you’re using Montana or MontanaB2B with product filtering set up. Then, a filter for “Medium,” for example, will show products from all profiles. If you’re using a different theme, the customer won’t see any difference until the theme is built to support it.

Will products from my next CSV import be included automatically?

Yes, if the attribute already has split values and the value in the file matches the name of a split value. Upper- and lowercase letters are ignored. If the file spells the value differently or if it doesn’t exist as a split value, it becomes a regular value.

What happens if a profile has both “S” and “Small”?

If both point to the same shared value, both will be linked, but neither will be renamed so that the profile doesn’t end up with two identical values. The API and Claude display a warning about this during the test run, so you can clean up the profile afterward.

I’m new and haven’t created the profiles yet. How do I know which ones belong together?

Ask Claude to find attributes with the same name across the profiles and display the values, or ask your developer for a list of candidates. That way, you can see where there are different spellings before anything gets linked. If you’re unsure, email support@shoporama.dk.