RLD CCD POS Retrieval APIInteractive lookup, validation, and retrieval documentation

POS Retrieval Operations

Interactive documentation for inventory retrieval, delivery options retriveval, medical card validation and order retrieval operations.

All operations require a signed location JWT in the Authorization: Bearer <token> header.

Connection

GET/v1/connection/statusCheck the POS API connection↑ Back to top

Reports whether the POS API can reach the authoritative CCD service for the organization and location encoded in the authorization token. Use it to confirm connectivity and token validity before running dispense operations.

NameInDescription
Authorization
required
header
Bearer JWT
Location authorization token; no other parameters are required. The organization, location, and API location token are read from the token itself.

Try it out

Request URL

Server response

Connection Status: Responses

The endpoint returns the standard response envelope. The data object carries the connection-status payload produced by the authoritative service; execute the request above against your environment to see the fields it currently returns.

{
  "status": "ok",
  "message": "",
  "data": {
    "organizationId": 3682,
    "organizationName": "POS Sandbox - Test 7A",
    "locationId": 5102,
    "address": "300 Test 7A Medical Retail Way",
    "city": "Las Cruces",
    "posApiConnectionStatus": "prepared"
  }
}

Unauthorized

Returned with HTTP 401 when the Bearer token is missing, malformed, expired, or fails signature verification.

{
    "status": "error",
    "message": "Unauthorized.",
    "data": null
}

Service Unreachable

If the authoritative service cannot be reached or replies with an error, the response uses the shared error format with HTTP 200 and the originating message.

{
    "status": "error",
    "message": "Unable to process request.",
    "data": null
}

Dispenses

GET/v1/dispenses/getRetailDispenseInventoryRetrieve retail dispense inventory↑ Back to top

Returns retailable inventory for the location encoded in the authorization token.

NameInDescription
roomTypequery
string
Required room type filter: retail or consumption.

Try it out

Request URL

Server response

Inventory: Successful Response

{
    "status": "ok",
    "message": "",
    "data": {
        "roomType": "retail",
        "inventory": [
            {
                "inventoryId": 1789,
                "barCode": "1234567890123456",
                "productType": "Infused Cannabis Material (Volatile Solvent) Packaged",
                "productName": "Example Infused Product",
                "strainName": "Blue Dream",
                "medicalOnly": false,
                "availableQuantity": 24,
                "saleUnit": "pkg",
                "quantityMustBeWholeNumber": true,
                "packageContentQuantity": 0.5,
                "packageContentUnit": "g",
                "servingsPerPackage": null,
                "totalThcPercent": 1.88,
                "totalThcMgPerGram": 18.77,
                "totalThcMgPerMl": null,
                "totalThcMgPerPackage": 9.39,
                "delta9ThcPercent": 1,
                "delta9ThcMgPerGram": 10,
                "delta9ThcMgPerMl": null,
                "delta9ThcMgPerPackage": 5,
                "expirationDate": "2027-04-18"
            },
            {
                "inventoryId": 1790,
                "barCode": "9876543210987654",
                "productType": "Deli Style Cannabis",
                "productName": null,
                "strainName": "Northern Lights",
                "medicalOnly": false,
                "availableQuantity": 142.75,
                "saleUnit": "g",
                "quantityMustBeWholeNumber": false,
                "packageContentQuantity": null,
                "packageContentUnit": null,
                "servingsPerPackage": null,
                "totalThcPercent": 9.39,
                "totalThcMgPerGram": 93.85,
                "totalThcMgPerMl": null,
                "totalThcMgPerPackage": null,
                "delta9ThcPercent": 5,
                "delta9ThcMgPerGram": 50,
                "delta9ThcMgPerMl": null,
                "delta9ThcMgPerPackage": null,
                "expirationDate": "2027-04-11"
            }
        ]
    }
}

An empty inventory array is a successful response. It means the requested room exists and the location has the required license, but no inventory currently meets the requirements for dispensing.

Room Fields

FieldTypeDescription
roomTypestringThe requested room type: retail or consumption.
inventoryarrayInventory items currently available for selection by the POS.

Inventory Fields

