diff --git a/vendor/magento/module-graph-ql/Controller/GraphQl.php b/vendor/magento/module-graph-ql/Controller/GraphQl.php
index f3536b9683d4e..853d42cf3f453 100644
--- a/vendor/magento/module-graph-ql/Controller/GraphQl.php
+++ b/vendor/magento/module-graph-ql/Controller/GraphQl.php
@@ -9,6 +9,8 @@
 
 namespace Magento\GraphQl\Controller;
 
+use Exception;
+use GraphQL\Error\FormattedError;
 use GraphQL\Error\SyntaxError;
 use GraphQL\Language\Source;
 use Magento\Framework\App\Area;
@@ -21,7 +23,10 @@
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\Controller\Result\JsonFactory;
 use Magento\Framework\GraphQl\Exception\ExceptionFormatter;
+use Magento\Framework\GraphQl\Exception\GraphQlAuthenticationException;
+use Magento\Framework\GraphQl\Exception\GraphQlAuthorizationException;
 use Magento\Framework\GraphQl\Exception\GraphQlInputException;
+use Magento\Framework\GraphQl\Exception\InvalidRequestInterface;
 use Magento\Framework\GraphQl\Query\Fields as QueryFields;
 use Magento\Framework\GraphQl\Query\QueryParser;
 use Magento\Framework\GraphQl\Query\QueryProcessor;
@@ -224,10 +229,8 @@ public function dispatch(RequestInterface $request): ResponseInterface
                 $this->contextFactory->create(),
                 $data['variables'] ?? []
             );
-        } catch (\Exception $error) {
-            $result['errors'] = isset($result['errors']) ? $result['errors'] : [];
-            $result['errors'][] = $this->graphQlError->create($error);
-            $statusCode = ExceptionFormatter::HTTP_GRAPH_QL_SCHEMA_ERROR_STATUS;
+        } catch (Exception $error) {
+            [$result, $statusCode] = $this->handleGraphQlException($error);
         }
 
         $jsonResult->setHttpResponseCode($statusCode);
@@ -243,6 +246,26 @@ public function dispatch(RequestInterface $request): ResponseInterface
         return $this->httpResponse;
     }
 
+    /**
+     * Handle GraphQL Exceptions
+     *
+     * @param Exception $e
+     * @return array
+     */
+    private function handleGraphQlException(Exception $e): array
+    {
+        [$error, $statusCode] = match (true) {
+            $e instanceof InvalidRequestInterface => [FormattedError::createFromException($e), $e->getStatusCode()],
+            $e instanceof SyntaxError => [FormattedError::createFromException($e), 400],
+            $e instanceof GraphQlAuthenticationException => [$this->graphQlError->create($e), 401],
+            $e instanceof GraphQlAuthorizationException => [$this->graphQlError->create($e), 403],
+            $e instanceof GraphQlInputException => [FormattedError::createFromException($e), 200],
+            default => [$this->graphQlError->create($e), ExceptionFormatter::HTTP_GRAPH_QL_SCHEMA_ERROR_STATUS],
+        };
+
+        return [['errors' => [$error]], $statusCode];
+    }
+
     /**
      * Get data from request body or query string
      *
@@ -267,10 +290,14 @@ private function getDataFromRequest(RequestInterface $request): array
             }
         } elseif ($request->isGet()) {
             $data = $request->getParams();
-            $data['variables'] = isset($data['variables']) ?
-                $this->jsonSerializer->unserialize($data['variables']) : null;
-            $data['variables'] = is_array($data['variables']) ?
-                $data['variables'] : null;
+            try {
+                $data['variables'] = !empty($data['variables']) && is_string($data['variables'])
+                    ? $this->jsonSerializer->unserialize($data['variables'])
+                    : null;
+            } catch (\InvalidArgumentException) {
+                $source = new Source($data['variables']);
+                throw new SyntaxError($source, 0, 'Unable to parse the variables.');
+            }
         } else {
             return [];
         }
diff --git a/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/ContentTypeValidator.php b/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/ContentTypeValidator.php
index 555048aac6771..a8e6a8478f4ce 100644
--- a/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/ContentTypeValidator.php
+++ b/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/ContentTypeValidator.php
@@ -1,14 +1,15 @@
 <?php
 /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+ * Copyright 2019 Adobe
+ * All Rights Reserved.
  */
 declare(strict_types=1);
 
 namespace Magento\GraphQl\Controller\HttpRequestValidator;
 
 use Magento\Framework\App\HttpRequestInterface;
