Setting up a Product to work with automations
Overview
Every new product — whether created from scratch or duplicated — requires three steps to be fully configured. Skipping Step 1 or Step 2 can result in orders getting stuck in"Awaiting Fulfillment"or visits that never receive a pharmacy med ID. Skipping Step 3 (when it applies) can fail the pharmacy send or createduplicate shipments.

Step 1: New Product
Goal: Create or duplicate a product and configure extras (visit type, starter flag, pharmacy → med ID assignment) so the visit layer can submit the correct med ID.
Instructions
Open the product list.
app.portals.care: Catalog → Products
crm.portals.care: Store Manager → Products
Create a new product or duplicate an existing one.
Do not trust a duplicate blindly. Always verify all fields match your expectations after duplicating. Extras — including pharmacy med IDs — are copied as-is.
Scroll to Extras on the product
(Catalog → Products → Extras on app, or
Store Manager → Products → Extras on CRM).Pharmacy + med IDs live in this JSON block, not a dedicated Pharmacies section, under
pharmacies.
{
"pharmacies":{
"PharmacyKey":""
},
"addons":{
"PharmacyKey":["MedIds"]
},
"drugQty":" ",
"drugStrength":" ",
"drugName":"",
"refills":""
}Keys are pharmacy names (or the pharmacy’s configured key) You can ask your support rep for the exact spelling. Pharmacies order is routing priority: the first eligible pharmacy that serves the patient’s shipping state wins.
Values are one DIN per pharmacy (the drug catalog DIN). That is what the visit asks Beluga to prescribe. It is not the full set of drugs this product may fulfill — that mapping is Step 2.
Configure the drugQty, drugStrength, and drugName, and refills fields exactly to the Prescriber Dashboard.
Add Ons will not need drugQty, drugStrength, and drugName, and refills configured, they will use the value from
Drug Catalogue
Configure the med ID in priority order. This is the request sent with the visit. Beluga may still write a different catalog drug (for example another dosage); Step 2 is what makes that prescription valid for this product.
Verify the med ID is correct by checking against the Prescriber Dashboard
Save the product. Step 1 is complete.
Step 1 done. The product extras are saved. At checkout they copy onto the order line item. Pharmacy assignment and the Beluga request med ID read from that map. Continue with Step 2 for valid prescribedmed IDs.
Step 2: Drug Setup
Goal: Put this product on every catalog drug that is a valid prescription for it. Step 1 is the ask (one med ID per pharmacy, sent to Beluga). Step 2 is the answer (whatever Beluga actually prescribed).This is many-to-many. One product usually belongs on several drug rows (every dosage you will accept). One drug can list several products (the same med sold as different SKUs). Product extras do not enumerate that set.

Why this step matters
Fulfillment does not check “did Beluga prescribe the extras med ID?” It checks “is the prescribed catalog drug linked to the product the patient bought?”
If yes, the pharmacy will be asked to ship that prescription as this order.
If no → the order sits in "Awaiting Fulfillment" (or the visit is not accepted) until someone reviews it.
That is why mapping only the extras DIN is not enough. You asked Prescriber for one medication; they may prescribe another that still fulfills the same product.Skipping Step 2 after a product duplication is a common cause of stuck orders. Where to work
Instructions
Open Drugs on emr.portals.care.
Filter to the family of drugs that could answer that ask:
Set Pharmacy to the target pharmacy.
Search by the drug name (Semaglutide)
Review every matching row. The catalog does not sort by dosage; do not stop at the extras DIN.
Use "+" to expand and check name, strength, and supply without opening the row.
Confirm expected dosages exist. If a dosage is missing, flag it to CarePortals (new med IDs are CarePortals-owned unless already imported).
For each row, decide whether this prescription fulfills the product:
Open the drug.
Ask: "We asked Doctor Network for [extras med ID]. They prescribed this drug instead. Is that still a valid fulfillment of the product the patient bought?"
Yes → add the new product to this drug’s product list. (The list may already contain other products; you are adding one more.)
No → leave it unmapped.

