---
title: ARC0029 - Non-public static method is not exposed as a query
editUrl: https://github.com/Cratis/Arc/edit/main/Documentation/backend/csharp/code-analysis/ARC0029.md
description: Understand why a non-public read-model method has no query endpoint or TypeScript proxy.
lastUpdated: 2026-10-17T00:00:00.000Z
---


<!-- Copyright (c) Cratis. All rights reserved. -->
<!-- Licensed under the MIT license. See LICENSE file in the project root for full license information. -->

## Why the warning appears

Arc exposes only **public static** query methods on `[ReadModel]` types. Internal, private, protected, protected internal, and private protected methods are not endpoints and have no generated query proxy, even with `[Query]`. A public static method on an internal read-model type can still be a query.

ARC0029 is a warning on non-public static methods that return the declaring read model or a supported query wrapper, or carry `[Query]`. It also applies in `RequireQueryAttribute = true` mode. Ordinary helpers returning unrelated values, such as `string` or plain `Task`, do not trigger it unless marked `[Query]`.

Earlier versions allowed internal query methods. Removing that exposure prevents a non-public helper from becoming callable over HTTP because of its return shape. Direct C# calls are unchanged.

## Decide whether the method is an endpoint

If this method is an intended query, make it public and review its authorization and request parameters before exposing it. Keep its `[Query]` marker when the read model requires explicit query selection.

If it is a helper, keep it non-public. Remove any `[Query]` marker; a non-public marked method also causes [ARC0026](/arc/backend/csharp/code-analysis/arc0026/). You may suppress ARC0029 locally for an intentional query-shaped helper after confirming it should not be exposed. Suppressing the warning never exposes the method.

See [static query method requirements](/arc/backend/csharp/queries/model-bound/static-methods/).
