Salve health data setup
Salve reads structured product information from metafields. This guide shows you how to create the definitions, enter data and check the result. You only need the fields you'll use. Every health block shows nothing when its field is empty.
Salve helps you present product information clearly. It does not make your store, products or content compliant with any law or regulation. You are responsible for your product claims, labeling and regulatory obligations. Take professional advice.
How Salve finds your data
For each piece of information, Salve checks two places, in this order:
- A block setting that you connected to a metafield with a dynamic source. See the dynamic sources section below.
- The product metafield with the namespace
healthand the key in the tables below, for examplehealth.warnings.
If neither has a value, nothing shows. The namespace is set in theme settings under Health data > Metafield namespace. Keep it as health unless your existing definitions use a different namespace. If you change it, every key below uses your namespace instead.
Create the metafield definitions
- In your Shopify admin, go to Settings > Custom data.
- Select Products, then Add definition.
- Enter a Name. The suggested names are in the tables below, but you can use any name.
- In Namespace and key, enter the exact value from the tables, for example
health.regulatory_status. The key must match exactly, including underscores. - Select the type. For list types, choose the type and then select List of values.
- Add any validation shown in the table. For choices, turn on Limit to preset choices and add the values exactly as shown.
- Make sure storefront access is allowed for the definition.
- Select Save.
Create the metaobject definitions (next section) before the health.documents and health.reviewed_by metafields, because those metafields point to them.
Tip: pin the fields you use most, such as regulatory status, warnings and documents. Pinned fields appear on the product page in the admin.
Product metafields
All product metafields in one place, grouped by purpose. The type is shown as it appears in the admin, with the API type in parentheses.
Regulatory
| Namespace and key | Suggested name | Type | Choices or validation | Where it appears |
|---|---|---|---|---|
health.regulatory_status |
Regulatory status | Single line text, list of values (list.single_line_text_field) |
Limit to preset choices: us_510k_cleared, us_pma_approved, us_de_novo_granted, us_510k_exempt, us_otc_drug, us_dietary_supplement, eu_ce_mdr, eu_ce_ivdr, uk_ukca, ca_mdl, au_artg, general_wellness, cosmetic. |
Regulatory status block, product cards, compare tray. Also triggers the dietary supplement statement. |
health.regulatory_reference |
Regulatory reference | Single line text, list of values (list.single_line_text_field) |
None | Regulatory status statements. One reference per status, in the same order as the statuses. |
health.device_class |
Device class | Single line text (single_line_text_field) |
None | Regulatory status statements for 510(k) exempt, CE (MDR) and UKCA statuses. Example: Class II. |
health.notified_body |
Notified body number | Single line text (single_line_text_field) |
None | CE statements, printed as "notified body 0123". |
Use and safety
| Namespace and key | Suggested name | Type | Choices or validation | Where it appears |
|---|---|---|---|---|
health.intended_use |
Intended use | Rich text (rich_text_field) |
None | Intended use block. |
health.indications |
Indications | Rich text (rich_text_field) |
None | Intended use block, when Show indications is on. |
health.contraindications |
Contraindications | Rich text (rich_text_field) |
None | Safety information band. |
health.warnings |
Warnings | Rich text (rich_text_field) |
None | Safety information band. |
health.precautions |
Precautions | Rich text (rich_text_field) |
None | Safety information band. |
health.side_effects |
Possible side effects | Rich text (rich_text_field) |
None | Safety information band, as "Possible side effects". |
health.safety_notice |
Safety notice | Rich text (rich_text_field) |
None | Warning callout on the product page, chip on product cards, flag in the cart, Safety notices list section. |
health.safety_notice_url |
Safety notice URL | URL (url) |
None | "Read the full notice" link with the safety notice. |
Identifiers and responsible persons
| Namespace and key | Suggested name | Type | Choices or validation | Where it appears |
|---|---|---|---|---|
health.udi_di |
UDI-DI | Single line text (single_line_text_field) |
None | Product identifiers block. |
health.gtin_override |
GTIN override | Single line text (single_line_text_field) |
None | Product identifiers block and structured data, when the variant has no barcode. |
health.model_number |
Model number | Single line text (single_line_text_field) |
None | Product identifiers block and structured data. |
health.manufacturer_name |
Manufacturer name | Single line text (single_line_text_field) |
None | Responsible persons block. |
health.manufacturer_address |
Manufacturer address | Multi-line text (multi_line_text_field) |
None | Responsible persons block. |
health.manufacturer_contact |
Manufacturer contact | Single line text (single_line_text_field) |
None | Responsible persons block. An email address or URL becomes a link. |
health.eu_representative |
EU authorized representative | Multi-line text (multi_line_text_field) |
None | Responsible persons block, labeled "EU responsible person". |
health.uk_responsible_person |
UK responsible person | Multi-line text (multi_line_text_field) |
None | Responsible persons block. |
health.importer |
Importer | Multi-line text (multi_line_text_field) |
None | Responsible persons block. |
Documents and instructions
| Namespace and key | Suggested name | Type | Choices or validation | Where it appears |
|---|---|---|---|---|
health.documents |
Documents | Metaobject, list of values (list.metaobject_reference) |
Reference the Health document metaobject definition. | Documents block and Document library section. Also links the How to use block to the documents. |
health.document_files |
Document files | File, list of values (list.file_reference) |
None | Documents block, when the product has no documents entries. The file alt text becomes the title. |
health.how_to_use |
How to use (steps) | Single line text, list of values (list.single_line_text_field) |
None | How to use block. One step per list item. |
health.how_to_use_images |
How to use images | File, list of values (list.file_reference) |
Accept images only. | How to use block. Image 1 goes with step 1, and so on. |
Specifications and sizes
| Namespace and key | Suggested name | Type | Choices or validation | Where it appears |
|---|---|---|---|---|
health.specs |
Specifications (JSON) | JSON (json) |
None | Specifications block, compare tray and Comparison table section. |
health.dressing_size_pad |
Pad size | Single line text (single_line_text_field) |
None | Size and features block. |
health.dressing_size_overall |
Overall size | Single line text (single_line_text_field) |
None | Size and features block. |
health.exudate_level |
Exudate level | Single line text (single_line_text_field) |
Limit to preset choices: None, Low, Moderate, High. Allow it to be used as a filter. |
Size and features block. Can be used as a collection filter. |
health.wear_time_days |
Wear time (days) | Integer (number_integer) |
None | Size and features block, as "Up to 7 days". |
health.latex_free |
Latex-free | True or false (boolean) |
None | Size and features block. |
health.waterproof |
Waterproof | True or false (boolean) |
None | Size and features block. |
health.sterile |
Sterile | True or false (boolean) |
None | Size and features block. |
Supply planner
| Namespace and key | Suggested name | Type | Choices or validation | Where it appears |
|---|---|---|---|---|
health.units_per_pack |
Units per pack | Integer (number_integer) |
None | Supply planner, estimated price per unit on product cards and in the Price block. Units in one pack. |
health.unit_label |
Unit label (singular) | Single line text (single_line_text_field) |
None | Supply planner. Singular, for example "dressing". |
health.unit_label_plural |
Unit label (plural) | Single line text (single_line_text_field) |
None | Supply planner and product cards. Plural, for example "dressings". |
health.default_uses_per_week |
Default uses per week | Decimal (number_decimal) |
None | Supply planner starting value. Default is 7. |
health.usage_min_per_week |
Minimum uses per week | Decimal (number_decimal) |
None | Supply planner lowest value. Default is 1. |
health.usage_max_per_week |
Maximum uses per week | Decimal (number_decimal) |
None | Supply planner highest value. Default is 28. |
Label, ingredients and highlights
| Namespace and key | Suggested name | Type | Choices or validation | Where it appears |
|---|---|---|---|---|
health.supplement_facts |
Supplement Facts label | File (file_reference) |
Accept images only. | What's inside block, as the label image. |
health.drug_facts |
Drug Facts label | File (file_reference) |
None | What's inside block, as the label image, when there is no Supplement Facts image. Only images are shown there. |
health.ingredients |
Ingredients | Rich text (rich_text_field) |
None | What's inside block. |
health.allergens |
Allergens | Single line text (single_line_text_field) |
None | What's inside block. |
health.age_suitability |
Age suitability | Single line text (single_line_text_field) |
None | What's inside block, as "Suitable for". |
health.benefits |
Benefits (up to 4) | Single line text, list of values (list.single_line_text_field) |
None | Highlights block. Up to four lines are shown. |
Editorial
| Namespace and key | Suggested name | Type | Choices or validation | Where it appears |
|---|---|---|---|---|
health.reviewed_by |
Reviewed by | Metaobject (metaobject_reference) |
Reference the Health reviewer metaobject definition. | Content reviewed by block. |
health.last_reviewed |
Last reviewed | Date (date) |
None | Content reviewed by block. |
health.references |
References | Rich text (rich_text_field) |
None | References block. |
Blog post and page metafields
To show a reviewer on articles and pages, create these three definitions for Blog posts and for Pages too, with the same keys and types:
| Namespace and key | Type | Where it appears |
|---|---|---|
health.reviewed_by |
Metaobject (Health reviewer) | "Reviewed by" line on articles, in blog listings and on pages |
health.last_reviewed |
Date | "Last reviewed" date with the reviewer line |
health.references |
Rich text | References block in the Blog post section |
Create the metaobject definitions
Metaobjects hold information that you reuse across products, such as a document or a reviewer. Go to Settings > Custom data, select Metaobject definitions, then Add definition.
Health document
Set the type (handle) to health_document and use Title as the display name. Add these fields:
| Field key | Suggested name | Type | Required | Validation and notes |
|---|---|---|---|---|
title |
Title | Single line text | Yes | Shown as the document link text. |
document_type |
Document type | Single line text | Yes | Limit to preset choices: Instructions for use, Quick start guide, Drug Facts, Supplement Facts, Declaration of conformity, Safety data sheet, 510(k) summary, Certificate, Warranty, Other. Documents are grouped under these names. |
file |
File | File | Yes | Usually a PDF. |
language |
Language (ISO 639-1) | Single line text | Yes | A two-letter language code, such as en, fr or de. |
version |
Version | Single line text | No | For example "Rev C". |
effective_date |
Effective date | Date | No | Shown as "Effective" with the date. |
superseded |
Superseded | True or false | No | Set to true when a newer version replaces this one. |
applies_to |
Applies to | Single line text | No | For example "Serial numbers from 2025-01". |
Health reviewer
Set the type (handle) to health_reviewer and use Name as the display name. Add these fields:
| Field key | Suggested name | Type | Required | Validation and notes |
|---|---|---|---|---|
name |
Name | Single line text | Yes | The reviewer's full name. |
credentials |
Credentials | Single line text | No | Job title or qualification, for example "Registered nurse". |
photo |
Photo | File | No | Accept images only. |
bio |
Bio | Rich text | No | One or two sentences. |
profile_url |
Profile URL | URL | No | A professional profile or registration page. |
A reviewer checks your content for accuracy. The theme labels them as "Content reviewed by", never as recommending a product. Only list people who actually reviewed the content and agreed to be named.
Storefront access and entry status
- In each metaobject definition, allow storefront access. Without it, the theme can't read the entries.
- If you turn on the active and draft status option for a definition, set each entry to Active. Draft entries don't show in your store.
- Add entries in Content > Metaobjects. Then select them in the product's Documents or Reviewed by metafield.
Enter product data
Open a product in the admin and scroll to Metafields. A few tips:
-
Regulatory status is a list. Add one status per item. If a status has a reference number, add it to Regulatory reference in the same position. For example, if the first status is
us_510k_cleared, the first reference is its 510(k) number. Leave a reference out and the statement prints without one. - How to use (steps) is a list with one step per item. Keep each step to a sentence or two.
- Specifications (JSON) uses a set format. See Product comparison and specifications.
- Units per pack is the number of units in one pack. See Supply planner for how pack-size variants work.
- Write safety text as it appears on your product labeling or instructions for use. The theme prints it as you enter it.
Connect block settings with dynamic sources
If your data already lives in other metafields, you don't need to copy it. Many health blocks have settings for a custom value. Their notes say "Connect a metafield with the dynamic source icon". A connected value is used instead of the health metafield.
- In the theme editor, open a product template and select the block, for example Safety information.
- Find the setting, for example Warnings under Custom values.
- Select the Connect dynamic source icon next to the setting.
- Choose your metafield. Only compatible metafields are listed.
Settings you can connect this way include:
- Safety information: Contraindications, Warnings, Precautions and Possible side effects.
- Intended use: Intended use (custom value) and Indications (custom value).
- What's inside: Custom value (ingredients).
- References: Custom value.
- Safety notice: Custom value and Notice link (custom value).
Don't type product-specific text directly into these settings. Text you type applies to every product that uses the template.
Bulk editing tips
- Bulk editor: in Products, select several products and choose Bulk edit. Add metafield columns from the columns menu, then edit values like a spreadsheet.
- CSV import: export a few products to see the metafield columns for your definitions, fill in the file, then import it. Test with a small file first.
- Reuse metaobjects: one reviewer entry can be selected on every product and article they reviewed. Update the entry once and every page updates.
- Templates: text that is the same for a whole product line, such as a shared disclaimer, can go in a block setting on an alternate product template instead of in every product.
- Work in batches: finish one product type at a time, and check one product of each type in the theme editor.
Check your setup in the theme editor
When you view a product in the theme editor, a Health data setup panel appears at the top of the product information. It lists the main health fields and marks each one Found or Empty for that product. It also links to this guide.
- The panel shows only in the theme editor. Shoppers never see it.
- To hide it, turn off Show health data setup checker in the editor in the Product information section.
- If a field shows Empty but you entered data, check the namespace and key for typos, and check the theme setting Metafield namespace.