FieldTypeDescription
inventoryIdnumberInternal inventory identifier. This value must be returned in the subsequent dispense request.
barCodestringCompliance inventory barcode. May be used for scanning, searching, or displaying the item.
productTypestringHuman-readable product type.
productNamestring or nullProduct name assigned to the inventory item.
strainNamestring or nullCannabis strain associated with the inventory item.
medicalOnlybooleanIndicates that the item may only be dispensed to a Medical customer.
availableQuantitynumberQuantity available at the time this response was generated.
saleUnitstringUnit in which the POS must submit the dispense quantity. Current values are pkg, g, or mL.
quantityMustBeWholeNumberbooleanWhen true, the quantity submitted by the POS must be a whole number.
packageContentQuantitynumber or nullAmount of cannabis material or countable items contained in one package. Null for unpackaged inventory.
packageContentUnitstring or nullUnit for packageContentQuantity. Current values are g, mL, or each. Null for unpackaged inventory.
servingsPerPackagenumber or nullNumber of servings contained in one package when available and applicable.
totalThcPercentnumber or nullTotal THC potency expressed as a percentage when available. Primarily applicable to solid products.
totalThcMgPerGramnumber or nullTotal THC potency expressed as milligrams per gram when available.
totalThcMgPerMlnumber or nullTotal THC potency expressed as milligrams per milliliter when available. Primarily applicable to liquid products.
totalThcMgPerPackagenumber or nullTotal milligrams of Total THC contained in one package when available or calculable.
delta9ThcPercentnumber or nullDelta-9 THC potency expressed as a percentage when available.
delta9ThcMgPerGramnumber or nullDelta-9 THC potency expressed as milligrams per gram when available.
delta9ThcMgPerMlnumber or nullDelta-9 THC potency expressed as milligrams per milliliter when available.
delta9ThcMgPerPackagenumber or nullTotal milligrams of Delta-9 THC contained in one package when available or calculable.
expirationDatedate or nullExpiration date of the inventory item when applicable.

Inventory Included in the Response

Inventory is returned only when it:

Inventory that does not meet these conditions is omitted from the response.

Medical-Only Inventory

Medical-only inventory may be included in the response because it remains eligible for a Medical customer. The POS should not allow an item with "medicalOnly": true to be selected for an Adult-Use customer. The internal dispense operation independently validates this rule when the order is submitted.

Quantity Handling

The POS should use availableQuantity, saleUnit, and quantityMustBeWholeNumber together. Example packaged item:

{
    "availableQuantity": 24,
    "saleUnit": "pkg",
    "quantityMustBeWholeNumber": true
}

The POS may accept quantities such as 1, 2, or 3, but not 1.5. Example unpackaged flower item:

{
    "availableQuantity": 142.75,
    "saleUnit": "g",
    "quantityMustBeWholeNumber": false
}

The POS may accept a fractional quantity such as 3.5. Example unpackaged liquid item:

{
    "availableQuantity": 500,
    "saleUnit": "mL",
    "quantityMustBeWholeNumber": false
}

Use in the Subsequent Dispense Request

For each selected item, the POS will later submit:

{
    "inventoryId": 1789,
    "quantity": 1,
    "dollarAmount": 15.00,
    "taxAmount": 1.25
}

The inventory endpoint supplies inventoryId and the information needed to collect a valid quantity. The POS supplies dollarAmount and taxAmount from its own sales transaction. The POS does not need to return the product name, product type, strain, barcode, medical-only indicator, sale unit, or available quantity in the dispense request.

Authoritative Validation

The inventory response represents inventory availability at the time the request was processed. Inventory quantities, testing status, expiration status, room assignment, case restrictions, or destruction status may change after the response is received. The subsequent dispense operation is authoritative. It reloads and locks the selected inventory records and independently verifies:

The POS should perform reasonable preliminary validation using the inventory response, but it must handle a dispense rejection if inventory is no longer eligible when the order is submitted.

Endpoint-Specific Errors

Invalid Room Type:

{
    "status": "error",
    "errorCode": "INVALID_RETAIL_INVENTORY_ROOM_TYPE",
    "message": "Room Type must be Retail or Consumption.",
    "data": null
}

Required License Not Available:

{
    "status": "error",
    "errorCode": "ACTIVE_LOCATION_LICENSE_REQUIRED",
    "message": "Unable to process request. This location does not have an active, non-expired license or valid temporary access for this activity.",
    "data": null
}

The required license is based on the requested room:

Requested Room Not Found:

{
    "status": "error",
    "errorCode": "RETAIL_DISPENSE_INVENTORY_FAILED",
    "message": "Unable to process request. Retail room not found.",
    "data": null
}

For a Consumption request, the message is: Unable to process request. Consumption room not found.

General Inventory Retrieval Failure:

{
    "status": "error",
    "errorCode": "RETAIL_DISPENSE_INVENTORY_FAILED",
    "message": "Unable to retrieve retail dispense inventory.",
    "data": null
}



