diff --git a/modules/order/src/AvailabilityResult.php b/modules/order/src/AvailabilityResult.php
index 046f9840..c59c5ef7 100644
--- a/modules/order/src/AvailabilityResult.php
+++ b/modules/order/src/AvailabilityResult.php
@@ -19,23 +19,33 @@ final class AvailabilityResult {
   /**
    * The availability result "reason".
    *
-   * @var string|null
+   * @var mixed|null
    */
   protected $reason;
 
+  /**
+   * The availability result "code".
+   *
+   * @var mixed|null
+   */
+  protected $code;
+
   /**
    * Constructs a new AvailabilityResult object.
    *
    * @param bool $result
    *   The availability result, FALSE when unavailable.
-   * @param string $reason
+   * @param mixed|null $reason
    *   (optional) The reason why an order item is unavailable.
+   * @param mixed|null $code
+   *   (optional) The "code" explaining why an order item is unavailable.
    */
-  public function __construct($result, $reason = NULL) {
-    assert(is_bool($result));
+  public function __construct(bool $result, $reason = NULL, $code = NULL) {
     assert(is_string($reason) || is_null($reason) || $reason instanceof MarkupInterface);
+    assert(is_string($code) || is_null($code) || $code instanceof MarkupInterface);
     $this->result = $result;
     $this->reason = $reason;
+    $this->code = $code;
   }
 
   /**
@@ -50,19 +60,31 @@ final class AvailabilityResult {
   /**
    * Creates an availability result that is "unavailable".
    *
-   * @param string $reason
+   * @param mixed|null $reason
    *   (optional) The reason why an order item is unavailable.
+   * @param mixed|null $code
+   *   (optional) The "code" explaining why an order item is unavailable.
    *
    * @return static
    */
-  public static function unavailable($reason = NULL) : AvailabilityResult {
-    return new static(FALSE, $reason);
+  public static function unavailable($reason = NULL, $code = NULL) : AvailabilityResult {
+    return new static(FALSE, $reason, $code);
+  }
+
+  /**
+   * Gets the "code".
+   *
+   * @return mixed|null
+   *   The "code" for this availability result, NULL when not provided.
+   */
+  public function getCode() {
+    return $this->code;
   }
 
   /**
    * Gets the "reason".
    *
-   * @return string|null
+   * @return mixed|null
    *   The "reason" for this availability result, NULL when not provided.
    */
   public function getReason() {
diff --git a/modules/order/src/Plugin/Validation/Constraint/PurchasedEntityAvailableConstraintValidator.php b/modules/order/src/Plugin/Validation/Constraint/PurchasedEntityAvailableConstraintValidator.php
index af3b2af4..c783a141 100644
--- a/modules/order/src/Plugin/Validation/Constraint/PurchasedEntityAvailableConstraintValidator.php
+++ b/modules/order/src/Plugin/Validation/Constraint/PurchasedEntityAvailableConstraintValidator.php
@@ -111,6 +111,7 @@ class PurchasedEntityAvailableConstraintValidator extends ConstraintValidator im
       if (!empty($availability_result->getReason())) {
         $this->context
           ->buildViolation($availability_result->getReason())
+          ->setCode($availability_result->getCode())
           ->addViolation();
       }
       else {