Example Above:
Doctor Prescribe
Semaglutide 2.5 mg/ml / Pyridoxine HCl 2 mg/ml Sterile Solution for Injection - 2 mLWhich products would see this product as appropriate?
Save each drug you changed.
Spot-check: Reopen the mapped drugs by filtering using your product and confirm that all drugs dosages are mapped
Step 2 done. When Beluga writes a prescription, the platform can match it to the purchased product even if the prescribed med ID is not the one in extras. Next: Step 3 if the pharmacy needs vendor extras.
Step 3: Integration Setup
Goal: Give the pharmacy fulfillment integration the exact vendor catalogue values it needs on each new med ID.
It applies whenever the assigned pharmacy’s workflow sends orders through an integration that reads drug extras (or NDC/CSN on the drug). Integrations that already format from the prescription and product extras do not need this step.
When Step 3 is required
Confirm which fulfillment integration the pharmacy uses. Ask CarePortals if you are unsure. Do not guess from the pharmacy display name — two pharmacies can share a brand and use different adapters, and one pharmacy record can be wired to LifeFile, Blend, TMC, and so on.
Look up that integration in Pharmacy integrations.
Needs extras → complete Step 3 for every new med ID at that pharmacy.
Skip → you are done after Step 2.
Existing med IDs that already have complete extras do not need to be re-keyed unless the pharmacy changed vendor IDs or pack data.
Why this step matters
Vendor systems often match on exact strings. A stray space (for example mg /mL vs mg/mL) can make the API request and the prescription look like two different products, which can duplicate shipments or reject the send.
Instructions
Open the drug catalog entry for the new med ID.
emr.portals.care: Drugs — edit extras here
app.portals.care: Catalog → Drugs — list and search; it cannot yet edit extras
Scroll to Extras (JSON editor at the bottom of the drug). There is no dedicated Step 3 form in the current UI. Some failed sends will write placeholder text into extras (see Pharmacy integrations); treat those as a to-do list, not finished config.
Fill the integration object using the pharmacy’s product sheet, character-for-character (capitalization and spacing included). Use Pharmacy integrations for field names.

