diff --git a/globus_sdk/auth/client_types/native_client.py b/globus_sdk/auth/client_types/native_client.py
index 0f8da1d3..e2ab435e 100644
--- a/globus_sdk/auth/client_types/native_client.py
+++ b/globus_sdk/auth/client_types/native_client.py
@@ -46,7 +46,8 @@ class NativeAppAuthClient(AuthClient):
 
     def oauth2_start_flow(
             self, requested_scopes=None, redirect_uri=None,
-            state='_default', verifier=None, refresh_tokens=False):
+            state='_default', verifier=None, refresh_tokens=False,
+            prefill_named_grant=None):
         """
         Starts a Native App OAuth2 flow by instantiating a
         :class:`GlobusNativeAppFlowManager
@@ -61,7 +62,8 @@ class NativeAppAuthClient(AuthClient):
         self.current_oauth2_flow_manager = GlobusNativeAppFlowManager(
             self, requested_scopes=requested_scopes,
             redirect_uri=redirect_uri, state=state, verifier=verifier,
-            refresh_tokens=refresh_tokens)
+            refresh_tokens=refresh_tokens,
+            prefill_named_grant=prefill_named_grant)
         return self.current_oauth2_flow_manager
 
     def oauth2_refresh_token(self, refresh_token):
diff --git a/globus_sdk/auth/oauth2_native_app.py b/globus_sdk/auth/oauth2_native_app.py
index b53f77a7..daa8f4d7 100644
--- a/globus_sdk/auth/oauth2_native_app.py
+++ b/globus_sdk/auth/oauth2_native_app.py
@@ -77,11 +77,14 @@ class GlobusNativeAppFlowManager(GlobusOAuthFlowManager):
 
         ``refresh_tokens`` (*bool*)
           When True, request refresh tokens in addition to access tokens
+
+          ``prefill_named_grant`` (*string*)
+          Optionally prefill the named grant label on the consent page
     """
 
     def __init__(self, auth_client, requested_scopes=None,
                  redirect_uri=None, state='_default', verifier=None,
-                 refresh_tokens=False):
+                 refresh_tokens=False, prefill_named_grant=None):
         self.auth_client = auth_client
 
         # set client_id, then check for validity
@@ -109,6 +112,7 @@ class GlobusNativeAppFlowManager(GlobusOAuthFlowManager):
         # store the remaining parameters directly, with no transformation
         self.refresh_tokens = refresh_tokens
         self.state = state
+        self.prefill_named_grant = prefill_named_grant
 
         logger.debug('Starting Native App Flow with params:')
         logger.debug('auth_client.client_id={}'.format(auth_client.client_id))
@@ -118,6 +122,10 @@ class GlobusNativeAppFlowManager(GlobusOAuthFlowManager):
         logger.debug('requested_scopes={}'.format(self.requested_scopes))
         logger.debug('verifier=<REDACTED>,challenge={}'.format(self.challenge))
 
+        if prefill_named_grant is not None:
+            logger.debug('prefill_named_grant={}'.format(
+                self.prefill_named_grant))
+
     def get_authorize_url(self, additional_params=None):
         """
         Start a Native App flow by getting the authorization URL to which users
@@ -153,6 +161,8 @@ class GlobusNativeAppFlowManager(GlobusOAuthFlowManager):
             'code_challenge_method': 'S256',
             'access_type': (self.refresh_tokens and 'offline') or 'online'
         }
+        if self.prefill_named_grant is not None:
+            params['prefill_named_grant'] = self.prefill_named_grant
         if additional_params:
             params.update(additional_params)
 

Add `prefill_named_grant` support to NativeApp grant flow
Per globus/globus-cli#176 , there's an option to prefill the named grant label, `prefill_named_grant`. It's probably a string.

We need to support this so that the CLI and similar applications can use it.

Not considering this blocked on documentation.
diff --git a/tests/unit/test_oauth2_native_app.py b/tests/unit/test_oauth2_native_app.py
index 1403795d..0826a81f 100644
--- a/tests/unit/test_oauth2_native_app.py
+++ b/tests/unit/test_oauth2_native_app.py
@@ -81,6 +81,27 @@ class GlobusNativeAppFlowManagerTests(CapturedIOTestCase):
         for param, value in params.items():
             self.assertIn(param + "=" + value, param_url)
 
+    def test_prefill_named_grant(self):
+        """
+        Should add the `prefill_named_grant` query string parameter
+        to the authorize url.
+        """
+        flow_with_prefill = globus_sdk.auth.GlobusNativeAppFlowManager(
+            self.ac, requested_scopes="scopes", redirect_uri="uri",
+            state="state", verifier="verifier", prefill_named_grant="test")
+
+        authorize_url = flow_with_prefill.get_authorize_url()
+
+        self.assertIn('prefill_named_grant=test', authorize_url)
+
+        flow_without_prefill = globus_sdk.auth.GlobusNativeAppFlowManager(
+            self.ac, requested_scopes="scopes", redirect_uri="uri",
+            state="state", verifier="verifier")
+
+        authorize_url = flow_without_prefill.get_authorize_url()
+
+        self.assertNotIn('prefill_named_grant=', authorize_url)
+
     def test_exchange_code_for_tokens(self):
         """
         Makes a token exchange with the mock AuthClient,

pip install -e .
parse_log_pytest
pytest
nose2 flake8 mock pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
charset-normalizer==2.0.12
flake8==5.0.4
-e git+https://github.com/globus/globus-sdk-python.git@35e55d84064d5a5ca7589c9d326c0abf5b153f69#egg=globus_sdk
idna==3.10
importlib-metadata==4.2.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
mccabe==0.7.0
mock==5.2.0
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
nose2==0.13.0
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pycodestyle==2.9.1
pyflakes==2.5.0
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
requests==2.27.1
six==1.10.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: globus-sdk-python
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - charset-normalizer==2.0.12
      - flake8==5.0.4
      - idna==3.10
      - importlib-metadata==4.2.0
      - mccabe==0.7.0
      - mock==5.2.0
      - nose2==0.13.0
      - pycodestyle==2.9.1
      - pyflakes==2.5.0
      - requests==2.27.1
      - six==1.10.0
      - urllib3==1.26.20
prefix: /opt/conda/envs/globus-sdk-python

tests/unit/test_oauth2_native_app.py::GlobusNativeAppFlowManagerTests::test_prefill_named_grant
tests/unit/test_oauth2_native_app.py::GlobusNativeAppFlowManagerTests::test_exchange_code_for_tokens tests/unit/test_oauth2_native_app.py::GlobusNativeAppFlowManagerTests::test_get_authorize_url tests/unit/test_oauth2_native_app.py::GlobusNativeAppFlowManagerTests::test_make_native_app_challenge
globus_sdk/auth/client_types/native_client.py globus_sdk/auth/oauth2_native_app.py
globus_sdk/auth/client_types/native_client.py globus_sdk/auth/oauth2_native_app.py