-use Magento\Framework\GraphQl\Exception\GraphQlInputException;
+use Magento\Framework\GraphQl\Exception\UnsupportedMediaTypeException;
+use Magento\Framework\Phrase;
 use Magento\GraphQl\Controller\HttpRequestValidatorInterface;
 
 /**
@@ -21,7 +22,7 @@ class ContentTypeValidator implements HttpRequestValidatorInterface
      *
      * @param HttpRequestInterface $request
      * @return void
-     * @throws GraphQlInputException
+     * @throws UnsupportedMediaTypeException
      */
     public function validate(HttpRequestInterface $request) : void
     {
@@ -32,8 +33,8 @@ public function validate(HttpRequestInterface $request) : void
         if ($request->isPost()
             && strpos($headerValue, $requiredHeaderValue) === false
         ) {
-            throw new GraphQlInputException(
-                new \Magento\Framework\Phrase('Request content type must be application/json')
+            throw new UnsupportedMediaTypeException(
+                new Phrase('Request content type must be application/json')
             );
         }
     }
diff --git a/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/HttpVerbValidator.php b/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/HttpVerbValidator.php
index 56351c7711cec..ff4cb247175f9 100644
--- a/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/HttpVerbValidator.php
+++ b/vendor/magento/module-graph-ql/Controller/HttpRequestValidator/HttpVerbValidator.php
@@ -1,7 +1,7 @@
 <?php
 /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+ * Copyright 2019 Adobe
+ * All Rights Reserved.
  */
 declare(strict_types=1);
 
@@ -13,7 +13,7 @@
 use Magento\Framework\App\HttpRequestInterface;
 use Magento\Framework\App\ObjectManager;
 use Magento\Framework\App\Request\Http;
-use Magento\Framework\GraphQl\Exception\GraphQlInputException;
+use Magento\Framework\GraphQl\Exception\MethodNotAllowedException;
 use Magento\Framework\GraphQl\Query\QueryParser;
 use Magento\Framework\Phrase;
 use Magento\GraphQl\Controller\HttpRequestValidatorInterface;
@@ -41,7 +41,7 @@ public function __construct(QueryParser $queryParser = null)
      *
      * @param HttpRequestInterface $request
      * @return void
-     * @throws GraphQlInputException
+     * @throws MethodNotAllowedException
      */
     public function validate(HttpRequestInterface $request): void
     {
@@ -63,7 +63,7 @@ public function validate(HttpRequestInterface $request): void
                 );
 
                 if ($operationType !== null && strtolower($operationType) === 'mutation') {
-                    throw new GraphQlInputException(
+                    throw new MethodNotAllowedException(
                         new Phrase('Mutation requests allowed only for POST requests')
                     );
                 }
diff --git a/vendor/magento/theme-frontend-blank/i18n/en_US.csv b/vendor/magento/theme-frontend-blank/i18n/en_US.csv
index 48f33bd2af411..f4c7b3e3f3fa2 100644
--- a/vendor/magento/theme-frontend-blank/i18n/en_US.csv
+++ b/vendor/magento/theme-frontend-blank/i18n/en_US.csv
@@ -442,3 +442,4 @@ Test,Test
 test,test
 Two,Two
 "Invalid data type","Invalid data type"
+"Unknown type ""%1"".","Unknown type ""%1""."
diff --git a/vendor/magento/theme-frontend-luma/i18n/en_US.csv b/vendor/magento/theme-frontend-luma/i18n/en_US.csv
index 09de2264af4f6..22d3d38d08f3b 100644
--- a/vendor/magento/theme-frontend-luma/i18n/en_US.csv
+++ b/vendor/magento/theme-frontend-luma/i18n/en_US.csv
@@ -492,3 +492,4 @@ Test,Test
 test,test
 Two,Two
 "Invalid data type","Invalid data type"
+"Unknown type ""%1"".","Unknown type ""%1""."
diff --git a/vendor/magento/framework/GraphQl/Exception/InvalidRequestInterface.php b/vendor/magento/framework/GraphQl/Exception/InvalidRequestInterface.php
new file mode 100644
index 0000000000000..4a6d16f32ee71
--- /dev/null
+++ b/vendor/magento/framework/GraphQl/Exception/InvalidRequestInterface.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Copyright 2025 Adobe
+ * All Rights Reserved.
+ */
+declare(strict_types=1);
+
+namespace Magento\Framework\GraphQl\Exception;
+
+use Throwable;
+
+/**
+ * Interface for providing response status code when invalid GraphQL request is detected.
+ */
+interface InvalidRequestInterface extends Throwable
+{
+    /**
+     * HTTP status code to be returned with the response.
+     *
+     * @return int
+     */
+    public function getStatusCode(): int;
+}
diff --git a/vendor/magento/framework/GraphQl/Exception/MethodNotAllowedException.php b/vendor/magento/framework/GraphQl/Exception/MethodNotAllowedException.php
new file mode 100644
index 0000000000000..5c7f279e6836c
--- /dev/null
+++ b/vendor/magento/framework/GraphQl/Exception/MethodNotAllowedException.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright 2025 Adobe
+ * All Rights Reserved.
+ */
+declare(strict_types=1);
+
+namespace Magento\Framework\GraphQl\Exception;
+
+use GraphQL\Error\ClientAware;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Phrase;
+
+class MethodNotAllowedException extends LocalizedException implements InvalidRequestInterface, ClientAware
+{
+    /**
+     * @param Phrase $phrase
+     * @param \Exception|null $cause
+     * @param int $code
+     * @param bool $isSafe
+     */
+    public function __construct(
+        Phrase $phrase,
+        ?\Exception $cause = null,
+        int $code = 0,
+        private readonly bool $isSafe = true,
+    ) {
+        parent::__construct($phrase, $cause, $code);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getStatusCode(): int
+    {
+        return 405;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function isClientSafe(): bool
+    {
+        return $this->isSafe;
+    }
+}
diff --git a/vendor/magento/framework/GraphQl/Exception/UnsupportedMediaTypeException.php b/vendor/magento/framework/GraphQl/Exception/UnsupportedMediaTypeException.php
new file mode 100644
index 0000000000000..6be650a3eb01b
--- /dev/null
+++ b/vendor/magento/framework/GraphQl/Exception/UnsupportedMediaTypeException.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright 2025 Adobe
+ * All Rights Reserved.
+ */
+declare(strict_types=1);
+
+namespace Magento\Framework\GraphQl\Exception;
+
+use GraphQL\Error\ClientAware;
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\Phrase;
+
+class UnsupportedMediaTypeException extends LocalizedException implements InvalidRequestInterface, ClientAware
+{
+    /**
+     * @param Phrase $phrase
+     * @param \Exception|null $cause
+     * @param int $code
+     * @param bool $isSafe
+     */
+    public function __construct(
+        Phrase $phrase,
+        ?\Exception $cause = null,
+        int $code = 0,
+        private readonly bool $isSafe = true,
+    ) {
+        parent::__construct($phrase, $cause, $code);
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function getStatusCode(): int
+    {
+        return 415;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function isClientSafe(): bool
+    {
+        return $this->isSafe;
+    }
+}
diff --git a/vendor/magento/framework/GraphQl/Schema/SchemaGenerator.php b/vendor/magento/framework/GraphQl/Schema/SchemaGenerator.php
index 250b80defa6dd..2a81b5d32ced2 100644
--- a/vendor/magento/framework/GraphQl/Schema/SchemaGenerator.php
+++ b/vendor/magento/framework/GraphQl/Schema/SchemaGenerator.php
@@ -1,13 +1,14 @@
 <?php
 /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+ * Copyright 2018 Adobe
+ * All Rights Reserved.
  */
 declare(strict_types=1);
 
 namespace Magento\Framework\GraphQl\Schema;
 
 use Magento\Framework\GraphQl\ConfigInterface;
+use Magento\Framework\GraphQl\Exception\GraphQlInputException;
 use Magento\Framework\GraphQl\Schema;
 use Magento\Framework\GraphQl\Schema\Type\TypeRegistry;
 use Magento\Framework\GraphQl\SchemaFactory;
@@ -57,7 +58,11 @@ public function generate() : Schema
                 'query' => $this->typeRegistry->get('Query'),
                 'mutation' => $this->typeRegistry->get('Mutation'),
                 'typeLoader' => function ($name) {
-                    return $this->typeRegistry->get($name);
+                    try {
+                        return $this->typeRegistry->get($name);
+                    } catch (GraphQlInputException) {
+                        return null;
+                    }
                 },
                 'types' => function () {
                     $typesImplementors = [];
diff --git a/vendor/magento/framework/GraphQl/Schema/Type/TypeRegistry.php b/vendor/magento/framework/GraphQl/Schema/Type/TypeRegistry.php
index 414e1eebe6531..1b8cb47e4048d 100644
--- a/vendor/magento/framework/GraphQl/Schema/Type/TypeRegistry.php
+++ b/vendor/magento/framework/GraphQl/Schema/Type/TypeRegistry.php
@@ -1,12 +1,13 @@
 <?php
 /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
+ * Copyright 2019 Adobe
+ * All Rights Reserved.
  */
 declare(strict_types=1);
 
 namespace Magento\Framework\GraphQl\Schema\Type;
 
+use LogicException;
 use Magento\Framework\GraphQl\ConfigInterface;
 use Magento\Framework\GraphQl\Exception\GraphQlInputException;
 use Magento\Framework\GraphQl\Schema\TypeInterface;
@@ -66,7 +67,13 @@ public function __construct(
     public function get(string $typeName): TypeInterface
     {
         if (!isset($this->types[$typeName])) {
-            $configElement = $this->config->getConfigElement($typeName);
+            try {
+                $configElement = $this->config->getConfigElement($typeName);
+            } catch (LogicException) {
+                throw new GraphQlInputException(
+                    new Phrase('Unknown type "%1".', [$typeName])
+                );
+            }
 
             $configElementClass = get_class($configElement);
             if (!isset($this->configToTypeMap[$configElementClass])) {