(Optional) Substitute pack / vial size for cost only if the total dosage still matches the SIG. Example: two 4 mg vials instead of one 8 mg vial is acceptable when the prescribed total is the same.
Save. Step 3 is complete.
Step 3 done. The fulfillment send can include the vendor’s catalogue IDs and formatted drug fields.
If a send fails: Open the drug again. Middleware for several integrations writes instructional placeholders (for example Blend’s
Please Provide Blend product id) and an error that names the DIN. Replace placeholders with real values and retrigger the workflow. A LifeFile-style banner (“Please update the drug extras for this med ID”) is not guaranteed in the current UI — rely on extras contents and workflow errors.
Quick reference checklist
Use this checklist every time you create or duplicate a product:
[ ] Step 1: Product created or duplicated; extras configured to send to Doctor a preference for the medication (
pharmaciesmap with med IDs))[ ] Step 2: On emr.portals.care → Drugs, the product list is configured for each drug that may correctly be received by the doctor
[ ] Step 3 Integration extras: the drug is configured to send the correct data to the pharmacy. Check Pharmacy integrations.
Getting help
Routine questions → CarePortals via Slack.
Multi-topic needs → Schedule a support session.
Stuck orders → Confirm Step 2 mapped this product onto every catalog drug Beluga might prescribe for it (not only the extras DIN), then confirm Step 3 if the pharmacy uses a vendor extras integration.
Pharmacy integrations
Confirm with CarePortals which fulfillment integration the pharmacy uses. Fill only that integration’s extras on the drug. Paste the object into Extras JSON on emr.portals.care → Drugs. Values must match the pharmacy product sheet character-for-character. Comments (// …) are for this guide — strip them before pasting.
If a send fails, some integrations write placeholder strings into extras. Replace those with real values and retrigger. This is Step 3.
LifeFile
LifeFile matches orders on exact catalogue strings. A stray space in strength or form can look like a second product and duplicate a shipment. Put LifeFile fields under extras.lifeFile. Use lifeFileIds for the LifeFile product ID(s). Alternate pack sizes are OK only if the total dose still matches the SIG. There is no automatic “update extras” banner in the current UI.
{
"lifeFile": {
"lifeFileIds": ["12345"], // LifeFile product ID(s)
"drugName": "Semaglutide", // Exact drug name LifeFile expects
"drugForm": "injection", // Dosage form, e.g. injection, solution
"drugStrength": "2 mg/mL", // Exact strength, including spacing
"quantityUnits": "mL", // Unit of measurement
"packSize": "8" // Vial or package size. Alternate sizes OK only if total dose matches the SIG
}
}
Blend
Blend identifies medications from its own catalogue, not from the CarePortals DIN. Every dispensable drug needs a Blend product UUID and an NCPDP quantity unit code (units). Blend rejects free-text mitte types such as vial. Incomplete config writes Please Provide Blend product id and Please Provide NCPDP units code (e.g. C48480).
{
"Blend": {
"prescriptionProductId": "00000000-0000-0000-0000-000000000000", // Required. Blend prescription_product_id UUID
"units": "C48480", // Required. NCPDP quantity unit code (not free-text mitte like vial)
"productCode": "OPTIONAL-CODE", // Optional customer-defined Blend product code
"drugName": "Semaglutide" // Optional catalogue name override
}
}
TailorMade / TMC
TMC (Tailor Made Compounding) sends one or more Pharmetika product lines per drug. extras.tailormade is an array. Each entry needs id (TMC / Pharmetika product id) and drugQty. Incomplete config writes Please Provide TMC product id and Please Provide drug quantity.
{
"tailormade": [ // Array. At least one mapping
{
"id": "TMC-PRODUCT-ID", // Required. Pharmetika / TMC product id
"drugQty": "1", // Required. Quantity to send
"drugName": "Semaglutide", // Optional
"quantityUnit": "ml", // Optional
"drugStrength": "2 mg/mL", // Optional
"reasonForCompounding": "", // Optional
"reasonForCompoundingContext": "" // Optional
}
]
}
BondRx
BondRx needs a compound serial number or an NDC. Put csn on extras.BondRx for compounded drugs. Put ndc on the drug record for standard medications. Incomplete config writes Please Provide CSN if needed / Please Provide NDC if needed and errors with {DIN} in Drug Catalogue requires CSN or NDC. PharmacyHub pharmacies use this same BondRx mapping.
{
"BondRx": {
"csn": "CSN-FROM-PHARMACY", // Compound serial number. Required for compounded meds if ndc is not set
"icd10": "" // Optional
}
}
For a standard (non-compound) BondRx drug, set ndc on the drug itself:
{
"ndc": "00000-0000-00" // On the drug record, not inside extras. Required for standard meds if csn is not set
}
Precision
Precision maps each catalog drug to a Precision medicationId. Incomplete config writes This field is required and errors with Drug {DIN} does not have a medication id.
{
"Precision": {
"medicationId": "PRECISION-MED-ID" // Required. Precision medication id
}
}
WellSync
WellSync maps each catalog drug to a WellSync drugId and dosageId. Quantity and days supply can live here or come from the prescription. Incomplete config writes This field is required and errors with Please configure drug with required fields.
{
"WellSync": {
"drugId": "WELLSYNC-DRUG-ID", // Required
"dosageId": "WELLSYNC-DOSAGE-ID", // Required
"quantity": 1, // Optional. Can also come from the prescription
"daysSupply": 30 // Optional. Can also come from the prescription
}
}
Rx Vortex
Rx Vortex identifies the product by catalogueId. Name, form, strength, pack, and units are optional overrides sent to the vendor. Incomplete config writes Please Provide the catalogueId and errors with Drug not configured please configure {DIN}.
{
"RxVortex": {
"catalogueId": "RXVORTEX-CATALOGUE-ID", // Required. Rx Vortex catalogue id
"drugName": "Semaglutide", // Optional override
"drugForm": "injection", // Optional override
"drugStrength": "2 mg/mL", // Optional override
"packSize": "8", // Optional
"quantityUnits": "mL", // Optional
"daysSupply": 30 // Optional. String or number
}
}
Pharmetika
Pharmetika reads extras.pharmetika. Field names depend on the org’s API version: v1 uses id, quantity, and daySupply; v2 uses pharmetikaProductId. Use the product sheet CarePortals or the pharmacy supplied for your org. Fill this before the first live order.
{
"pharmetika": {
"id": "V1-PRODUCT-ID", // v1 product id
"pharmetikaProductId": "PHARMETIKA-PRODUCT-ID", // v2 product id
"drugName": "Semaglutide",
"drugStrength": "2 mg/mL",
"quantity": "1", // v1 quantity
"daySupply": "30", // v1 days supply
"quantityUnit": "ml", // ml | mg | vial
"reasonForCompounding": {
"description": "",
"usePharmacyNoteAsContext": false,
"context": ""
}
}
}
GoGoMeds
GoGoMeds Rx identifies the product with an NDC (or UPC) on the drug record, not a nested extras object. If it is missing, the send errors with Drug Identifier (NDC or UPC) not found for {DIN}. OTC UPC lists belong on the product extras in Step 1 (upcItems), not here.
{
"ndc": "00000-0000-00" // On the drug catalog row, not inside extras. NDC or UPC
}
Beluga
Beluga is the visit layer. Med IDs belong in Step 1 product extras (pharmacies), not on the drug’s integration extras. Weight-loss isStarter and visit type are product or drug flags. Skip Step 3 for Beluga-only pharmacies.
PharmacyHub
PharmacyHub fulfillment goes through BondRx. Complete Step 3 with the BondRx mapping: csn on extras.BondRx for compounded drugs, or ndc on the drug record for standard medications. Do not skip extras because the adapter also sends line item name, SKU, and quantity.
Curexa
Curexa Rx uses the prescription and fulfillment drug fields. Skip Step 3 for Rx. Curexa OTC add-ons are product extras in Step 1 (extras.Curexa.OTC).