GET/v1/dispenses/GetRetailDispenseDeliveryOptionsRetrieve delivery options↑ Back to top

Returns delivery options, such as drivers, vehicles, and courier agreements for the location encoded in the authorization token.

NameInDescription
Authorization
required
header
Bearer JWT
Location authorization token; no other parameters are required.

Try it out

Request URL

Server response

Delivery Options: Successful Response

{
    "status": "ok",
    "message": "",
    "data": {
        "retailerDelivery": {
            "allowed": true,
            "available": true,
            "drivers": [
                {
                    "driverId": 12,
                    "firstName": "Jane",
                    "lastName": "Smith",
                    "driversLicenseLastFour": "1234"
                }
            ],
            "vehicles": [
                {
                    "vehicleId": 8,
                    "year": "2024",
                    "make": "Ford",
                    "model": "Transit",
                    "licensePlate": "ABC123"
                }
            ]
        },
        "courierDelivery": {
            "available": true,
            "couriers": [
                {
                    "courierRetailAgreementId": 17,
                    "courierOrganizationId": 200,
                    "courierLocationId": 300,
                    "orgName": "Example Courier",
                    "premiseAddress1": "100 Example Road",
                    "premiseCity": "Albuquerque",
                    "courierLicenseId": 45,
                    "courierLicenseNum": "COURIER-123",
                    "displayText": "Example Courier - 100 Example Road, Albuquerque - License: COURIER-123",
                    "drivers": [
                        {
                            "driverId": 25,
                            "firstName": "Robert",
                            "lastName": "Jones",
                            "driversLicenseLastFour": "5678"
                        }
                    ],
                    "vehicles": [
                        {
                            "vehicleId": 19,
                            "year": "2023",
                            "make": "Mercedes-Benz",
                            "model": "Sprinter",
                            "licensePlate": "XYZ789"
                        }
                    ]
                }
            ]
        }
    }
}

Empty arrays are valid. For example, a location may have no active courier agreements, or a delivery method may be allowed but not currently have the required driver and vehicle records.

retailerDelivery Fields

Contains the retailer location's own delivery resources.

FieldTypeDescription
allowedbooleantrue when the location is configured for retailer-operated delivery and currently has a valid Retail license or qualifying temporary access.
availablebooleantrue when retailer delivery is allowed and the location currently has at least one driver and at least one vehicle.
driversarrayDrivers belonging to the requesting organization and location.
vehiclesarrayVehicles belonging to the requesting organization and location.

A location can have { "allowed": true, "available": false }. This means retailer-operated delivery is permitted, but the location does not currently have both a driver and vehicle available in the system.

courierDelivery Fields

Contains delivery resources available through active courier agreements.

FieldTypeDescription
availablebooleantrue when at least one active courier agreement has at least one driver and at least one vehicle.
couriersarrayActive courier agreements for the requesting Retail or Consumption location.

A courier may appear in the couriers array even when that specific courier currently has no drivers or no vehicles. The POS system should only allow selection of a courier that has both an available driver and vehicle.

Courier Fields

FieldTypeDescription
courierRetailAgreementIdintegerActive courier agreement identifier. Submit this value when using courier fulfillment.
courierOrganizationIdintegerOrganization that operates the courier service.
courierLocationIdintegerCourier location associated with the agreement.
orgNamestringCourier organization name.
premiseAddress1stringCourier location street address.
premiseCitystringCourier location city.
courierLicenseIdintegerInternal identifier for the courier's active Courier license.
courierLicenseNumstringCourier license number.
displayTextstringCombined display value that may be used by the POS interface.
driversarrayDrivers associated with the courier location.
vehiclesarrayVehicles associated with the courier location.

Driver Fields

FieldTypeDescription
driverIdintegerDriver identifier to submit with the dispense.
firstNamestringDriver first name.
lastNamestringDriver last name.
driversLicenseLastFourstringLast four characters of the driver's license number.

Vehicle Fields

FieldTypeDescription
vehicleIdintegerVehicle identifier to submit with the dispense.
yearstringVehicle model year.
makestringVehicle manufacturer.
modelstringVehicle model.
licensePlatestringVehicle license plate.

Using the Returned Values in a Dispense

For retailer-operated delivery, the dispense request must contain:

{
    "deliveryFulfillmentType": "retailer",
    "retailerDriverId": 12,
    "retailerVehicleId": 8
}

For courier delivery, the dispense request must contain:

