New featuresImpactful changesCLI
Box CLI V2 release
A major version release (V2) has been made to the .See the following links for updated information:- Release notes: Major revision details, breaking changes, and bug fixes.
- Command list: All commands available in the new CLI.
- : Standalone installers and source code options.
WindowsSDKs
Windows .NET SDK v3.10.0 released
- Added functionality for Metadata Cascade Policy
nuget.org/packages/Box.V2
nuget.org/packages/Box.V2.CoreNew featuresJavaSDKs
New featuresAPI
Collaborations now show unregistered users
An additional field,invite_email, has been added to the collaboration return
object in the instance where an unregistered user has been added as a
collaborator on a file or folder. This change was put in place because the
current accessible_by object returned would show null as the result for an
unregistered user. The new field will now show the email address that was used
to invite the user.This change affects the following endpoints:Previously a collaboration object with an unregistered user would look like the
following:Impactful changesAPI
Enterprise events API adds created_by for supervisors
A minor change has been made to the response object of the enterprise events API endpoint in the event that an action is taken by a supervisor or internal admin user, such as a Box admin.Prior to this update the user information of the supervisor or internal admin user would be displayed in thecreated_by field of the response object. With
this update the response will now show generic user information when that user
is a supervisor or internal admin.Previously the created_by field in the response looked like this:New featuresJavaSDKs
Breaking Changes
- Python 2.6 is no longer supported.
- Python 3.3 is no longer supported.
-
client.search()now returns aSearchobject that exposes aquery()method to call the Search API. Useclient.search().query(**search_params)instead ofclient.search(**search_params). -
client.get_memberships(...)has a change in signature. The limit and offset parameters have swapped positions to keep consistency with the rest of the SDK. -
client.groups(...)has been changed toclient.get_groups. The limit and offset parameters have swapped positions. -
The
unshared_atparameter foritem.create_shared_link(...)andfile.get_shared_link_download_url(...)now takes anRFC3339-formatted <https://tools.ietf.org/html/rfc3339#section-5.8>unicodestring instead of adatetime.date. Users migrating fromv1.xcan pass the value ofdate.isoformat()instead of thedateobject itself. -
Events.get_events(...)now returns a list ofEventinstances rather than a list ofdictrepresenting events.Eventinherits fromMappingbut will not have all the same capabilities asdict.-
Your code is affected if you use
Events.get_events(...)and expect a list ofdictrather than a list ofMapping. For example, if you use__setitem__(event['key'] = value),update(),copy(), or if your code depends on thestrorreprof theEvent. Use of__getitem__(event['key']),get(), and otherMappingmethods is unaffected. See the Python documentation for methods supported onMappinginstances. -
Migration: If you still need to treat an
Eventas adict, you can get a deepcopy of the originaldictusing the new property onBaseAPIJSONObject,response_object.
-
Your code is affected if you use
-
LoggingNetworkhas been removed. Logging calls are now made from theDefaultNetworkclass. In addition, the logging format strings in this class have changed in a way that will break logging for any applications that have overridden any of these strings. They now use keyword format placeholders instead of positional placeholders. All custom format strings will now have to use the same keyword format placeholders. Though this is a breaking change, the good news is that using keyword format placeholders means that any future changes will be automatically backwards-compatible (as long as there aren’t any changes to change/remove any of the keywords). -
File.update_contents()andFile.update_contents_with_stream()now correctly return aFileobject with the correct internal JSON structure. Previously it would return aFileobject where the file JSON is hidden insidefile['entries'][0]. This is a bug fix, but will be a breaking change for any clients that have already written code to handle the bug. -
Comparing two objects (e.g. a
Fileand aFolder) that have the same Box ID but different types with==will now correctly returnFalse. -
The following methods now return iterators over the entire collection of returned objects, rather than
a single page:
client.users()client.groups()client.search().query()folder.get_items()
folder.get_items()now returns an iterator,folder.get_items_limit_offset()andfolder.get_items_marker()have been removed. To use marker based paging withfolder.get_items(), pass theuse_marker=Trueparameter and optionally specify amarkerparameter to begin paging from that point in the collection. Additionally,group.membership()has been renamed togroup.get_memberships(), and returns an iterator of membership objects. This method no longer provides the option to return tuples with paging information. -
The
Translatorclass has been reworked;translator.get(...)still returns the constructor for the object class corresponding to the passed in type, buttranslator.translate(...)now takes aSessionand response object directly and produces the translated object. This method will also translate any nested objects found.- This change obviates the need for
GroupMembershipto have a custom constructor; it now uses the defaultBaseObjectconstructor.
- This change obviates the need for
Features
- All publicly documented API endpoints and parameters should now be supported by the SDK
-
Added more flexibility to the object translation system:
- Can create non-global
Translatorinstances, which can extend or not-extend the global defaultTranslator. - Can initialize
BoxSessionwith a customTranslator. - Can register custom subclasses on the
Translatorwhich is associated with aBoxSessionor aClient. - All translation of API responses now use the
Translatorthat is referenced by theBoxSession, instead of directly using the global defaultTranslator. - Nested objects are now translated by
translator.translate()
- Can create non-global
-
When the
auto_session_renewalisTruewhen calling any of the request methods onBoxSession, if there is no access token,BoxSessionwill renew the token before making the request. This saves an API call. -
Auth objects can now be closed, which prevents them from being used to
request new tokens. This will also revoke any existing tokens (though that
feature can be turned off by passing
revoke=False). Also introduces aclosing()context manager method, which will auto-close the auth object on exit. -
Various enhancements to the
JWTAuthbaseclass:- The
authenticate_app_user()method is renamed toauthenticate_user(), to reflect that it may now be used to authenticate managed users as well. See the methoddocstringfor details.authenticate_app_user()is now an alias ofauthenticate_user(), in order to not introduce an unnecessary backwards-incompatibility. - The
userargument toauthenticate_user()may now be either a user ID string or aUserinstance. Before it had to be aUserinstance. - The constructor now accepts an optional
userkeyword argument, which may be a user ID string or aUserinstance. When this is passed,authenticate_user()and can be called without passing a value for theuserargument. More importantly, this means thatrefresh()can be called immediately after construction, with no need for a manual call toauthenticate_user(). Combined with the aforementioned improvement to theauto_session_renewalfunctionality ofBoxSession, this means that authentication forJWTAuthobjects can be done completely automatically, at the time of first API call. - The constructor now supports passing the RSA private key in two different
ways: by file system path (existing functionality), or by passing the key
data directly (new functionality). The
rsa_private_key_file_sys_pathparameter is now optional, but it is required to pass exactly one ofrsa_private_key_file_sys_pathorrsa_private_key_data. - Document that the
enterprise_idargument toJWTAuthis allowed to beNone. authenticate_instance()now accepts anenterpriseargument, which can be used to set and authenticate as the enterprise service account user, ifNonewas passed forenterprise_idat construction time.- Authentications that fail due to the expiration time not falling within the correct window of time are now automatically retried using the time given in the Date header of the Box API response. This can happen naturally when the system time of the machine running the Box SDK doesn’t agree with the system time of the Box API servers.
- The
-
Added an
Eventclass. -
Moved
metadata()method toItemso it’s now available forFolderas well asFile. -
The
BaseAPIJSONObjectbaseclass (which is a superclass of all API response objects) now supports__contains__and__iter__. They behave the same as forMapping. That is,__contains__checks for JSON keys in the object, and__iter__yields all of the object’s keys. -
Added a
RecentItemclass. -
Added
client.get_recent_items()to retrieve a user’s recently accessed items on Box. -
Added support for the
can_view_pathparameter when creating new collaborations. -
Added
BoxObjectCollectionand subclassesLimitOffsetBasedObjectCollectionandMarkerBasedObjectCollectionto more directly manage paging of objects from an endpoint. These classes manage the logic of constructing requests to an endpoint and storing the results, then provide__next__to iterate over the results. The option to return results one by one or as aPageof results is also provided. -
Added a
downscope_token()method to theClientclass. This generates a token that has its permissions reduced to the provided scopes and for the optionally providedFileorFolder. -
Added methods for configuring
JWTAuthfrom config file:JWTAuth.from_settings_fileandJWTAuth.from_settings_dictionary. -
Added
network_responseproperty toBoxOAuthException. -
API Configuration can now be done per
BoxSessioninstance.
Other
- Added extra information to
BoxAPIException. - Added
collaboration()method toClient. - Reworked the class hierarchy. Previously,
BaseEndpointwas the parent ofBaseObjectwhich was the parent of all smart objects. NowBaseObjectis a child of bothBaseEndpointandBaseAPIJSONObject.BaseObjectis the parent of all objects that are a part of the REST API. Another subclass ofBaseAPIJSONObject,APIJSONObject, was created to represent pseudo-smart objects such asEventthat are not directly accessible through an API endpoint. - Added
network_response_constructoras an optional property on theNetworkinterface. Implementations are encouraged to override this property, and use it to constructNetworkResponseinstances. That way, subclass implementations can extend the functionality of theNetworkResponse, by re-overriding this property. This property is defined and used in theDefaultNetworkimplementation. - Move response logging to a new
LoggingNetworkResponseclass (which is made possible by the aforementionednetwork_response_constructorproperty). Now the SDK decides whether to log the response body, based on whether the caller reads or streams the content. - Add more information to the request/response logs from
LoggingNetwork. - Add logging for request exceptions in
LoggingNetwork. - Bugfix so that the return value of
JWTAuth.refresh()correctly matches that of the auth interface (by returning a tuple of ((access token), (refresh token or None)), instead of only the access token). In particular, this fixes an exception inBoxSessionthat always occurred when it tried to refresh anyJWTAuthobject. - Fixed an exception that was being raised from
ExtendableEnumMeta.__dir__(). CPython3.6 support.- Increased required minimum version of six to 1.9.0.
New featuresImpactful changesPythonSDKs
Python SDK v2 Launched
A major update (version 2.0) of the Box Python SDK has been released with significant updates and API feature parity completion. See here for full API release notes. Along with the release, the following documentation changes have been made:- Updated Python quick start guides.
- Updated Python API references code samples.
New featuresUI Elements
New Box Open With Sidebar UI Element
We have released an open beta version of a new Box UI Element, the ‘Open With’ element. ‘Open With’ will allow developers to embed a menu to open content stored in box with a partner application. The partners available with this beta release are Adobe Sign and G Suite.Documentation and setup instructions for this new element are available here.JavaSDKs
New featuresUI Elements
Annotations available for Excel files in preview
Currently, annotations capabilities don’t appear within Excel files in preview, either via the Box UI Content Preview element or expiring embed, even if annotations are enabled (showAnnotations=true).Starting on September 13th, 2018, users will be able to annotate Excel
files like they can other file types (PDFs, docs, PPT). All 3 annotation
types (highlight, point, and drawing) will be supported. If showAnnotations
is set to true annotations on Excel files will be displayed.WindowsSDKs
Windows .NET SDK v3.9.3 released
- Strong named the assembly
nuget.org/packages/Box.V2/3.9.3
nuget.org/packages/Box.V2.Core/3.9.3New featuresAPI
Add new fields to folder update and get info endpoints
Two major releases have been added to the update folder API endpoint,is_collaboration_restricted_to_enterprise. This is a boolean value made to
set whether future collaborations should be restricted to within the enterprise
only. This does not affect existing collaborations. The value of this field
will also be displayed when calling the get folder info endpoint.New featuresAPI
Add new action_by field to enterprise events
To better document admin actions taken on user accounts, we have added anaction_by mini-user object in the enterprise events response data. This field
will display the admin account which performed the user action, if applicable.For enterprise admins this would include the ID, login, and name of their
account. For actions taken by a Box internal admin this would be:- id:
box_support - login:
support@box.com - name:
Box Support
Impactful changesAPI
Box user_id field size changed
Theuser_id field, used to track all platform users (that is, managed,
externally managed, and app users), will soon be updated to begin producing
64-bit integer numeric values, rather than the 32-bit integers it creates
currently.For customers who are translating the produced user_id strings from our APIs
into 32-bit integer fields, your internal systems are affected by this update,
and you must update them to support the new 64-bit user_id integer size. We
recommend that all user_id fields be stored as strings, as per our
API documentation.Generic method added to the Salesforce SDK
The Box for Salesforce Developer Toolkit now provides a global method,sendRequest that accepts an HttpRequest
object as a parameter and returns an
HttpResponse
object. This method will use the authentication details of the Service
Account to make calls to Box’s APIs, allowing you to focus on incorporating
the business logic of your integration. For more details about the added
method, please see the method details
and sample code
in the Box metadata sidebar for Salesforce Developer Toolkit documentation.API
Expanded Relay Workflow API
We have expanded the capabilities of Box Relay, a workflow tool co-developed between Box and IBM, with a new Workflow API. The Relay Workflow API allows you to launch Box Relay workflows and retrieve the statuses of those workflows from within your application. It also allows you to view which workflow templates have been published in file directly into your instance of Box Relay. For more information about the API, please see our announcement blog post.Reports
Historical Platform Activity CSV report
A new report has been made available via the website. Documentation is available in the Box Admin Console that displays an enterprise’s historical utilization of platform resources. This report displays an enterprise’s Monthly Active Users, API calls, and bandwidth consumption by application by month for January 1, 2017 to March 31, 2018. More information can be found here.CLI
Update to the Box CLI
We have released updates to the Box CLI. This version includes the following updates:- New Multizones commands: Adds support for Box Multizones for data residency.
- Fix for user CSV operations: Fixes a bug that prevented users using Open With Element: The Open With element has been moved from saving users data beta to CSV files.
- Ability to set
can_non_owners_inviteflag on folder updates: Allows setting whether non-owners can invite other users to collaborate on the folder.
- New CLI configuration dump command: Adds the ability to dump the Box configuration file as a single string, optionally with escaped quotes, in order to copy the value to general availability. Open With delivers an environment variable or configuration property (for example, in AWS individual button or Azure).
New featuresSDKsAndroid
Box Android SDK v4.2.0 released
This version is to provide support for 16+ devices once TLS 1.0 is deprecated.WindowsSDKs
Windows .NET SDK v3.9.2 released
- Added support for setting flag allowing non owners of a folder to invite collaborators.
nuget.org/packages/Box.V2/3.9.2
nuget.org/packages/Box.V2.Core/3.9.2WindowsSDKs
Windows .NET SDK v3.9.1 released
Fixed bug where Xamarin applications would run out of connections.nuget.org/packages/Box.V2/3.9.1
nuget.org/packages/Box.V2.Core/3.9.1JavaSDKs
New featuresJavaSDKs
New featuresWindowsSDKs
Windows .NET SDK v3.9.0 released
- Added support for Storage Policies
nuget.org/packages/Box.V2/3.9.0
nuget.org/packages/Box.V2.Core/3.9.0New featuresJavaSDKs
New featuresWindowsSDKs
Windows .NET SDK v3.8.0 released
- Fixed an issue where users could not create
BoxClientonXamarin - Added File property to
BoxLockobjects in events - Added
MetadataManager.DeleteMetadataTemplate(string scope, string template)for deleting a Metadata template - Made API URLs modifiable in
BoxConfig - Improved API response error objects/messages
nuget.org/packages/Box.V2/3.8.0
nuget.org/packages/Box.V2.Core/3.8.0New featuresJavaSDKs
New features
Platform Activity CSV report
A report has been made available in the Box Admin Console that displays an enterprise’s utilization of platform resources. The first version of this report displays integration into the total number of API calls to the Box existing Content API by day effective April 1st, 2018. Future iterations of this report will display additional resource consumption (Monthly Active Users, bandwidth, and storage) by service and will also include historical data. For more information, please see the article in Box product documentation.New featuresWindowsSDKs
Windows .NET SDK v3.7.0 released
- Added support for assigning a retention policy to a metadata template
- Added
CONTENT_ACCESSevent type to enum
nuget.org/packages/Box.V2/3.7.0
nuget.org/packages/Box.V2.Core/3.7.0New featuresAPI
Metadata-driven retention policies
We have introduced new functionality in the Retention Policy Object API Explorer element to support metadata-driven retention policies, where retention policies can be applied to individual files based on custom metadata. This also enables customers to configure retention policies at the launch file level in addition to at the global and folder levels. In addition to bringing these new, expanded Box Governance capabilities to Box Admins via the Box Admin Console, we’re also making these capabilities available via the Retention Policy and Retention Assignment APIs and in Box’s Java, Node, and .NET SDKs.New featuresCLI
Box CLI v1.2.0 released
- Created bulk actions for the following commands:
- users
- update
- groups
- create
- update
- delete
- group memberships
- create
- update
- delete
- collaborations
- add
- update
- delete
- Added filtering by event type to
box events getandbox events poll - Added a command for deleting metadata templates from files and folders.
- Bumped underlying
box-windows-sdktov3.6.0 - Fixed a bug hindering creating float types for metadata on files and folders.
- Fixed a bug that did not assign the
User-AgentHTTP header correctly. - Fixed a bug that wasn’t reporting all errors to
stderr. - Fixed a bug with bulk creation of metadata templates.
- Fixed a bug giving duplicate commands on group
membershipcommand. - Fixed a bug with creating the wrong object for
tracking_codeson users. - Fixed a bug requiring an ID in CSV files on bulk creation of users.
New featuresJavaSDKs
New featuresAPI
multiSelect field type added to metadata templates
We have introduced a new attribute type to Metadata Templates calledmultiSelect, which translates to multiple selection. This new attribute type
allows for a checkbox style multiple selection of values when composing
template instances on files content with Adobe Sign, G Suite, or folders.The addition of this field introduces changes to the
Metadata Object (template instance)
since enabled multiSelect options are represented using an array of string
values, where each string in the array corresponds to the key of a multiSelect
option.API
Update to Box Annotations
The annotations update announced on March 5, 2018 has been re-enabled.New featuresWindowsSDKs
Windows .NET SDK v3.6.0 released
Changelognuget.org/packages/Box.V2/3.6.0
nuget.org/packages/Box.V2.CoreNew featuresJavaSDKs
WindowsSDKs
Windows .NET SDK v3.5.2 released
Fix .NET Core packagenuget.org/packages/Box.V2/3.5.2
nuget.org/packages/Box.V2.Core/3.5.2New featuresWindowsSDKs
Windows .NET SDK v3.5.1 released
- Switched to exponential backoff when the SDK receives a rate limit or server error response.
- Force support for TLS
v1.1or higher when available to improve the security of connections to the Box API. - Perform modified retry on JWT auth for when the local clock and the Box Server clock are not aligned as well as if the JWT ID has already been consumed.
- Made
nameparameter optional onRestoreTrashedAsync().
nuget.org/packages/Box.V2/3.5.1
nuget.org/packages/Box.V2.Core/3.5.1Impactful changesUI Elements
Update to Box Annotations
Due to performance issues reported by some users, the update has been rolled back to prevent critical business applications from getting impacted. Drawing Annotations and Point Annotations mode features have now been turned off. We do not have an ETA for performance fixes or when these features will be re-enabled. We sincerely apologize for the inconvenience.Users who used the Drawing Annotations capability while it was available will still be able to access their annotations once the feature Edit. Documentation is re-enabled. Until then, the said annotations will be stored in our application data store but won’t be exposed via the viewers.New featuresJavaSDKs
UI Elements
Update to Box Annotations
We will be introducing two enhancements to the annotations features available via the Box API that your customer uses in their custom application. The updates are as follows:- Point Annotations mode: We are enhancing point annotations by introducing Point Annotations mode. This allows users to expediently add annotations on a document without having to re-select the point annotation icon after each annotation. here.
- Drawing Annotations via Expiring Embed: We launched Drawing Annotations in November of 2017. This provided end users the ability to free-form draw on their touch-enabled devices using touch or a stylus. We are excited to share that we’re making Drawing Annotations Full release announcement is available via the Expiring Embed. Users using annotations via the Get Embed Link API will now have a whole new way to express themselves via Box Preview.
JavaSDKs
Impactful changesAPI
Breaking change to Metadata APIs
On March 29, 2018, we will introduce a new data type (array of strings) in the response body of the Metadata API endpoints. We are making this change because we are adding a new field type to metadata templates in Box calledmultiSelect.
This new field type represents a checkbox type multiple selection of values
when creating template instances on files or folders. The selected options for
this field type are stored in an array of strings, where each string in the
array corresponds to the key of the chosen multiSelect option.An example metadata template JSON response body is shown below. The value for
the key audience1 shows an example of the new data type (array of strings) that
we are introducing in this change.New featuresJavaSDKs
New featuresJavaSDKs
WindowsSDKs
Windows .NET SDK v3.4.2 released
- Updated Box SDK Version in
NuSpecfile to fix dependency issues forBox V2andBox V2.Core.
nuget.org/packages/Box.V2/3.4.2
nuget.org/packages/Box.V2.Core/3.4.2New featuresJavaSDKs
JavaSDKs
New featuresWindowsSDKs
Windows .NET SDK v3.4.1 released
- Added support for Allowed Collaboration Domains
- Added Event Type enum
- Fixed deserialization issue with
BoxRepresentationStatus
nuget.org/packages/Box.V2/3.4.1
nuget.org/packages/Box.V2.Core/3.4.1New featuresImpactful changesJavaSDKs
Java SDK v2.9.0 released
- Search
readmeupdate (#506) - Add option to pass file
SHA-1hash for upload integrity (#502) - Events log limit (#507)
- Terms of Service (#484)
- Change
wiremockport (#505) - Delete redundant
response.disconnect()frommoveFolderToUser()(#485) - Events
readmepatch (#503) - Add missing webhook triggers to enum (#497)
- Fix
MetadataTemplate.updateMetadataTemplate()type error (#498) - Add missing event types to enum (#500)
- Add
modified_attimestamp toBoxComment.Info(#501) - Collaboration whitelists (#492)
- Trash empty body patch (#495)
- Adding support for indefinite Box file locking by allowing null expiration (#494)
- Additional test in response for Batch API (#474)
- Fixing
BoxDeveloperEditionAPIConnection - decryptPrivateKey() - PEMParser returns PrivateKeyInfo already - Invalid cast#470 (#471)
