diff --git a/packages/toolkit/src/query/baseQueryTypes.ts b/packages/toolkit/src/query/baseQueryTypes.ts
--- a/packages/toolkit/src/query/baseQueryTypes.ts
+++ b/packages/toolkit/src/query/baseQueryTypes.ts
@@ -54,7 +54,8 @@ export type BaseQueryEnhancer<
   BaseQueryArg<BaseQuery> & AdditionalArgs,
   BaseQueryResult<BaseQuery>,
   BaseQueryError<BaseQuery>,
-  BaseQueryExtraOptions<BaseQuery> & AdditionalDefinitionExtraOptions
+  BaseQueryExtraOptions<BaseQuery> & AdditionalDefinitionExtraOptions,
+  NonNullable<BaseQueryMeta<BaseQuery>>
 >
 
 export type BaseQueryResult<BaseQuery extends BaseQueryFn> = UnwrapPromise<

diff --git a/packages/toolkit/src/query/tests/baseQueryTypes.typetest.ts b/packages/toolkit/src/query/tests/baseQueryTypes.typetest.ts
new file mode 100644
--- /dev/null
+++ b/packages/toolkit/src/query/tests/baseQueryTypes.typetest.ts
@@ -0,0 +1,33 @@
+import { createApi, fetchBaseQuery, retry } from '@reduxjs/toolkit/query'
+
+/**
+ * Test: BaseQuery meta types propagate to endpoint callbacks
+ */
+{
+  createApi({
+    baseQuery: fetchBaseQuery(),
+    endpoints: (build) => ({
+      getDummy: build.query<null, undefined>({
+        query: () => 'dummy',
+        onCacheEntryAdded: async (arg, { cacheDataLoaded }) => {
+          const { meta } = await cacheDataLoaded
+          const { request, response } = meta! // Expect request and response to be there
+        },
+      }),
+    }),
+  })
+
+  const baseQuery = retry(fetchBaseQuery()) // Even when wrapped with retry
+  createApi({
+    baseQuery,
+    endpoints: (build) => ({
+      getDummy: build.query<null, undefined>({
+        query: () => 'dummy',
+        onCacheEntryAdded: async (arg, { cacheDataLoaded }) => {
+          const { meta } = await cacheDataLoaded
+          const { request, response } = meta! // Expect request and response to be there
+        },
+      }),
+    }),
+  })
+}

BaseQuery meta types stripped when using retry()
When I wrap the base query into `retry()`, the resulting api is unaware of the meta types.