{
    "deliveryFulfillmentType": "courier",
    "courierRetailAgreementId": 17,
    "courierDriverId": 25,
    "courierVehicleId": 19
}

The selected courier driver and vehicle must belong to the courier location associated with the selected agreement. The selected retailer driver and vehicle must belong to the requesting retailer organization and location.

Endpoint-Specific Errors

In addition to the common errors, this call may return:

Error codeMessageDescription
DELIVERY_OPTIONS_FAILEDUnable to process request. Organization not found.The trusted organization context could not be resolved.
DELIVERY_OPTIONS_FAILEDUnable to process request. Location not found.The location was not found, was inactive, or was deleted.
DELIVERY_OPTIONS_FAILEDUnable to retrieve retail dispense delivery options.The operation failed without a more specific error message.

An unexpected database or processing error may also return DELIVERY_OPTIONS_FAILED with a more specific message describing the failure.




GET/v1/dispenses/{medicalCannabisCardId}/validateValidate a medical dispense↑ Back to top

Validates a medical cannabis card and retrieves card details before a dispense.

Try it out

Request URL

Server response

Medical Card Lookup: Successful Patient Response

{
    "status": "ok",
    "message": "",
    "data": {
        "medicalCannabisCardId": "4UX58G5R4G",
        "cardType": "Patient",
        "patient": {
            "applicationId": "4UX58G5R4G"
        },
        "caregiver": null,
        "units": {
            "limit": 425,
            "usedLast90Days": 250,
            "remaining": 175
        }
    }
}

Successful Caregiver Response

When the submitted card belongs to a caregiver, the response identifies the card as a caregiver card and returns both the patient and caregiver information.

{
    "status": "ok",
    "message": "",
    "data": {
        "medicalCannabisCardId": "6L9YE6W8J7",
        "cardType": "Caregiver",
        "patient": {
            "applicationId": "6L9YE6W8J7"
        },
        "caregiver": {
            "expirationDate": "2027-01-10T00:00:00.000Z"
        },
        "units": {
            "limit": 425,
            "usedLast90Days": 250,
            "remaining": 175
        }
    }
}

Card Fields

FieldTypeDescription
medicalCannabisCardIdstringCard ID submitted with the lookup request.
cardTypestringIndicates whether the submitted card belongs to a Patient or Caregiver.
patientobjectPatient information associated with the card.
caregiverobject or nullCaregiver information when the submitted card is a caregiver card. Otherwise null.
unitsobjectCurrent Medical-unit information for the patient.

Patient Fields

FieldTypeDescription
applicationIdstringPatient application ID.

Caregiver Fields

FieldTypeDescription
expirationDatedate/time or nullCaregiver card expiration date.

The caregiver object is returned only when cardType is Caregiver.

Unit Fields

FieldTypeDescription
limitnumberMaximum Medical units allowed during the applicable 90-day period.
usedLast90DaysnumberMedical units recorded as used by the patient during the previous 90 days.
remainingnumberMedical units currently available to the patient.

The remaining amount is calculated as remaining = limit - usedLast90Days. The returned remaining amount will not be less than zero.

Medical Unit Calculation

The Department of Health lookup identifies the patient associated with the submitted card. The internal application then calculates Medical units already used by finding completed Medical dispenses for that patient during the previous 90 days. Voided dispenses are not counted because only orders with a current status of Complete are included. The unit values represent the information available when the lookup is processed. They may change if another Medical dispense is completed before the current order is submitted.

Use in the Dispense Workflow

The POS should use this endpoint before submitting a Medical dispense to:

  1. Confirm that the submitted card can be located.
  2. Confirm the patient associated with the card.
  3. Identify whether the submitted card is a patient or caregiver card.
  4. Display the applicable expiration information.
  5. Retrieve the patient's currently remaining Medical units.
  6. Perform preliminary validation of the proposed order.

The POS must send the original card ID with the subsequent dispense request:

{
    "customerType": "medical",
    "medicalCannabisCardId": "4UX58G5R4G"
}

The POS should not send patient names, caregiver names, Medical-unit totals, or internal patient identifiers back with the dispense request.

Preliminary Versus Authoritative Validation

The medical-card lookup is preliminary and informational. It does not:

When a Medical dispense is submitted, the internal application performs the Department of Health lookup again and recalculates the patient's available units. The dispense operation is authoritative. A dispense may therefore be rejected even if an earlier card lookup succeeded. For example:

The POS must handle a checkout rejection and display the returned error to the user.

