See Versioning Policy for our versioning policy.

The upgrading doc is a good reference if you are upgrading to a major new version of the SDK.

v3.41.0 (2024-04-26)#


  • Added a new AuthClient method get_consents and supporting local data objects. These allows a client to poll and interact with the current Globus Auth consent state of a particular identity rooted at their client. (#971)

  • Added LoginFlowManager and CommandLineLoginFLowManager to experimental (#972)

  • Added LocalServerLoginFlowManager to experimental (#977)

  • Added support to FlowsClient for the validate_flow operation of the Globus Flows service. (#979)

v3.40.0 (2024-04-15)#


  • Add globus_sdk.tokenstorage.MemoryAdapter for the simplest possible in-memory token storage mechanism. (#964)

  • ConfidentialAppAuthClient.oauth2_get_dependent_tokens now supports the scope parameter as a string or iterable of strings. (#965)

  • Moved scope parsing out of experimental. The Scope construct is now importable from the top level globus_sdk module. (#966)

  • Support updating subscriptions assigned to flows in the Flows service. (#974)


  • Fix concurrency problems in the test suite caused by isort’s .isorted temporary files. (#973)

v3.39.0 (2024-03-06)#


  • Added TransferClient.operation_stat helper method for getting the status of a path on a collection (#961)

v3.38.0 (2024-03-01)#


  • IterableGCSResponse and UnpackingGCSResponse are now available as top-level exported names. (#956)

  • Add GroupsClient.get_group_by_subscription_id for resolving subscriptions to groups. This also expands the _testing data for get_group to include a subscription group case. (#957)

  • Added prompt to the recognized Globus Authorization Requirements Error authorization_parameters fields. (#958)

v3.37.0 (2024-02-14)#


  • All of the basic HTTP methods of BaseClient and its derived classes which accept a data parameter for a request body, e.g. or GroupsClient.put, now allow the data to be passed in the form of already encoded bytes. (#951)


  • Update ensure_datatype to work with documents that set DATA_TYPE to MISSING instead of omitting it (#952)

v3.36.0 (2024-02-12)#


  • Added support for GCS endpoint get & update operations (#933)

    • gcs_client.get_endpoint()

    • gcs_client.update_endpoint(EndpointDocument(...))

  • TransferClient.endpoint_manager_task_list() now supports filter_endpoint_use as a parameter. (#948)

  • FlowsClient.create_flow now supports subscription_id as a parameter. (#949)

v3.35.0 (2024-01-29)#


  • Added a session_required_mfa parameter to the AuthorizationParameterInfo error info object and oauth2_get_authorize_url method (#939)


  • The argument specification for AuthClient.create_policy was incorrect. The corrected method will emit deprecation warnings if called with positional arguments, as the corrected version uses keyword-only arguments. (#936)


  • TransferClient.operation_symlink is now officially deprecated and will emit a RemovedInV4Warning if used. (#942)


  • Included documentation in AuthorizationParameterInfo for session_required_policies (#939)

v3.34.0 (2024-01-02)#


  • Add the delete_protected field to MappedCollectionDocument. (#920)


  • Minor improvements to handling of paths and URLs. (#922)

    • Request paths which start with the base_path of a client are now normalized to avoid duplicating the base_path.

    • When a GCSClient is initialized with an HTTPS URL, if the URL does not end with the /api suffix, that suffix will automatically be appended. This allows the gcs_manager_url field from Globus Transfer to be used verbatim as the address for a GCSClient.


  • NativeAppAuthClient.oauth2_validate_token and ConfidentialAppAuthClient.oauth2_validate_token have been deprecated, as their usage is discouraged by the Auth service. (#921)


  • Migrate from a CHANGELOG symlink to the RST .. include directive. (#918)

  • Tutorial endpoint references are removed from tests and replaced with bogus values. (#919)

v3.33.0.post0 (2023-12-05)#


  • Remove references to the Tutorial Endpoints from documentation. (#915)

v3.33.0 (2023-12-04)#


  • Support custom CA certificate bundles. (#903)

    Previously, SSL/TLS verification allowed only a boolean True or False value. It is now possible to specify a CA certificate bundle file using the existing verify_ssl parameter or GLOBUS_SDK_VERIFY_SSL environment variable.

    This may be useful for interacting with Globus through certain proxy firewalls.


  • Fix the type annotation for globus_sdk.IdentityMap init, which incorrectly rejected ConfidentialAppAuthClient. (#912)

v3.32.0 (2023-11-09)#



These changes pertain to methods of the client objects in the SDK which interact with Globus Auth client registration. To disambiguate, we refer to the Globus Auth entities below as “Globus Auth clients” or specify “in Globus Auth”, as appropriate.

  • Globus Auth clients objects now have methods for interacting with client and project APIs. (#884)

    • NativeAppAuthClient.create_native_app_instance creates a new native app instance in Globus Auth for a client.

    • ConfidentialAppAuthClient.create_child_client creates a child client in Globus Auth for a confidential app.

    • AuthClient.get_project looks up a project.

    • AuthClient.get_policy looks up a policy document.

    • AuthClient.get_policies lists all policies in all projects for which the current user is an admin.

    • AuthClient.create_policy creates a new policy.

    • AuthClient.update_policy updates an existing policy.

    • AuthClient.delete_policy deletes a policy.

    • AuthClient.get_client looks up a Globus Auth client by ID or FQDN.

    • AuthClient.get_clients lists all Globus Auth clients for which the current user is an admin.

    • AuthClient.create_client creates a new client in Globus Auth.

    • AuthClient.update_client updates an existing client in Globus Auth.

    • AuthClient.delete_client deletes a client in Globus Auth.

    • AuthClient.get_client_credentials lists all client credentials for a given Globus Auth client.

    • AuthClient.create_client_credential creates a new client credential for a given Globus Auth client.

    • AuthClient.delete_client_credential deletes a client credential.

    • AuthClient.get_scope looks up a scope.

    • AuthClient.get_scopes lists all scopes in all projects for which the current user is an admin.

    • AuthClient.create_scope creates a new scope.

    • AuthClient.update_scope updates an existing scope.

    • AuthClient.delete_scope deletes a scope.

  • A helper object has been defined for dependent scope manipulation via the scopes APIs, globus_sdk.DependentScopeSpec (#884)


  • When serializing TransferTimer data, do not convert to UTC if the input was a valid datetime with an offset. (#900)

v3.31.0 (2023-11-01)#


  • Add support for the new Transfer Timer creation method, in the form of a client method, TimerClient.create_timer, and a payload builder type, TransferTimer (#887)

    • create_timer only supports dict data and TransferTimer, not the previous TimerJob type

    • Additional helper classes, RecurringTimerSchedule and OneceTimerSchedule, are provided to help build the TransferTimer payload

  • Request encoding in the SDK will now automatically convert any uuid.UUID objects into strings. Previously this was functionality provided by certain methods, but now it is universal. (#892)


  • Creation of timers to run transfers using TimerJob is now deprecated (#887)

v3.30.0 (2023-10-27)#


  • TransferClient.operation_ls now supports the limit and offset parameters (#868)

  • A new sentinel value, globus_sdk.MISSING, has been introduced. It is used for method calls which need to distinguish missing parameters from an explicit None used to signify null (#885)

    • globus_sdk.MISSING is now supported in payload data for all methods, and will be automatically removed from the payload before sending to the server


  • GroupPolicies objects now treat an explicit instantiation with high_assurance_timeout=None as setting the timeout to null (#885)

v3.29.0 (2023-10-12)#


  • The inheritance structure used for Globus Auth client classes has changed. (#849)

    • A new class, AuthLoginClient, is the base for NativeAppAuthClient and ConfidentialAppAuthClient. These classes no longer inherit from AuthClient, and therefore no longer inherit certain methods which would never succeed if called.

    • AuthClient is now the only class which provides functionality for accessing Globus Auth APIs.

    • AuthClient no longer includes methods for OAuth 2 login flows which would only be valid to call on AuthLoginClient subclasses.


  • Several features of Auth client classes are now deprecated. (#849)

    • Setting AuthClient.client_id or accessing it as an attribute is deprecated and will emit a warning.

    • ConfidentialAppAuthClient.get_identities has been preserved as a valid call, but will emit a warning. Users wishing to access this API via client credentials should prefer to get an access token using a client credential callout, and then use that token to call AuthClient.get_identities().

  • The AuthClient.oauth2_userinfo method has been deprecated in favor of AuthClient.userinfo. Callers should prefer the new method name. (#865)

v3.28.0 (2023-08-30)#

Python Support#

  • Add support for Python 3.12. (#808)


  • Add a prompt keyword parameter to AuthClient.oauth2_get_authorize_url(). (#813)

    Setting this parameter requires users to authenticate with an identity provider, even if they are already logged in. Doing so can help avoid errors caused by unexpected session required policies, which would otherwise require a second, follow-up login flow.

    prompt could previously only be set via the query_params keyword parameter. It is now more discoverable.

  • Add TimerClient.pause_job and TimerClient.resume_job for pausing and resuming timers. (#827)


  • Add an example script which handles creating and running a flow. (#826)


  • Added responses to _testing reflecting an inactive Timers job (#828)

v3.27.0 (2023-08-11)#


  • Add a FlowsClient.get_run_definition() method. (#799)


  • FlowsClient.get_run_logs() now uses an IterableRunLogsResponse. (#797)

v3.26.0 (2023-08-07)#


  • New components are introduced to the experimental subpackage. See the SDK Experimental documentation for more details.

    • Add tools which manipulate Globus Auth Requirements error data. globus_sdk.experimental.auth_requirements_error provides a data container class, GlobusAuthRequirementsError, and functions for converting and validating data against this shape. (#768)

    • Introduce an experimental Globus Auth scope parser in globus_sdk.experimental.scope_parser (#752)


  • The scopes class attribute of SpecificFlowClient is now specialized to ensure that type checkers will allow access to SpecificFlowClient scopes and resource_server values without casting. The value used is a specialized stub which raises useful errors when class-based access is performed. The scopes instance attribute is unchanged. (#793)

v3.25.0 (2023-07-20)#


  • The jwt_params argument to decode_id_token() now allows "leeway" to be included to pass a leeway parameter to pyjwt. (#790)


  • decode_id_token() defaulted to having no tolerance for clock drift. Slight clock drift could lead to JWT claim validation errors. The new default is 0.5s which should be sufficient for most cases. (#790)


  • New scripts in the example gallery demonstrate usage of the Globus Auth Developer APIs to List, Create, Delete, and Update Projects. (#777)

v3.24.0 (2023-07-18)#


  • Add FlowsClient.list_runs as a method for listing all runs for the current user, with support for pagination. (#782)

  • Add SearchClient methods for managing search index lifecycle: create_index, delete_index, and reopen_index (#785)


  • The enforcement logic for URLs in BaseClient instantiation has been improved to only require that service_name be set if base_url is not provided. (#786)

    • This change primarily impacts subclasses, which no longer need to set the service_name class variable if they ensure that the base_url is always passed with a non-null value.

    • Direct instantiation of BaseClient is now possible, although not recommended for most use-cases.

v3.23.0 (2023-07-06)#


  • Add AuthClient methods to support the Projects APIs for listing, creating, updating, and deleting projects.

    • AuthClient.get_projects (#766)

    • AuthClient.create_project (#772)

    • AuthClient.update_project (#774)

    • AuthClient.delete_project (#776)

  • globus_sdk._testing now exposes a method, construct_error which makes it simpler to explicitly construct and return a Globus SDK error object for testing. This is used in the SDK’s own testsuite and is available for _testing users. (#770)

  • AuthClient.oauth2_get_authorize_url now supports the following parameters for session management: session_required_identities, session_required_single_domain, and session_required_policies. Each of these accept list inputs, as returned by ErrorInfo.authorization_parameters. (#773)


  • AuthClient, NativeAppAuthClient, and ConfidentialAppAuthClient have had their init signatures updated to explicitly list available parameters. (#764)

    • Type annotations for these classes are now more accurate

    • The NativeAppAuthClient and ConfidentialAppAuthClient classes do not accept authorizer in their init signatures. Previously this was accepted but raised a GlobusSDKUsageError. Attempting to pass an authorizer will now result in a TypeError.

  • session_required_policies parsing in AuthorizationParameterInfo now supports the policies being returned as a list[str] in addition to supporting str (#769)


  • AuthorizationParameterInfo is now more type-safe, and will not return parsed data from a response without checking that the data has correct types (#769)

  • Adjust the FlowsClient.get_run() include_flow_description parameter so it is submitted only when it has a value. (#778)


  • The _testing documentation has been expanded with a dropdown view of the response contents for each method. In support of this, client method testing docs have been reorganized into a page per service. (#767)

v3.22.0 (2023-06-22)#


  • Add support for AuthClient.get_identity_providers for looking up Identity Providers by domain or ID in Globus Auth (#757)

  • Add a method to the Globus Search client, SearchClient.batch_delete_by_subject (#760)

  • Add AuthScopes.manage_projects to scope data. This is also accessible as AuthClient.scopes.manage_projects (#761)


  • Alpha features of globus-sdk are now documented in the “Unstable” doc section (#753)

v3.21.0 (2023-06-16)#


  • AuthAPIError will now parse a unique id found in the error subdocuments as the request_id attribute (#749)

  • Add a FlowsClient.update_run() method. (#744)

  • Add a FlowsClient.delete_run() method. (#747)

  • Add a FlowsClient.cancel_run() method. (#747)

  • Add an experimental subpackage. (#751)

v3.20.1 (2023-06-06)#


  • Fix TransferClient.operation_mkdir and TransferClient.operation_rename to no longer send null local_user by default (#741)

v3.20.0 (2023-06-05)#


  • Implemented FlowsClient.get_run(...) (#721)

  • Implemented FlowsClient.get_run_logs(...) (#722)

  • Implemented SpecificFlowClient.resume_run(...) (#723)

  • ConsentRequiredInfo now accepts required_scope (singular) containing a single string as an alternative to required_scopes. However, it will parse both formats into a required_scopes list. (#726)

  • FlowsClient.list_flows now supports passing a non-string iterable of strings to orderby in order to indicate multiple orderings (#730)

  • Support pathlib.Path objects as filenames for the JSON and sqlite token storage adapters. (#734)

  • Several TransferClient methods, TransferData, and DeleteData now support the local_user, source_local_user, and destination_local_user parameters (#736)


  • Behavior has changed slightly specifically for TimerAPIError. When parsing fails, the code will be Error and the messages will be empty. The detail field will be treated as the errors array for these errors when it is present and contains an array of objects.

  • Error parsing in the SDK has been enhanced to better support JSON:API and related error formats with multiple sub-errors. Several attributes are added or changed. For most SDK users, the changes will be completely transparent or a minor improvement. (#725)

    • Error parsing now attempts to detect the format of the error data and will parse JSON:API data differently from non-JSON:API data. Furthermore, parsing is stricter about the expectations about fields and their types. JSON:API parsing now has its own distinct parsing path, followed only when the JSON:API mimetype is present.

    • A new attribute is added to API error objects, errors. This is a list of subdocuments parsed from the error data, especially relevant for JSON:API errors and similar formats. See the ErrorSubdocument documentation for details.

    • A new attribute is now present on API error objects, messages. This is a list of messages parsed from the error data, for errors with multiple messages. When there is only one message, messages will only contain one item.

    • The message field is now an alias for a joined string of messages. Assigning a string to message is supported for error subclasses, but is deprecated.

    • message will now be None when no messages can be parsed from the error data. Previously, the default for message would be an alias for text.

    • All error types now support request_id as an attribute, but it will default to None for errors which do not include a request_id.

    • An additional field is checked by default for error message data, title. This is useful when errors contain title but no detail field. The extraction of messages from errors has been made stricter, especially in the JSON:API case.

    • The code field of errors will no longer attempt to parse only the first code from multiple sub-errors. Instead, code will first parse a top-level code field, and then fallback to checking if all sub-errors have the same code value. The result is that certain errors which would populate a non-default code value no longer will, but the code will also no longer be misleading when multiple errors with different codes are present in an error object.

    • The code field of an error may now be None. This is specifically possible when the error format is detected to be known as JSON:API and there is no code present in any responses.


  • The TransferRequestsTransport will no longer automatically retry errors with a code of EndpointError

  • Fix pagination on iterable gcs client routes (#738, #739)

    • GCSClient.get_storage_gateway_list

    • GCSClient.get_role_list

    • GCSClient.get_collection_list

    • GCSClient.get_user_credential_list

v3.19.0 (2023-04-14)#


  • Added FlowsClient.update_flow(...) (#710)

  • Support passing “include” as a transfer filter_rule method (#712)

  • Make the request-like interface for response objects and errors more uniform. (#715)

    • Both GlobusHTTPResponse and GlobusAPIError are updated to ensure that they have the following properties in common: http_status, http_reason, headers, content_type, text

    • GlobusHTTPResponse and GlobusAPIError have both gained a new property, binary_content, which returns the unencoded response data as bytes


  • GlobusAPIError.raw_text is deprecated in favor of text


  • The return type of AuthClient.get_identities is now correctly annotated as an iterable type, globus_sdk.GetIdentitiesResponse (#716)


  • Documentation for client methods has been improved to more consistently format and display examples and other information (#714)

v3.18.0 (2023-03-16)#


  • ConfidentialAppAuthClient.oauth2_get_dependent_tokens now supports the refresh_tokens parameter to enable requests for dependent refresh tokens (#698)


  • Behaviors which will change in version 4.0.0 of the globus-sdk now emit deprecation warnings.

  • TransferData.add_item now defaults to omitting recursive rather than setting its value to False. This change better matches new Transfer API behaviors which treat the absence of the recursive flag as meaning autodetect, rather than the previous default of False. Setting the recursive flag can still have beneficial behaviors, but should not be necessary for many use-cases (#696)


  • Omitting requested_scopes or specifying it as None is now deprecated and will emit a warning. In version 4, users will always be required to specify their scopes when performing login flows. This applies to the following methods:

    • ConfidentialAppAuthClient.oauth2_client_credentials_tokens

    • AuthClient.oauth2_start_flow

  • SearchClient.update_entry and SearchClient.create_entry are officially deprecated and will emit a warning. These APIs are aliases of SearchClient.ingest, but their existence has caused confusion. Users are encouraged to switch to SearchClient.ingest instead (#695)


  • When users input empty requested_scopes values, these are now rejected with a usage error instead of being translated into the default set of requested_scopes

  • Fix the type annotation for max_sleep on client transports to allow float values (#697)

v3.17.0 (2023-02-27)#

Python Support#

  • Remove support for python3.6 (#681)


  • MutableScope objects can now be used in the oauth2_start_flow and oauth2_client_credentials_tokens methods of AuthClient classes as part of requested_scopes (#689)


  • Make MutableScope.scope_string a public instance attribute (was _scope_string) (#687)

  • Globus Groups methods which required enums as arguments now also accept a variety of Literal strings in their annotations as well. This is coupled with changes to ensure that strings and enums are always serialized correctly in these cases. (#691)


  • Fix a typo in TransferClient.endpoint_manager_task_successful_transfers which prevented calls from being made correctly (#683)

v3.16.0 (2023-02-07)#


  • Allow UUID values for the client_id parameter to AuthClient and its subclasses (#676)


  • Improved GCS Collection datatype detection to support collection#1.6.0 and collection#1.7.0 documents (#675)

    • guest_auth_policy_id is now supported on MappedCollectionDcoument

    • user_message strings over 64 characters are now supported

  • The session_required_policies attribute of AuthorizationInfo is now parsed as a list of strings when present, and None when absent. (#678)

  • globus_sdk.ArrayResponse and globus_sdk.IterableResponse are now available as names. Previously, these were only importable from globus_sdk.response (#680)


  • ArrayResponse and IterableResponse have better error behaviors when the API data does not match their expected types (#680)


  • Fix the Timer code example (#672)

  • New documentation examples for Transfer Task submission in the presence of ConsentRequired errors (#673)

v3.15.1 (2022-12-13)#


  • AuthorizationParameterInfo now exposes session_required_policies (#658)


  • Fix a bug where TransferClient.endpoint_manager_task_list didn’t handle the last_key argument when paginated (#662)

v3.15.0 (2022-11-22)#


  • Scope Names can be set explicitly in a ScopeBuilder (#641)

  • Introduced ScopeBuilder.scope_names property (#641)

  • Add support for interpret_globs and ignore_missing to DeleteData (#646)

  • A new object, globus_sdk.LocalGlobusConnectServer can be used to inspect the local installation of Globus Connect Server (#647)

    • The object supports properties for endpoint_id and domain_name

    • This only supports Globus Connect Server version 5

  • The filter argument to TransferClient.operation_ls now accepts a list to pass multiple filter params (#652)

  • Improvements to MutableScope objects (#654)

    • MutableScope(...).serialize() is added, and str(MutableScope(...)) uses it

    • MutableScope.add_dependency now supports MutableScope objects as inputs

    • ScopeBuilder.make_mutable now accepts a keyword argument optional. This allows, for example, TransferScopes.make_mutable("all", optional=True)


  • Improve the __str__ implementation for OAuthTokenResponse (#640)

  • When GlobusHTTPResponse contains a list, calls to get() will no longer fail with an AttributeError but will return the default value (None if unspecified) instead (#644)


  • The optional argument to add_dependency is deprecated. MutableScope(...).add_dependency(MutableScope("foo", optional=True)) can be used to add an optional dependency


  • Fixed SpecificFlowClient scope string (#641)

  • Fix a bug in the type annotations for transport objects which restricted the size of status code tuples set as classvars (#651)

v3.14.0 (2022-11-01)#

Python Support#

  • Python 3.11 is now officially supported (#628)


  • Add support for FlowsClient.get_flow and FlowsClient.delete_flow (#631, #626)

  • Add a close() method to SQLiteAdapter which closes the underlying connection (#628)

v3.13.0 (2022-10-13)#


  • Add connect_params to SQLiteAdapter, enabling customization of the sqlite connection (#613)

  • Add FlowsClient.create_flow(...) (#614)

  • Add globus_sdk.SpecificFlowClient to manage interactions performed against a specific flow (#616)

  • Add support to FlowsClient.list_flows for pagination and the orderby parameter (#621, #622)


  • Fix rst formatting for a few nested bullet points in existing changelog (#619)

v3.12.0 (2022-09-21)#


  • Add Mapped Collection policy helper types for constructing policies data. (#607) The following new types are introduced:

    • CollectionPolicies (the base class for these types)

    • POSIXCollectionPolicies

    • POSIXStagingCollectionPolicies

    • GoogleCloudStorageCollectionPolicies


  • Fix bug where UserCredential policies were being converted to a string (#608)

  • Corrected the Flows service resource_server string to (#612)

v3.11.0 (2022-08-30)#


  • Implement __dir__ for the lazy importer in globus_sdk. This enables tab completion in the interpreter and other features with rely upon dir(globus_sdk) (#603)

  • Add an initial Globus Flows client class, globus_sdk.FlowsClient (#604)

    • globus_sdk.FlowsAPIError is the error class for this client

    • FlowsClient.list_flows is implemented as a method for listing deployed flows, with some of the filtering parameters of this API supported as keyword arguments

    • The scopes for the Globus Flows API can be accessed via globus_sdk.scopes.FlowsScopes or globus_sdk.FlowsClient.scopes


  • Adjust behaviors of TransferData and TimerJob to make TimerJob.from_transfer_data work and to defer requesting the submission_id until the task submission call (#602)

    • TransferData avoids passing null for several values when they are omitted, ranging from optional parameters to add_item to skip_activation_check

    • TransferData and DeleteData now support usage in which the transfer_client parameters is None. In these cases, if submission_id is omitted, it will be omitted from the document, allowing the creation of a partial task submsision document with no submission_id

    • TimerJob.from_transfer_data will now raise a ValueError if the input document contains submission_id or skip_activation_check

    • TransferClient.submit_transfer and TransferClient.submit_delete now check to see if the data being sent contains a submission_id. If it does not, get_submission_id is called automatically and set as the submission_id on the payload. The new submission_id is set on the object passed to these methods, meaning that these methods are now side-effecting.

The newly recommended usage for TransferData and DeleteData is to pass the endpoints as named parameters:

# -- for TransferData --
# old usage
transfer_client = TransferClient()
transfer_data = TransferData(transfer_client, ep1, ep2)
# new (recommended) usage
transfer_data = TransferData(source_endpoint=ep1, destination_endpoint=ep2)

# -- for DeleteData --
# old usage
transfer_client = TransferClient()
delete_data = TransferData(transfer_client, ep)
# new (recommended) usage
delete_data = DeleteData(endpoint=ep)

v3.10.1 (2022-07-11)#


  • Use setattr in the lazy-importer. This makes attribute access after imports faster by several orders of magnitude. (#591)


  • Add guest collection example script to docs (#590)

v3.10.0 (2022-06-27)#


  • Remove nonexistent monitor_ongoing scope from TransferScopes (#583)


  • Add User Credential methods to GCSClient (#582)

    • get_user_credential_list

    • get_user_credential

    • create_user_credential

    • update_user_credential

    • delete_user_credential

  • Add connector_id_to_name helper to GCSClient to resolve GCS Connector UUIDs to human readable Connector display names (#582)

v3.9.0 (2022-06-02)#


  • Add helper objects and methods for interacting with Globus Connect Server Storage Gateways (#554)

    • New methods on GCSClient: create_storage_gateway, get_storage_gateway, get_storage_gateway_list, update_storage_gateway, delete_storage_gateway

    • New helper classes for constructing storage gateway documents. StorageGatewayDocument is the main one, but also POSIXStoragePolicies and POSIXStagingStoragePolicies are added for declaring the storage gateway policies field. More policy helpers will be added in future versions.

  • Add support for more StorageGatewayPolicies documents. (#562) The following types are now available:

    • BlackPearlStoragePolicies

    • BoxStoragePolicies

    • CephStoragePolicies

    • GoogleDriveStoragePolicies

    • GoogleCloudStoragePolicies

    • OneDriveStoragePolicies

    • AzureBlobStoragePolicies

    • S3StoragePolicies

    • ActiveScaleStoragePolicies

    • IrodsStoragePolicies

    • HPSSStoragePolicies

  • Add https scope to GCSCollectionScopeBuilder (#563)

  • ScopeBuilder objects now implement __str__ for easy viewing. For example, print(globus_sdk.TransferClient.scopes) (#568)

  • Several improvements to Transfer helper objects (#573)

    • Add TransferData.add_filter_rule for adding filter rules (exclude rules) to transfers

    • Add skip_activation_check as an argument to DeleteData and TransferData

    • The sync_level argument to TransferData is now annotated more accurately to reject bad strings


  • Update the fields used to extract AuthAPIError messages (#566)

  • Imports from globus_sdk are now evaluated lazily via module-level __getattr__ on python 3.7+ (#571)

    • This improves the performance of imports for almost all use-cases, in some cases by over 80%

    • The method globus_sdk._force_eager_imports() can be used to force non-lazy imports, for latency sensitive applications which wish to control when the time cost of import evaluation is paid. This method is private and is therefore is not covered under the globus-sdk’s SemVer guarantees, but it is expected to remain stable for the foreseeable future.

  • Improve handling of array-style API responses (#575)

    • Response objects now define __bool__ as bool(data). This means that bool(response) could be False if the data is {}, [], 0, or other falsey-types. Previously, __bool__ was not defined, meaning it was always True

    • globus_sdk.response.ArrayResponse is a new class which describes responses which are expected to hold a top-level array. It satisfies the sequence protocol, allowing indexing with integers and slices, iteration over the array data, and length checking with len(response)

    • globus_sdk.GroupsClient.get_my_groups returns an ArrayResponse, meaning the response data can now be iterated and otherwise used

v3.8.0 (2022-05-04)#


  • Several changes expose more details of HTTP requests (#551)

    • GlobusAPIError has a new property headers which provides the case-insensitive mapping of header values from the response

    • GlobusAPIError and GlobusHTTPResponse now include http_reason, a string property containing the “reason” from the response

    • BaseClient.request and RequestsTransport.request now have options for setting boolean options allow_redirects and stream, controlling how requests are processed

  • New tools for working with optional and dependent scope strings (#553)

    • A new class is provided for constructing optional and dependent scope strings, MutableScope. Import as in from globus_sdk.scopes import MutableScope

    • ScopeBuilder objects provide a method, make_mutable, which converts from a scope name to a MutableScope object. See documentation on scopes for usage details

v3.7.0 (2022-04-08)#


  • Add a client for the Timer service (#548)

    • Add TimerClient class, along with TimerJob for constructing data to pass to the Timer service for job creation, and TimerAPIError

    • Modify globus_sdk.config utilities to provide URLs for Actions and Timer services


  • Fix annotations to allow request data to be a string. This is supported at runtime but was missing from annotations. (#549)

v3.6.0 (2022-03-18)#


  • ScopeBuilder objects now support known_url_scopes, and known scope arguments to a ScopeBuilder may now be of type str in addition to list[str] (#536)

  • Add the RequestsTransport.tune contextmanager to the transport layer, allowing the settings on the transport to be set temporarily (#540)

v3.5.0 (2022-03-02)#


  • globus_sdk.IdentityMap can now take a cache as an input. This allows multiple IdentityMap instances to share the same storage cache. Any mutable mapping type is valid, so the cache can be backed by a database or other storage (#500)

  • Add support for include as a parameter to GroupsClient.get_group. include can be a string or iterable of strings (#528)

  • Add a new method to tokenstorage, SQLiteAdapter.iter_namespaces, which iterates over all namespaces visible in the token database (#529)


  • Add TransferRequestsTransport class that does not retry ExternalErrors. This fixes cases in which the TransferClient incorrectly retried requests (#522)

  • Use the “reason phrase” as a failover for stringified API errors with no body (#524)


  • Enhance documentation for all of the parameters on methods of GroupsClient

v3.4.2 (2022-02-18)#


  • Fix the pagination behavior for TransferClient on task_skipped_errors and task_successful_transfers, and apply the same fix to the endpoint manager variants of these methods. Prior to the fix, paginated calls would return a single page of results and then stop (#520)

v3.4.1 (2022-02-11)#


  • The typing_extensions requirement in package metadata now sets a lower bound of 4.0, to force upgrades of installations to get a new enough version (#518)

v3.4.0 (2022-02-11)#


  • Support pagination on SearchClient.post_search (#507)

  • Add support for scroll queries to SearchClient. SearchClient.scroll and SearchClient.paginated.scroll are now available as methods, and a new helper class, SearchScrollQuery, can be used to easily construct scrolling queries. (#507)

  • Add methods to SearchClient for managing index roles. create_role, delete_role, and get_role_list (#507)

  • Add mapped_collection and filter query arguments to GCSClient.get_collection_list (#510)

  • Add role methods to GCSClient (#513)

    • GCSClient.get_role_list lists endpoint or collection roles

    • GCSClient.create_role creates a role

    • GCSClient.get_role gets a single role

    • GCSClient.delete_role deletes a role

  • The response from AuthClient.get_identities now supports iteration, returning results from the "identities" array (#514)

v3.3.1 (2022-01-25)#


  • Packaging bugfix. globus-sdk is now built with pypa’s build tool, to resolve issues with wheel builds.

v3.3.0 (2022-01-25)#


  • Add update_group method to GroupsClient (#506)

  • The TransferData and DeleteData helper objects now accept the following parameters: notify_on_succeeded, notify_on_failed, and notify_on_inactive. All three are boolean parameters with a default of True. (#502)

  • Add Paginator.wrap as a method for getting a paginated methods. This interface is more verbose than the existing paginated methods, but correctly preserves type annotations. It is therefore preferable for users who are using mypy to do type checking. (#494)


  • Paginator objects are now generics over a type var for their page type. The page type is bounded by GlobusHTTPResponse, and most type-checker behaviors will remain unchanged (#495)


  • Several minor bugs have been found and fixed (#504)

    • Exceptions raised in the SDK always use raise ... from syntax where appropriate. This corrects exception chaining in the local endpoint and several response objects.

    • The encoding of files opened by the SDK is now always UTF-8

    • TransferData will now reject unsupported sync_level values with a ValueError on initialization, rather than erroring at submission time. The sync_level has also had its type annotation fixed to allow for int values.

    • Several instances of undocumented parameters have been discovered, and these are now rectified.


  • Document globus_sdk.config.get_service_url and globus_sdk.config.get_webapp_url (#496)

    • Internally, these are updated to be able to default to the GLOBUS_SDK_ENVIRONMENT setting, so specifying an environment is no longer required

v3.2.1 (2021-12-13)#

Python Support#

  • Update to avoid deprecation warnings on python 3.10 (#499)

v3.2.0 (2021-12-02)#


  • Add iter_items as a method on TransferData and DeleteData (#488)

  • Add the resource_server property to client classes and objects. For example, TransferClient.resource_server and GroupsClient().resource_server are now usable to get the resource server string for the relevant services. resource_server is documented as part of globus_sdk.BaseClient and may be None. (#489)

  • The implementation of several properties of GlobusHTTPResponse has changed (#497)

    • Responses have a new property, headers, a case-insensitive dict of headers from the response

    • Responses now implement http_status and content_type as properties without setters


  • ClientCredentialsAuthorizer now accepts Union[str, Iterable[str]] as the type for scopes (#498)


  • Fix type annotations on client methods with paginated variants (#491)

v3.1.0 (2021-10-13)#


  • Add filter as a supported parameter to TransferClient.task_list (#484)

  • The filter parameter to TransferClient.task_list and TransferClient.operation_ls can now be passed as a Dict[str, str | List[str]]. Documentation on the TransferClient explains how this will be formatted, and is linked from the param docs for filter on each method (#484)


  • Adjust package metadata for cryptography dependency, specifying cryptography>=3.3.1 and no upper bound. This is meant to help mitigate issues in which an older cryptography version is installed gets used in spite of it being incompatible with pyjwt[crypto]>=2.0 (#486)

v3.0.3 (2021-10-11)#


  • Fix several internal decorators which were destroying type information about decorated functions. Type signatures of many methods are therefore corrected (#485)

v3.0.2 (2021-09-29)#


  • Produce more debug logging when SDK logs are enabled (#480)


  • Update the minimum dependency versions to lower bounds which are verified to work with the testsuite (#482)

v3.0.1 (2021-09-15)#


  • ScopeBuilder objects now define the type of __getattr__ for mypy to know that dynamic attributes are strings (#472)


  • Fix malformed PEP508 python_version bound in dev dependencies (#474)


  • Fix remaining type: ignore usages in globus-sdk (#473)

v3.0.0 (2021-09-14)#


  • Remove support for bytes values for fields consuming UUIDs (#471)


  • Add filter_is_error parameter to advanced task list (#467)

  • Add a LocalGlobusConnectPersonal.get_owner_info() for looking up local user information from gridmap (#466)

  • Add support for GCS collection create and update. This includes new data helpers, MappedCollectionDcoument and GuestCollectionDocument (#468)

  • Add support for specifying config_dir to LocalGlobusConnectPersonal (#470)

v3.0.0b4 (2021-09-01)#


  • Remove BaseClient.qjoin_path (#452)


  • Add a new GCSClient class for interacting with GCS Manager APIs (#447)

  • GCSClient supports get_collection and delete_collection. get_collection uses a new UnpackingGCSResponse response type (#451, #464)

  • Add delete_destination_extra param to TransferData (#456)

  • TransferClient.endpoint_manager_task_list now takes filters as named keyword arguments, not only in query_params (#460)


  • Rename GCSScopeBuilder to GCSCollectionScopeBuilder and add GCSEndpointScopeBuilder. The GCSClient includes helpers for instantiating these scope builders (#448)

  • The additional_params parameter to AuthClient.oauth2_get_authorize_url has been renamed to query_params for consistency with other methods (#453)

  • Enforce keyword-only arguments for most SDK-provided APIs (#453)

  • All type annotations for Sequence which could be relaxed to Iterable have been updated (#465)


  • Minor fix to wheel builds: do not declare wheels as universal (#444)

  • Fix annotations for server_id on TransferClient methods (#455)

  • Fix visibility typo in GroupsClient (#463)


v3.0.0b3 (2021-08-13)#


  • Flesh out the GroupsClient and add helpers for interacting with the Globus Groups service, including enumerated constants, payload builders, and a high-level client for doing non-batch operations called the GroupsManager (#435, #443)

  • globus-sdk now provides much more complete type annotations coverage, allowing type checkers like mypy to catch a much wider range of usage errors (#442)

v3.0.0b2 (2021-07-16)#



  • Improve the rendering of API exceptions in stack traces to include the method, URI, and authorization scheme (if recognized) (#439)

  • Payload helper objects (TransferData, DeleteData, and SearchQuery) now inherit from a custom object, not dict, but they are still dict-like in behavior (#438)

v3.0.0b1 (2021-07-02)#


  • Add support for TransferClient.get_shared_endpoint_list (#434)


  • Passthrough parameters to SDK methods for query params and body params are no longer accepted as extra keyword arguments. Instead, they must be passed explicitly in a query_params, body_params, or additional_fields dictionary, depending on the context (#433)

  • The interface for retry parameters has been simplified. RetryPolicy objects have been merged into the transport object, and retry parameters like max_retries may now be supplied directly as transport_params (#430)

v3.0.0a4 (2021-06-28)#


  • Add BaseClient to the top-level exports of globus_sdk, so it can now be accessed under the name globus_sdk.BaseClient


  • Fix several paginators which were broken in 3.0.0a3 (#431)


  • Autodocumentation of paginated methods (#432)

v3.0.0a3 (2021-06-25)#


  • Pagination has changed significantly. (#418)

    • Methods which support pagination like TransferClient.endpoint_search no longer return an iterable PaginatedResource type. Instead, these client methods return GlobusHTTPResponse objects with a single page of results.

    • Paginated variants of these methods are available by renaming a call from client.<method> to client.paginated.<method>. So, for example, a TransferClient now supports client.paginated.endpoint_search(). The arguments to this function are the same as the original method.

    • client.paginated.<method> calls return Paginator objects, which support two types of iteration: by pages() and by items(). To replicate the same behavior as SDK v1.x and v2.x PaginatedResource types, use items(), as in client.paginated.endpoint_search("query").items()

v3.0.0a2 (2021-06-10)#


  • A new subpackage is available for public use, globus_sdk.tokenstorage (#405)

  • Add client for Globus Groups API, globus_sdk.GroupsClient. Includes a dedicated error class, globus_sdk.GroupsAPIError


  • Refactor response classes (#425)

v3.0.0a1 (2021-06-04)#


  • Remove allowed_authorizer_types restriction from BaseClient (#407)

  • Remove auth_client=... parameter to OAuthTokenResponse.decode_id_token (#400)


  • globus-sdk now provides PEP561 typing data (#420)

  • OAuthTokenResponse.decode_id_token can now be provided a JWK and openid configuration as parameters. AuthClient implements methods for fetching these data, so that they can be fetched and stored outside of this call. There is no automatic caching of these data. (#403)


  • The interface for GlobusAuthorizer now defines get_authorization_header instead of set_authorization_header, and additional keyword arguments are not allowed (#422)

  • New Transport layer handles HTTP details, variable payload encodings, and automatic request retries (#417)

  • Instead of json_body=... and text_body=..., use data=... combined with encoding="json", encoding="form", or encoding="text" to format payload data. encoding="json" is the default when data is a dict.

  • By default, requests are retried automatically on potentially transient error codes (e.g. http_status=500) and network errors with exponential backoff

  • globus_sdk.BaseClient and its subclasses define retry_policy and transport_class class attributes which can be used to customize the retry behavior used

  • The JWT dependency has been updated to pyjwt>=2,<3 (#416)

  • The config files in ~/.globus.cfg and /etc/globus.cfg are no longer used. Configuration can now be done via environment variables (#409)

  • BaseClient.app_name is a property with a custom setter, replacing set_app_name (#415)


  • Update documentation site style and layout (#423)

v2.0.1 (2021-02-02)#

Python Support#


globus-sdk version 2.0.0 was yanked due to a release issue. Version 2.0.1 is the first 2.x version.

v1.11.0 (2021-01-29)#


  • Add support for task skipped errors via TransferClient.task_skipped_errors and TransferClient.endpoint_manager_task_skipped_errors (#393)


v1.10.0 (2020-12-18)#


  • Add support for pyinstaller installation of globus-sdk (#387)

v1.9.1 (2020-08-27)#


  • Fix GlobusHTTPResponse to handle responses with no Content-Type header (#375)

v1.9.0 (2020-03-05)#


  • Add globus_sdk.IdentityMap, a mapping-like object for Auth ID lookups (#367)

  • Add external_checksum and checksum_algorithm to TransferData.add_item() named arguments (#365)


  • Don’t append trailing slashes when no path is given to a low-level client method like get() (#364)


  • Minor documentation and build improvements (#369, #362)

v1.8.0 (2019-07-11)#


  • Add a property to paginated results which shows if more results are available (#346)


  • Fix RefreshTokenAuthorizer to handle a new refresh_token being sent back by Auth (#359)

  • Fix typo in endpoint_search log message (#355)

  • Fix Globus Web App activation links in docs (#356)


  • Update docs to state that Globus SDK uses semver (#357)

v1.7.1 (2019-02-21)#


  • Allow arbitrary keyword args to TransferData.add_item() and DeleteData.add_item(), which passthrough to the item bodies (#339)


  • Minor internal improvements (#342, #343)

v1.7.0 (2018-12-18)#


  • Add get_task and get_task_list to SearchClient (#335, #336)


  • Internal maintenance and testing improvements (#331, #334, #333)

v1.6.1 (2018-10-30)#


  • Replace egg distribution format with wheels (#314)


  • Internal maintenance

v1.6.0 (2018-08-29)#

Python Support#

  • Officially add support for python 3.7 (#300)



  • RenewingAuthorizer and its subclasses now expose the check_expiration_time method (#309)

  • Allow parameters to be passed to customize the request body of ConfidentialAppAuthClient.oauth2_get_dependent_tokens (#308)

  • Add the patch() method to BaseClient and its subclasses, sending an HTTP PATCH request (#302)


  • Use sha256 hashes of tokens (instead of last 5 chars) in debug logging (#305)

  • Make pickling SDK objects safer (but still not officially supported!) (#284)

  • Malformed SDK usage may now raise GlobusSDKUsageError instead of ValueError. GlobusSDKUsageError inherits from ValueError (#281)


  • Correct handling of environment=”production” as an argument to client construction (#307)


v1.5.0 (2018-02-09)#


  • Add support for retrieving a local Globus Connect Personal endpoint’s UUID (#276)


  • Fix bug in search client parameter handling (#274)

v1.4.1 (2017-12-20)#


  • Support connection timeouts. Default timeout of 60 seconds (#264)


  • Send Content-Type: application/json on requests with JSON request bodies (#266)

v1.4.0 (2017-12-13)#


  • Access token response data by way of scope name (#261)

  • Add (beta) SearchClient class (#259)


  • Make cryptography a strict requirement, globus-sdk[jwt] is no longer necessary (#257, #260)

  • Simplify OAuthTokenResponse.decode_id_token to not require the client as an argument (#255)

v1.3.0 (2017-11-20)#

Python Support#

  • Improve error message when installation onto python2.6 is attempted (#245)


  • Raise errors on client instantiation when GLOBUS_SDK_ENVIRONMENT appears to be invalid, support GLOBUS_SDK_ENVIRONMENT=preview (#247)

v1.2.2 (2017-11-01)#


  • Allow client classes to accept base_url as an argument to _init__() (#241)


  • Improve docs on TransferClient helper classes (#231, #233)


  • Fix packaging to not include testsuite (#232)

v1.2.1 (2017-09-29)#


  • Use PyJWT instead of python-jose for JWT support (#227)

v1.2.0 (2017-08-18)#


  • Add Transfer symlink support (#218)


  • Better handle UTF-8 inputs (#208)

  • Fix endpoint manager resume (#224)


  • Doc Updates & Minor Improvements

v1.1.1 (2017-05-19)#


  • Use correct paging style when making endpoint_manager_task_list calls (#210)

v1.1.0 (2017-05-01)#

Python Support#

  • Add python 3.6 to supported platforms (#180)


  • Add endpoint_manager methods to TransferClient (#191, #199, #200, #201, #203)

  • Support iterable requested_scopes everywhere (#185)


  • Change “identities_set” to “identity_set” for token introspection (#163)

  • Update dev status classifier to 5, prod (#178)


  • Fix docs references to oauth2_start_flow_* (#190)

  • Remove “Beta” from docs (#179)


  • Numerous improvements to testsuite

v1.0.0 (2017-04-10)#


  • Adds AuthAPIError with more flexible error payload handling (#175)

v0.7.2 (2017-04-05)#


  • Add AuthClient.validate_token (#172)


  • Bugfix for on_refresh users of RefreshTokenAuthorizer and ClientCredentialsAuthorizer (#173)

v0.7.1 (2017-04-03)#


  • Remove deprecated oauth2_start_flow_* methods (#170)


  • Add the ClientCredentialsAuthorizer (#164)

  • Add jwt extra install target. pip install "globus_sdk[jwt]" installs python-jose (#169)

v0.7.0 (2017-03-30)#


  • Remove all properties of OAuthTokenResponse other than by_resource_server (#162)


  • Make OAuthTokenResponse.decode_id_token() respect ssl_verify=no configuration (#161)

v0.6.0 (2017-03-21)#


  • Add deadline support to TransferData and DeleteData (#159)


  • Opt out of the Globus Auth behavior where a GET of an identity username will provision that identity (#145)

  • Wrap some requests network-related errors in custom exceptions (#155)


  • Fixup OAuth2 PKCE to be spec-compliant (#154)

v0.5.1 (2017-02-25)#


  • Add support for the prefill_named_grant option to the Native App authorization flow (#143)


  • Unicode string improvements (#129)

  • Better handle unexpected error payloads (#135)