@@ -270,33 +270,27 @@ async def all_collections(
270270        base_url  =  str (request .base_url )
271271
272272        # Get the global limit from environment variable 
273-         global_limit  =  None 
274-         env_limit  =  os .getenv ("STAC_ITEM_LIMIT"  )
275-         if   env_limit : 
276-              try : 
277-                  global_limit   =   int ( env_limit ) 
278-              except   ValueError :
279-                  # Handle invalid integer in environment variable 
280-                 pass 
281- 
282-         # Apply global limit if it exists 
283-         if   global_limit   is   not   None : 
284-              # If a limit was provided, use the smaller of the two 
285-              if  limit  is  not None :
286-                  limit  =  min ( limit ,  global_limit )
287-              else :
288-                  limit  =  global_limit 
273+         global_max_limit  =  int ( os . getenv ( "STAC_COLLECTION_GLOBAL_MAX_LIMIT" ,  300 )) 
274+         default_limit  =  int ( os .getenv ("STAC_DEFAULT_COLLECTION_LIMIT"  ,  100 ) )
275+         query_limit   =   request . query_params . get ( "limit" ) 
276+ 
277+         body_limit   =   None 
278+         try :
279+             if   request . method   ==   "POST"   and   request . body (): 
280+                 body_data   =   await   request . json () 
281+                  body_limit   =   body_data . get ( "limit" ) 
282+         except   Exception : 
283+              pass 
284+ 
285+         if  body_limit  is  not None :
286+             limit  =  int ( body_limit )
287+         elif   query_limit :
288+             limit  =  int ( query_limit ) 
289289        else :
290-             # No global limit, use provided limit or default 
291-             if  limit  is  None :
292-                 query_limit  =  request .query_params .get ("limit" )
293-                 if  query_limit :
294-                     try :
295-                         limit  =  int (query_limit )
296-                     except  ValueError :
297-                         limit  =  10 
298-                 else :
299-                     limit  =  10 
290+             limit  =  default_limit 
291+ 
292+         if  global_max_limit  >  0 :
293+             limit  =  min (limit , global_max_limit )
300294
301295        token  =  request .query_params .get ("token" )
302296
@@ -660,7 +654,17 @@ async def get_search(
660654        Raises: 
661655            HTTPException: If any error occurs while searching the catalog. 
662656        """ 
663-         limit  =  int (request .query_params .get ("limit" , os .getenv ("STAC_ITEM_LIMIT" , 10 )))
657+         global_max_limit  =  int (os .getenv ("STAC_GLOBAL_ITEM_MAX_LIMIT" , 100 ))
658+         default_limit  =  int (os .getenv ("STAC_DEFAULT_ITEM_LIMIT" , 10 ))
659+ 
660+         query_limit  =  request .query_params .get ("limit" )
661+         if  query_limit :
662+             limit  =  int (query_limit )
663+         else :
664+             limit  =  default_limit 
665+ 
666+         if  global_max_limit  >  0 :
667+             limit  =  min (limit , global_max_limit )
664668
665669        base_args  =  {
666670            "collections" : collections ,
0 commit comments