Card Expiration

The response includes the patient and caregiver expiration dates returned by the Department of Health service. The current internal implementation returns this information to the caller but does not independently reject the card solely by comparing the returned expiration date with the current date. The POS may display the expiration date, but it should rely on the success or failure returned by the Department of Health lookup and the subsequent authoritative dispense validation.

Data Not Returned

The internal Department of Health lookup obtains additional information that is intentionally not returned through the POS endpoint. The POS response does not expose:

These values are not required for POS validation or checkout.

License Requirement

The authorized POS location must have an active, non-expired Retail or Consumption license, or valid temporary access for one of those activities. The inventory-case restriction check is not performed for this endpoint because no inventory item is being selected or modified.

Endpoint-Specific Errors

Missing or Invalid Card ID:

{
    "status": "error",
    "errorCode": "INVALID_MEDICAL_CANNABIS_CARD_ID",
    "message": "A valid Medical Cannabis Card ID is required.",
    "data": null
}

This error is returned when the card ID:

Card ID Too Long:

{
    "status": "error",
    "errorCode": "INVALID_MEDICAL_CANNABIS_CARD_ID",
    "message": "Medical Cannabis Card ID cannot exceed 100 characters.",
    "data": null
}

Card Not Found:

{
    "status": "error",
    "errorCode": "MEDICAL_CARD_LOOKUP_FAILED",
    "message": "Unable to process request. Medical Cannabis Card ID not found.",
    "data": null
}

Department of Health Authorization Failure:

{
    "status": "error",
    "errorCode": "MEDICAL_CARD_LOOKUP_FAILED",
    "message": "Unable to process request. DOH API authorization failed.",
    "data": null
}

Department of Health Timeout:

{
    "status": "error",
    "errorCode": "MEDICAL_CARD_LOOKUP_FAILED",
    "message": "Unable to process request. DOH API request timed out.",
    "data": null
}

Required Location License Not Available:

{
    "status": "error",
    "errorCode": "ACTIVE_LOCATION_LICENSE_REQUIRED",
    "message": "Unable to process request. This location does not have an active, non-expired license or valid temporary access for this activity.",
    "data": null
}

General Lookup Failure:

{
    "status": "error",
    "errorCode": "MEDICAL_CARD_LOOKUP_FAILED",
    "message": "Unable to look up Medical Cannabis Card.",
    "data": null
}



GET/v1/dispenses/{retailDispenseTicketId}Retrieve by ticket ID↑ Back to top

Retrieves a retail dispense order using its ticket identifier generated after checkout.

Try it out

Request URL

Server response

GET/v1/dispenses/{orderNumber}Retrieve by order number↑ Back to top

Retrieves a retail dispense order using the order number from the retail dispense ticket ID call.

Try it out

Request URL

Server response

GET/v1/dispenses/{dispenseInternalRequestId}Retrieve by internal request ID↑ Back to top

Retrieves a retail dispense order using the internal request identifier generated during checkout.

Try it out

Request URL

Server response

Order Lookup: Successful Response

{
    "status": "ok",
    "message": "",
    "data": {
        "retailDispenseTicketId": 4217,
        "orderNumber": "1234567890123456",
        "orderSource": "api",
        "dispenseInternalRequestId": "7693ae51-135b-4755-a15e-f7aac21bc33a",
        "roomType": "retail",
        "ticketStatus": "Complete",
        "createdDateTime": "2026-07-25T15:42:31",
        "dispenseDateTime": "2026-07-25T15:42:41",
        "customerType": "adult-use",
        "dispenseType": "in-store",
        "deliveryFulfillmentType": null,
        "deliveryAddress": null,
        "travelRoute": null,
        "totalItems": 2,
        "totalDollarAmount": 40.00,
        "totalTaxAmount": 3.20,
        "grandTotalAmount": 43.20,
        "voidedDateTime": null,
        "voidReason": null,
        "items": [
            {
                "inventoryId": 1789,
                "barCode": "9876543210987654",
                "productType": "Cannabis Flower Packaged",
                "productName": "Blue Dream 3.5g",
                "strainName": "Blue Dream",
                "quantity": 2,
                "unit": "pkg",
                "dollarAmount": 30.00,
                "taxAmount": 2.40,
                "lineTotalAmount": 32.40
            },
            {
                "inventoryId": 1790,
                "barCode": "4567890123456789",
                "productType": "Cannabis Edible Packaged",
                "productName": "Fruit Chews",
                "strainName": null,
                "quantity": 1,
                "unit": "pkg",
                "dollarAmount": 10.00,
                "taxAmount": 0.80,
                "lineTotalAmount": 10.80
            }
        ]
    }
}

