New Mexico NMS2S Retail Error Messages and Troubleshooting
How to read NMS2S error messages in Flourish's point of sale, why inventory may not appear at all, what each state error code means, and whether to escalate to CCD or Flourish support.
Flourish's point of sale calls NMS2S to load sellable inventory, validate medical cards, complete sales, look up orders, and void tickets. When the state system rejects a call, Flourish shows you the state's own error message.
This article is a living reference. Many of the errors below should never appear in normal operation, and new ones will turn up as we all use the system. If you hit something not listed here, send it to Flourish support and we will add it.
How to tell a state error from a Flourish error
Start every troubleshooting conversation here, because it decides who can fix it.
A state error looks like this
It contains the marker [nms2s error], followed by an error code in capital letters with underscores, followed by the state's own message text. For example:
Error getting purchase limits for current order: [nms2s error] MEDICAL_CARD_LOOKUP_FAILED No data found for the given card lookup ID
The first part is Flourish telling you what it was trying to do. Everything after the marker is the state system's response, relayed to you unchanged. Flourish does not rewrite, shorten, or interpret it.
A Flourish error looks different
It has no [nms2s error] marker and no capitalized error code. It reads as a plain sentence from the application. If you are looking at a message with no marker, treat it as ours and send it to support with a screenshot. We can help resolve any unexpected issues or bugs.
Two things worth knowing
- A state error can still be our fault. A malformed request from Flourish comes back wearing a state error code. Those are called out below, and they belong with Flourish support even though they carry the marker.
- Some problems produce no error at all. The most common retail issue, product missing from the POS, is a successful response with nothing in it. See the section below.
Start with the connection check
Before troubleshooting anything specific, confirm the POS can reach the state. A connection failure produces symptoms that look like data problems, such as inventory that will not load or cards that will not validate, so checking first saves you chasing the wrong thing.
- Unauthorized means the location's authorization token is missing, expired, or invalid. This is a Flourish support item. We likely need to refresh your access token.
- "Unable to process request" means the state's own service could not be reached. Nothing on your side will fix it. Wait and retry, and we can report a prolonged outage to CCD.
Product is not showing up as available in the POS
This is the most common issue and it produces no error at all. The state system does not expose the inventory to Flourish, so the package is missing.
NMS2S only returns an inventory item to the POS when every one of the following is true. Check the following:
- It belongs to your organization and location. You must see the inventory in NMS2S.
- It is in the requested Retail or Consumption room. Product sitting in any other room is invisible to the POS.
- Its product type is designated retailable. A bulk or unpackaged type will not appear and can not move to the retail or consumption room in NMS2S.
- It has a positive available quantity.
- It has passed testing and carries a current expiration date, where its product type requires retail testing and expiration.
- It is not scheduled for destruction and has not been destroyed.
- It is not subject to an active administrative case restriction.
Work that list in order. Room assignment and product type account for most cases, particularly after migration. Shared-address licenses had inventory loaded into default rooms per activity, so retail stock may not have been moved to the sales floor room.
Medical-only items
An item flagged medical-only stays in the inventory list because it remains sellable to a medical customer. It cannot be sold to an adult-use customer, and the state independently rejects that at checkout even if it were selected.
Inventory loading errors
Error | What it means |
RETAIL_DISPENSE_INVENTORY_FAILED, with a message naming a missing Retail or Consumption room | The room does not exist state-side. Create or correct the room in NMS2S. |
ACTIVE_LOCATION_LICENSE_REQUIRED | The location lacks the license for that room type. A retail room needs a Retail license; a consumption room needs a Consumption license. This is a licensing status issue, not a POS issue. |
INVALID_RETAIL_INVENTORY_ROOM_TYPE | The room type requested was neither retail nor consumption. Report to Flourish support. |
RETAIL_DISPENSE_INVENTORY_FAILED, general message | The state could not retrieve inventory. Retry, then escalate to CCD. |
Medical card errors
First step: look the card up in the state portal
When a card error comes back, log into NMS2S and look the card up there before doing anything else. This is the fastest way to separate a genuine card problem from a lookup or connection problem, and it tells you whether the state can see the card at all.
If the portal finds the card and the POS does not, the problem is in the lookup rather than the card, and it is worth a screenshot to Flourish support along with the error. If the portal cannot find it either, the card itself is the issue and the customer needs to take it up with CCD.
Read the message, because the same code covers four problems
MEDICAL_CARD_LOOKUP_FAILED is returned for four unrelated conditions, and two of them are not your problem at all:
Message | What to do |
Card ID not found, or no data found for the given card lookup ID | The Department of Health has no record of that card. Verify it in the state portal first. Then re-read the number off the physical card, since transposed digits are the most common cause. Confirm you have the card ID rather than a patient or license number, and ask whether the card was recently reissued. |
DOH API authorization failed | A state infrastructure failure. The state's connection to the Department of Health is broken. Nothing about the card or your data is wrong. Report to CCD. |
DOH API request timed out | Also a state infrastructure failure. The Department of Health service did not respond in time. Retry, and if it persists report to CCD. |
Unable to look up Medical Cannabis Card | General failure. Retry, then escalate to CCD. |
Do not re-key a card repeatedly on a DOH authorization or timeout message. The card is fine and the lookup will keep failing until the state's connection recovers.
INVALID_MEDICAL_CANNABIS_CARD_ID
The card ID was missing, blank, whitespace only, or longer than 100 characters. Re-enter it.
Card expiration does not block the lookup
The state returns patient and caregiver expiration dates but does not reject a card just because the returned expiration date has passed. Do not assume an expired date is why a lookup failed. Rely on whether the lookup succeeded, and on the authoritative validation the state performs at checkout.
Medical units run on a rolling 90 days
A successful lookup returns the patient's unit limit for the applicable 90-day period, the units used in the previous 90 days, and the remainder. Voided sales do not count against the balance; only completed dispenses do.
A successful card lookup does not guarantee the sale
The lookup is preliminary and informational. It reserves nothing. When the sale is submitted, the state performs the Department of Health lookup again and recalculates the balance, and that check is the authoritative one.
So a checkout can be rejected after a clean lookup, most often because the patient completed another purchase somewhere else in the interval. This is not a Flourish miscalculation and it is not a stale reading. Show the customer the returned error and adjust the order.
Errors when completing a sale
Read the message, not just the code
DISPENSE_FAILED is a catch-all. The state returns the same code for a missing field, an exceeded medical balance, an adult-use limit, and every checkout validation it runs. The code by itself tells you nothing. The message text is the actual error.
When you record or escalate one of these, record the full message. "DISPENSE_FAILED" alone is not enough for anyone to act on.
DISPENSE_FAILED when the order is over a limit
Medical units used exceed the patient's remaining medical units. The state's balance is authoritative and current. Reduce the order to fit the remaining balance the state reports.
Adult-Use or plant total cannot exceed the configured limit. The order exceeds an adult-use purchase limit or a plant count limit. Reduce the order.
Neither is a system fault. The state is enforcing a limit, and the fix is at the register with the customer. Flourish's validation should catch this, so please report this to Flourish support.
DISPENSE_FAILED on checkout validation
At checkout the state reloads and locks the selected inventory, then re-verifies everything the inventory list was screened on: ownership, room, license, testing and expiration, retailable type, medical-only restrictions, available quantity, whole-number quantities, case restrictions, destruction status, purchase limits, and THC calculations.
Anything can change between loading the menu and ringing the sale, so an item that appeared in the POS can still be rejected. Common causes:
- Quantity. Packaged items must be sold in whole numbers, so 1.5 packages is rejected. Deli style flower may be sold in fractions.
- Available quantity. Someone else sold the item, or it was adjusted, after the menu loaded.
- Testing or expiration. The item is no longer eligible.
- Case restriction or destruction. A state-side hold landed on the item.
Delivery, driver, vehicle, and courier validations apply only to delivery orders and usually mean a driver or vehicle record is incomplete or inactive state-side.
DISPENSE_FAILED on a missing required field
Messages such as "Customer Type is required" or "Dispense Type is required" mean a field the state requires was not supplied. If it is not something you can set at the register, send a screenshot to Flourish support.
DUPLICATE_INTERNAL_REQUEST_ID
The sale may have already gone through. The state has already processed a sale under this identifier.
Do not re-ring the order. Look it up first and confirm whether it completed. Ringing it again could double-dispense and create inventory issues. Raise a Flourish support ticket.
INVENTORY_CASE_RESTRICTION
One or more selected items is blocked from dispensing by an active administrative case restriction. The message varies with the restriction. This is a state-side hold, not a POS problem. Remove the item to complete the rest of the sale and take the restriction up with CCD.
INVALID_DISPENSE
The request Flourish sent was missing or malformed. Send this one to Flourish support. Unlike the rest of the errors here, the cause is on our side. Include a screenshot and the time.
Order lookup errors
Order lookup takes exactly one identifier: the ticket ID, the order number, or the internal request ID.
Error | What it means |
RETAIL_DISPENSE_ORDER_NOT_FOUND | No such order for your organization and location. An order belonging to another location returns as not found, so confirm you are in the right facility. Report to Flourish support. |
INVALID_ORDER_LOOKUP_IDENTIFIER | No identifier, or more than one, was supplied. Report to Flourish support. |
INVALID_RETAIL_DISPENSE_TICKET_ID, INVALID_ORDER_NUMBER, INVALID_DISPENSE_INTERNAL_REQUEST_ID | The identifier was malformed. Re-check what you entered. Report to Flourish support. |
RETAIL_DISPENSE_ORDER_LOOKUP_FAILED | General failure. Retry, then escalate to CCD. Also report to Flourish support. |
Order lookup does not require a currently active license, so you can still retrieve historical orders after a license status change.
Delivery option errors
DELIVERY_OPTIONS_FAILED covers organization not found, location not found or inactive, and general failures. The message names which.
Two things that are not errors but look like them:
- Retailer delivery allowed but not available. Delivery is permitted at the location, but it does not currently have both a driver and a vehicle on record. Add them state-side.
- A courier with no drivers or vehicles. A courier can appear in the list without usable resources. Only select a courier that has both a driver and a vehicle.
Void ticket errors
NMS2S validates the request, checks the ticket is voidable, then tries to restore the inventory. An error can come from any of those three stages.
Something is wrong with the void request
Error | What to do |
VOID_REASON_TOO_SHORT | The reason must be at least 50 characters after trimming. Write a real sentence explaining what happened, not "mistake" or "wrong item." |
VOID_REASON_REQUIRED | No reason was entered at all. |
VOID_REASON_TOO_LONG | Over 1,000 characters. Shorten it. |
INVALID_DISPENSE_TICKET | The ticket ID was missing or malformed. Reopen the ticket and retry. |
DUPLICATE_VOID_INTERNAL_REQUEST_ID | This void request has already been used. Refresh and check whether the void went through before retrying. Report to Flourish support. |
The 50-character minimum is the one your team will hit most. It is a state requirement, not a Flourish one. Train budtenders to write a factual sentence. The reason becomes part of the compliance record, so it should read like something you would be comfortable showing an inspector.
The ticket cannot be voided
Error | What it means |
DISPENSE_NOT_FOUND | NMS2S has no such ticket for your organization and location. Confirm you are in the right facility. |
DISPENSE_ALREADY_VOIDED | Already voided by a different request. Check the ticket's current state before doing anything else. |
DISPENSE_NOT_COMPLETE | Only a completed ticket can be voided. |
DISPENSE_NOT_CREATED_THROUGH_POS | The ticket was created in the NMS2S web application. It has to be voided in NMS2S directly. You can look a web-created order up through the POS, but you cannot void it there. This will come up for any sale rung up manually in the state portal. |
Room or license problems
Error | What it means |
INVALID_DISPENSE_ROOM | NMS2S cannot determine which Retail or Consumption room the sale came out of. Check your room setup state-side, particularly on shared-address licenses where migration assigned default rooms. |
ACTIVE_LOCATION_LICENSE_REQUIRED | The location does not hold the license or temporary access needed for that room. |
The inventory cannot be restored
These mean the sale is voidable but NMS2S cannot safely put the product back. They generally require manual correction in the state system.
Error | What it means |
INVENTORY_HAS_DOWNSTREAM_ACTIVITY | A transfer, manifest, destruction, or other later event blocks automatic reversal. The most common real-world cause, because the product moved on after the sale. |
INVENTORY_NOT_FOUND | One or more original inventory records no longer exist. |
INVENTORY_LEFT_LOCATION | The inventory is no longer at your organization and location. |
DISPENSE_ITEMS_NOT_FOUND | The ticket's item rows are missing state-side. |
DISPENSE_HISTORY_LINK_MISSING | The inventory-history reference needed for a safe reversal is missing. |
INVALID_DISPENSE_ITEM_QUANTITY | A stored quantity is not valid for restoration. |
When you hit one of these, void the sale in Flourish for your own records and correct the state-side inventory manually in NMS2S. Document what you did, because this is exactly the situation your parallel record exists for.
VOID_DISPENSE_FAILED
An unexpected error inside the state's void processing. Retry once. If it persists, it is a CCD issue.
Where to take it
Situation | Who to contact |
A message with no [nms2s error] marker | Flourish support. This is ours, possibly a bug. |
INVALID_DISPENSE, INVALID_RETAIL_INVENTORY_ROOM_TYPE, INVALID_ORDER_LOOKUP_IDENTIFIER, or an Unauthorized connection error | Flourish support. The request or token was wrong on our side. |
DISPENSE_FAILED naming a field you cannot set at the register | Flourish support, with the full message |
A card the state portal can find but the POS cannot | Flourish support, with a screenshot of both |
DOH authorization failure or timeout | CCD. Do not re-key the card. |
An inventory case restriction | CCD |
A card the state portal cannot find either | CCD, through the customer |
Missing rooms, licensing status, product types, or expiration dates | Your own state-side cleanup |
Anything you are unsure about | Flourish support. Send a screenshot and we will tell you which side it came from. |
Whatever the outcome, record the error code, the full message text, the ticket or order ID, and the time. State-side errors are the main evidence available when a discrepancy has to be explained later, and CCD will ask for them.
How did we do?
New Mexico NMS2S Harvest Dual Entry