Order Header Fields

FieldTypeDescription
retailDispenseTicketIdnumberInternal retail dispense ticket identifier.
orderNumberstringRetail dispense order number/barcode.
orderSourcestringIndicates whether the order originated from the web application or the POS api.
dispenseInternalRequestIdstring or nullOriginal POS dispense request ID. This is null for orders created through the web application.
roomTypestring or nullOriginal dispense room type: retail or consumption.
ticketStatusstringCurrent order status, such as Complete or Voided.
createdDateTimedate/timeDate and time the order was created.
dispenseDateTimedate/timeDate and time the order was dispensed.
customerTypestringCustomer type: adult-use or medical.
dispenseTypestringDispense type: in-store or delivery.
deliveryFulfillmentTypestring or nullDelivery fulfillment type when applicable: retailer or courier.
deliveryAddressstring or nullDelivery address when the order is a delivery.
travelRoutestring or nullRecorded delivery route when the order is a delivery.
totalItemsnumberNumber of distinct inventory lines on the order.
totalDollarAmountnumberOrder subtotal before tax.
totalTaxAmountnumberTotal tax recorded for the order.
grandTotalAmountnumberSum of totalDollarAmount and totalTaxAmount.
voidedDateTimedate/time or nullDate and time the order was voided.
voidReasonstring or nullReason recorded when the order was voided.
itemsarrayIndividual inventory items recorded on the order.

Order Item Fields

FieldTypeDescription
inventoryIdnumberInternal identifier of the inventory item dispensed.
barCodestringCompliance barcode of the inventory item.
productTypestringProduct type recorded at the time of the dispense.
productNamestring or nullProduct name recorded at the time of the dispense.
strainNamestring or nullStrain recorded at the time of the dispense.
quantitynumberQuantity dispensed.
unitstringUnit used for the dispense, such as pkg, g, or mL.
dollarAmountnumberPre-tax dollar amount recorded for the line.
taxAmountnumberTax amount recorded for the line.
lineTotalAmountnumberSum of the line's dollar amount and tax amount.

Web and API Orders

Orders created through either the web application or POS API may be retrieved. For a web-created order:

{
    "orderSource": "web",
    "dispenseInternalRequestId": null
}

For a POS API-created order:

{
    "orderSource": "api",
    "dispenseInternalRequestId": "7693ae51-135b-4755-a15e-f7aac21bc33a"
}

A web-created order may be viewed through this endpoint, but it cannot be voided through the POS API. It must be voided through the web application. Only orders originally created through the POS API may be voided through the POS void endpoint.

Location Restrictions

The endpoint only returns orders belonging to the organization and location associated with the authorized POS location token. An order belonging to another organization or location is returned as not found. A currently active Retail or Consumption license is not required for this historical lookup. The POS may still retrieve an earlier order after the location's license status has changed.

Endpoint-Specific Errors

No Identifier or Multiple Identifiers:

{
    "status": "error",
    "errorCode": "INVALID_ORDER_LOOKUP_IDENTIFIER",
    "message": "Provide exactly one of Retail Dispense Ticket ID, Order Number, or Dispense Internal Request ID.",
    "data": null
}

Invalid Retail Dispense Ticket ID:

{
    "status": "error",
    "errorCode": "INVALID_RETAIL_DISPENSE_TICKET_ID",
    "message": "A valid Retail Dispense Ticket ID is required.",
    "data": null
}

Invalid Order Number:

{
    "status": "error",
    "errorCode": "INVALID_ORDER_NUMBER",
    "message": "Order Number must be provided as a string.",
    "data": null
}

An order number exceeding the supported maximum length also returns INVALID_ORDER_NUMBER.

Invalid Dispense Internal Request ID:

{
    "status": "error",
    "errorCode": "INVALID_DISPENSE_INTERNAL_REQUEST_ID",
    "message": "A valid Dispense Internal Request ID is required.",
    "data": null
}

Order Not Found:

{
    "status": "error",
    "errorCode": "RETAIL_DISPENSE_ORDER_NOT_FOUND",
    "message": "Unable to process request. Order not found.",
    "data": null
}

General Lookup Failure:

{
    "status": "error",
    "errorCode": "RETAIL_DISPENSE_ORDER_LOOKUP_FAILED",
    "message": "Unable to retrieve retail dispense order.",
    "data": null
}