> ## Documentation Index
> Fetch the complete documentation index at: https://developer.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 2018

> Box Platform changelog: API, SDK, and product updates from 2018.

export const Link = ({href, children, className, ...props}) => {
  const localizedHref = localizeLink(href);
  return <a href={localizedHref} className={className} {...props}>
      {children}
    </a>;
};

<Update label="2018-12-21" tags={["New features", "Impactful changes", "CLI"]}>
  ## Box CLI V2 release

  A major version release (V2) has been made to the <Link href="/guides/cli">Box CLI</Link>.

  See the following links for updated information:

  * [Release notes](https://github.com/box/boxcli/blob/master/CHANGELOG.md#200): Major revision details, breaking
    changes, and bug fixes.
  * [Command list](https://github.com/box/boxcli#command-topics): All commands available in the new
    CLI.
  * <Link href="/guides/cli">Installation options</Link>: Standalone installers and
    source code options.
</Update>

<Update label="2018-12-14" tags={["Windows", "SDKs"]}>
  ## Windows .NET SDK v3.10.0 released

  1. Added functionality for Metadata Cascade Policy

  [`nuget.org/packages/Box.V2`](https://www.nuget.org/packages/Box.V2)
  [`nuget.org/packages/Box.V2.Core`](https://www.nuget.org/packages/Box.V2.Core/)
</Update>

<Update label="2018-12-13" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.25.0 released

  1. Allow content streaming to box through `outputstream`. [#667](https://github.com/box/box-java-sdk/pull/667)
</Update>

<Update label="2018-12-12" tags={["New features", "API"]}>
  ## 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:

  * [Get Collaboration](/reference/get-collaborations-id)
  * [Get File Collaborations](/reference/get-files-id-collaborations)
  * [Get Folder Collaborations](/reference/get-folders-id-collaborations)

  Previously a collaboration object with an unregistered user would look like the
  following:

  ```js theme={null}
  {
    "type": "collaboration",
    "id": "376164239",
    .....
    "accessible_by":  null
    .....
  }
  ```

  With this new update the object returned would look like the following:

  ```js theme={null}
  {
    "type": "collaboration",
    "id": "376164239",
    ......
    "accessible_by":  null
    "invite_email": "sadfasdf@box.com",
    },
    ......
  }
  ```
</Update>

<Update label="2018-12-05" tags={["Impactful changes", "API"]}>
  ## Enterprise events API adds created\_by for supervisors

  A minor change has been made to the response object of the
  [enterprise events](/reference/get-events/#request) 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 the `created_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:

  ```js theme={null}
  "created_by": {
    "type": "user",
    "id": "2030401181",
    "name": "sshah+iadev",
    "login": "admin_sshah"
  }
  ```

  With this update that same response would look similar to the following:

  ```js theme={null}
  "created_by": {
    "type": "user",
    "id": "box_support",
    "name": "Box Support",
    "login": "support@box.com"
  }
  ```
</Update>

<Update label="2018-11-16" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.24.0 released

  1. added tests and implementation for options object ([#661](https://github.com/box/box-java-sdk/pull/661))
  2. Expose object type on `BoxItem` ([#662](https://github.com/box/box-java-sdk/pull/662))
  3. Allow per-connection timeouts ([#660](https://github.com/box/box-java-sdk/pull/660))
  4. Add global setting for max requests ([#657](https://github.com/box/box-java-sdk/pull/657))
  5. added overload for `is_ongoing` field and added getter for `is_ongoing` ([#653](https://github.com/box/box-java-sdk/pull/653))
</Update>

<Update label="2018-11-01" description="Python SDK v2.0.0 released" tags={["New features", "Impactful changes", "Python", "SDKs"]}>
  ## Breaking Changes

  * Python 2.6 is no longer supported.

  * Python 3.3 is no longer supported.

  * `client.search()` now returns a `Search` object that exposes a `query()` method to call the Search API.
    Use `client.search().query(**search_params)` instead of `client.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 to `client.get_groups`. The limit and offset parameters have swapped positions.

  * The `unshared_at` parameter for `item.create_shared_link(...)` and `file.get_shared_link_download_url(...)`
    now takes an `RFC3339-formatted <https://tools.ietf.org/html/rfc3339#section-5.8>` `unicode` string instead of a
    `datetime.date`.  Users migrating from `v1.x` can pass the value of `date.isoformat()` instead of the `date`
    object itself.

  * `Events.get_events(...)` now returns a list of `Event` instances rather than a list of `dict`
    representing events.  `Event` inherits from `Mapping` but will not have all the same capabilities as
    `dict`.

    * Your code is affected if you use `Events.get_events(...)` and expect a list of `dict` rather than a list of
      `Mapping`.  For example, if you use `__setitem__` (`event['key'] = value`), `update()`, `copy()`, or
      if your code depends on the `str` or `repr` of the `Event`.  Use of `__getitem__` (`event['key']`),
      `get()`, and other `Mapping` methods is unaffected.  See the [Python
      documentation](https://docs.python.org/2.7/library/collections.html#collections-abstract-base-classes) for methods supported on
      `Mapping` instances.

    * Migration: If you still need to treat an `Event` as a `dict`, you can get a deepcopy of the original `dict`
      using the new property on `BaseAPIJSONObject`, `response_object`.

  * `LoggingNetwork` has been removed. Logging calls are now made from the `DefaultNetwork` class. 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()` and `File.update_contents_with_stream()` now
    correctly return a `File` object with the correct internal JSON structure.
    Previously it would return a `File` object where the file JSON is hidden
    inside `file['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 `File` and a `Folder`) that have the same Box ID but different types with `==`
    will now correctly return `False`.

  * 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()`

    Since `folder.get_items()` now returns an iterator, `folder.get_items_limit_offset()` and
    `folder.get_items_marker()` have been removed.  To use marker based paging with `folder.get_items()`,
    pass the `use_marker=True` parameter and optionally specify a `marker` parameter to begin paging from that
    point in the collection.

    Additionally, `group.membership()` has been renamed to `group.get_memberships()`, and returns an iterator of
    membership objects.  This method no longer provides the option to return tuples with paging information.

  * The `Translator` class has been reworked; `translator.get(...)` still returns the constructor for the object class
    corresponding to the passed in type, but `translator.translate(...)` now takes a `Session` and response object
    directly and produces the translated object.  This method will also translate any nested objects found.

    * This change obviates the need for `GroupMembership` to have a custom constructor; it now uses the default
      `BaseObject` constructor.

  ## 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 `Translator` instances, which can extend or
      not-extend the global default `Translator`.
    * Can initialize `BoxSession` with a custom `Translator`.
    * Can register custom subclasses on the `Translator` which is associated
      with a `BoxSession` or a `Client`.
    * All translation of API responses now use the `Translator` that is
      referenced by the `BoxSession`, instead of directly using the global
      default `Translator`.
    * Nested objects are now translated by `translator.translate()`

  * When the `auto_session_renewal` is `True` when calling any of the request
    methods on `BoxSession`, if there is no access token, `BoxSession` will
    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 a
    `closing()` context manager method, which will auto-close the auth object
    on exit.

  * Various enhancements to the `JWTAuth` baseclass:

    * The `authenticate_app_user()` method is renamed to
      `authenticate_user()`, to reflect that it may now be used to authenticate
      managed users as well. See the method `docstring` for details.
      `authenticate_app_user()` is now an alias of `authenticate_user()`, in
      order to not introduce an unnecessary backwards-incompatibility.
    * The `user` argument to `authenticate_user()` may now be either a user
      ID string or a `User` instance. Before it had to be a `User` instance.
    * The constructor now accepts an optional `user` keyword argument, which
      may be a user ID string or a `User` instance. When this is passed,
      `authenticate_user()` and can be called without passing a value for the
      `user` argument. More importantly, this means that `refresh()` can be
      called immediately after construction, with no need for a manual call to
      `authenticate_user()`. Combined with the aforementioned improvement to
      the `auto_session_renewal` functionality of `BoxSession`, this means
      that authentication for `JWTAuth` objects 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_path`
      parameter is now optional, but it is required to pass exactly one of
      `rsa_private_key_file_sys_path` or `rsa_private_key_data`.
    * Document that the `enterprise_id` argument to `JWTAuth` is allowed to
      be `None`.
    * `authenticate_instance()` now accepts an `enterprise` argument, which
      can be used to set and authenticate as the enterprise service account user,
      if `None` was passed for `enterprise_id` at 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.

  * Added an `Event` class.

  * Moved `metadata()` method to `Item` so it's now available for `Folder`
    as well as `File`.

  * The `BaseAPIJSONObject` baseclass (which is a superclass of all API
    response objects) now supports `__contains__` and `__iter__`. They behave
    the same as for `Mapping`. That is, `__contains__` checks for JSON keys
    in the object, and `__iter__` yields all of the object's keys.

  * Added a `RecentItem` class.

  * Added `client.get_recent_items()` to retrieve a user's recently accessed items on Box.

  * Added support for the `can_view_path` parameter when creating new collaborations.

  * Added `BoxObjectCollection` and subclasses `LimitOffsetBasedObjectCollection` and
    `MarkerBasedObjectCollection` to 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 a `Page` of results is also provided.

  * Added a `downscope_token()` method to the `Client` class. This generates a token that
    has its permissions reduced to the provided scopes and for the optionally provided
    `File` or `Folder`.

  * Added methods for configuring `JWTAuth` from config file: `JWTAuth.from_settings_file` and
    `JWTAuth.from_settings_dictionary`.

  * Added `network_response` property to `BoxOAuthException`.

  * API Configuration can now be done per `BoxSession` instance.

  ## Other

  * Added extra information to `BoxAPIException`.
  * Added `collaboration()` method to `Client`.
  * Reworked the class hierarchy.  Previously, `BaseEndpoint` was the parent of `BaseObject` which was the parent
    of all smart objects.  Now `BaseObject` is a child of both `BaseEndpoint` and `BaseAPIJSONObject`.
    `BaseObject` is the parent of all objects that are a part of the REST API.  Another subclass of
    `BaseAPIJSONObject`, `APIJSONObject`, was created to represent pseudo-smart objects such as `Event` that are not
    directly accessible through an API endpoint.
  * Added `network_response_constructor` as an optional property on the
    `Network` interface. Implementations are encouraged to override this
    property, and use it to construct `NetworkResponse` instances. That way,
    subclass implementations can extend the functionality of the
    `NetworkResponse`, by re-overriding this property. This property is defined
    and used in the `DefaultNetwork` implementation.
  * Move response logging to a new `LoggingNetworkResponse` class (which is
    made possible by the aforementioned `network_response_constructor`
    property). 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 in `BoxSession` that always occurred
    when it tried to refresh any `JWTAuth` object.
  * Fixed an exception that was being raised from `ExtendableEnumMeta.__dir__()`.
  * `CPython` 3.6 support.
  * Increased required minimum version of six to 1.9.0.
</Update>

<Update label="2018-10-19" tags={["New features", "Impactful changes", "Python", "SDKs"]}>
  ## Python SDK v2 Launched

  A major update (version 2.0) of the [Box Python SDK](https://github.com/box/box-python-sdk) has been
  released with significant updates and API feature parity completion.
  [See here](https://github.com/box/box-python-sdk/releases/tag/v2.0.0) for full API release notes. Along with
  the release, the following documentation changes have been made:

  * Updated Python [quick start guides](/guides/).
  * Updated Python [API references](/reference/) code samples.
</Update>

<Update label="2018-09-27" tags={["New features", "UI 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](/guides/embed/ui-elements).
</Update>

<Update label="2018-09-27" tags={["Java", "SDKs"]}>
  ## Java SDK v2.23.2 released

  1. Batch headers patch ([#649](https://github.com/box/box-java-sdk/pull/649))
</Update>

<Update label="2018-09-13" tags={["Java", "SDKs"]}>
  ## Java SDK v2.23.1 released

  1. Fix opening too many TCP connections when issuing a high number of requests ([#646](https://github.com/box/box-java-sdk/pull/646))
</Update>

<Update label="2018-09-13" tags={["New features", "UI 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](/guides/embed/ui-elements) 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.
</Update>

<Update label="2018-09-04" tags={["Windows", "SDKs"]}>
  ## Windows .NET SDK v3.9.3 released

  * Strong named the assembly

  [`nuget.org/packages/Box.V2/3.9.3`](https://www.nuget.org/packages/Box.V2/3.9.3)
  [`nuget.org/packages/Box.V2.Core/3.9.3`](https://www.nuget.org/packages/Box.V2.Core/3.9.3)
</Update>

<Update label="2018-08-23" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.23.0 released

  1. Metadata cascade policy ([#603](https://github.com/box/box-java-sdk/pull/603))
</Update>

<Update label="2018-08-21" tags={["New features", "API"]}>
  ## Add new fields to folder update and get info endpoints

  Two major releases have been added to the [update folder API endpoint](/reference/put-folders-id),
  `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](/reference/get-folders-id).
</Update>

<Update label="2018-08-21" tags={["New features", "API"]}>
  ## Add new action\_by field to enterprise events

  To better document admin actions taken on user accounts, we have added an
  `action_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`

  The additional object is documented within the enterprise
  [event object attributes](/reference/events-resources#event).
</Update>

<Update label="2018-08-17" tags={["Impactful changes", "API"]}>
  ## Box user\_id field size changed

  The `user_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](/reference/users-resources#user).
</Update>

<Update label="2018-08-16" description="Generic method added to the Salesforce SDK" tags={["Salesforce", "SDKs"]}>
  ## Generic method added to the Salesforce SDK

  The Box for Salesforce Developer Toolkit now provides a global method,
  `sendRequest` that accepts an [`HttpRequest`](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restful_http_httprequest.htm)
  object as a parameter and returns an
  [`HttpResponse`](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restful_http_httpresponse.htm#apex_classes_restful_http_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](/guides/tooling/sdks/salesforce)
  and [sample code](/guides/tooling/sdks/salesforce)
  in the Box metadata sidebar for Salesforce Developer Toolkit documentation.
</Update>

<Update label="2018-08-09" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.22.0 Released

  1. patch for transfer content to another user ([#632](https://github.com/box/box-java-sdk/pull/632))
</Update>

<Update label="2018-07-31" tags={["API"]}>
  ## Expanded Relay Workflow API

  We have expanded the capabilities of [Box Relay](https://www.box.com/collaboration/relay-workflow), 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](https://medium.com/box-developer-blog/introducing-the-box-relay-workflow-api-f6eed1457711).
</Update>

<Update label="2018-07-11" tags={["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](https://docs.box.com/en/box-admin-tools/reporting-and-insights/running-reports).
</Update>

<Update label="2018-07-06" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.21.0 released

  1. `Sharedlink` password ([#623](https://github.com/box/box-java-sdk/pull/623))
  2. Correct link ([#626](https://github.com/box/box-java-sdk/pull/626))
</Update>

<Update label="2018-06-28" tags={["Java", "SDKs"]}>
  ## Java SDK v2.20.2 released

  1. Case Insensitivity for Response Headers ([#620](https://github.com/box/box-java-sdk/pull/620))
</Update>

<Update label="2018-06-25" tags={["CLI"]}>
  ## Update to the Box CLI

  We have released updates to the [Box CLI](/guides/cli). This
  version includes the following updates:

  * **[New Multizones commands](https://github.com/box/boxcli/pull/91)**: Adds support for
    [Box Multizones](https://blog.box.com/blog/multizones-storage-data-residency-compliance/) for data residency.
  * **[Fix for user CSV operations](https://github.com/box/boxcli/pull/82)**: 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_invite` flag on folder updates](https://github.com/box/boxcli/pull/92)**:
    Allows setting whether non-owners can invite other users to collaborate on the
    folder.

  * **[New CLI configuration dump command](https://github.com/box/boxcli/pull/83)**: 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).
</Update>

<Update label="2018-06-18" tags={["New features", "SDKs", "Android"]}>
  ## Box Android SDK v4.2.0 released

  This version is to provide support for 16+ devices once TLS 1.0 is deprecated.
</Update>

<Update label="2018-06-14" tags={["Windows", "SDKs"]}>
  ## 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`](https://www.nuget.org/packages/Box.V2/3.9.2)
  [`nuget.org/packages/Box.V2.Core/3.9.2`](https://www.nuget.org/packages/Box.V2.Core/3.9.2)
</Update>

<Update label="2018-06-07" tags={["Windows", "SDKs"]}>
  ## 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`](https://www.nuget.org/packages/Box.V2/3.9.1)
  [`nuget.org/packages/Box.V2.Core/3.9.1`](https://www.nuget.org/packages/Box.V2.Core/3.9.1)
</Update>

<Update label="2018-06-04" tags={["Java", "SDKs"]}>
  ## Java SDK v2.20.1 released

  1. Handle JSON parse error in response exception ([#615](https://github.com/box/box-java-sdk/pull/615))
  2. Fix return object for `uploadNewVersion()` ([#614](https://github.com/box/box-java-sdk/pull/614))
</Update>

<Update label="2018-05-24" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.20.0 released

  * multi select metadata field ([#610](https://github.com/box/box-java-sdk/pull/610))
  * Fix check for duplicate As-User headers ([#612](https://github.com/box/box-java-sdk/pull/612))
</Update>

<Update label="2018-05-10" tags={["New features", "Windows", "SDKs"]}>
  ## Windows .NET SDK v3.9.0 released

  * Added support for Storage Policies

  [`nuget.org/packages/Box.V2/3.9.0`](https://www.nuget.org/packages/Box.V2/3.9.0)
  [`nuget.org/packages/Box.V2.Core/3.9.0`](https://www.nuget.org/packages/Box.V2.Core/3.9.0)
</Update>

<Update label="2018-05-10" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.19.0 released

  1. Multizones ([#598](https://github.com/box/box-java-sdk/pull/598))
  2. Add `getLogin()` method on `BoxCollaborator.Info` ([#602](https://github.com/box/box-java-sdk/pull/602))
  3. Add support for `multiSelect` fields in metadata ([#597](https://github.com/box/box-java-sdk/pull/597))
</Update>

<Update label="2018-04-30" tags={["New features", "Windows", "SDKs"]}>
  ## Windows .NET SDK v3.8.0 released

  * Fixed an issue where users could not create `BoxClient` on `Xamarin`
  * Added File property to `BoxLock` objects 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`](https://www.nuget.org/packages/Box.V2/3.8.0)
  [`nuget.org/packages/Box.V2.Core/3.8.0`](https://www.nuget.org/packages/Box.V2.Core/3.8.0)
</Update>

<Update label="2018-04-30" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.18.0 released

  1. Error object ([#588](https://github.com/box/box-java-sdk/pull/588))
  2. Quick fix for NPE on `request.toString()` in interceptor ([#595](https://github.com/box/box-java-sdk/pull/595))
  3. Add support for fetching representation content ([#583](https://github.com/box/box-java-sdk/pull/583))
  4. fixed `BoxConfig` constructor method where `privateKeyPassword` was not being set ([#593](https://github.com/box/box-java-sdk/pull/593))
</Update>

<Update label="2018-04-18" tags={["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 <Link href="https://support.box.com/hc/en-us/articles/360043696534-Running-Reports">Running Reports</Link> article in Box
  product documentation.
</Update>

<Update label="2018-04-11" tags={["New features", "Windows", "SDKs"]}>
  ## Windows .NET SDK v3.7.0 released

  1. Added support for assigning a retention policy to a metadata template
  2. Added `CONTENT_ACCESS` event type to enum

  [`nuget.org/packages/Box.V2/3.7.0`](https://www.nuget.org/packages/Box.V2/3.7.0)
  [`nuget.org/packages/Box.V2.Core/3.7.0`](https://www.nuget.org/packages/Box.V2.Core/3.7.0)
</Update>

<Update label="2018-04-11" tags={["New features", "API"]}>
  ## Metadata-driven retention policies

  We have introduced new functionality in the
  [Retention Policy Object](/reference/retention-policies-resources#retention-policy)
  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](/reference/retention-policies-resources#retention-policy) and
  [Retention Assignment](/reference/retention-policy-assignments-resources#retention-policy-assignment) APIs
  and in Box's Java, Node, and .NET [SDKs](/guides/tooling/sdks).
</Update>

<Update label="2018-04-11" tags={["New features", "CLI"]}>
  ## 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 get` and `box events poll`
  * Added a command for deleting metadata templates from files and folders.
  * Bumped underlying `box-windows-sdk` to `v3.6.0`
  * Fixed a bug hindering creating float types for metadata on files and folders.
  * Fixed a bug that did not assign the `User-Agent` HTTP 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 `membership` command.
  * Fixed a bug with creating the wrong object for `tracking_codes` on users.
  * Fixed a bug requiring an ID in CSV files on bulk creation of users.
</Update>

<Update label="2018-04-10" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.17.0 released

  1. Add Metadata-driven Retention Policies support ([#535](https://github.com/box/box-java-sdk/pull/535))
</Update>

<Update label="2018-03-29" tags={["New features", "API"]}>
  ## multiSelect field type added to metadata templates

  We have introduced a new attribute type to
  [Metadata Templates](/reference/metadata-templates-resources#metadata-template) called
  `multiSelect`, 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](/reference/metadata-templates-resources#metadata-template) (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.
</Update>

<Update label="2018-03-29" tags={["Java", "SDKs"]}>
  ## Java SDK v2.16.1 released

  1. Add `CONTENT_ACCESS` event type.  ([#581](https://github.com/box/box-java-sdk/pull/581))
</Update>

<Update label="2018-03-28" tags={["API"]}>
  ## Update to Box Annotations

  The annotations update announced on March 5, 2018 has been re-enabled.
</Update>

<Update label="2018-03-27" tags={["New features", "Windows", "SDKs"]}>
  ## Windows .NET SDK v3.6.0 released

  [Changelog](https://github.com/box/box-windows-sdk-v2/blob/master/CHANGELOG.md#360)

  [`nuget.org/packages/Box.V2/3.6.0`](https://www.nuget.org/packages/Box.V2/3.6.0)
  [`nuget.org/packages/Box.V2.Core`](https://www.nuget.org/packages/Box.V2.Core)
</Update>

<Update label="2018-03-22" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.16.0 released

  1. Adjust JWT expiration interval ([#572](https://github.com/box/box-java-sdk/pull/572))
  2. Allow setting custom headers on API connection ([#562](https://github.com/box/box-java-sdk/pull/562))
  3. Fix JWT retry timestamp parsing ([#575](https://github.com/box/box-java-sdk/pull/575))
  4. Add support for User Tracking Codes ([#487](https://github.com/box/box-java-sdk/pull/487))
</Update>

<Update label="2018-03-21" tags={["Windows", "SDKs"]}>
  ## Windows .NET SDK v3.5.2 released

  Fix .NET Core package

  [`nuget.org/packages/Box.V2/3.5.2`](https://www.nuget.org/packages/Box.V2/3.5.2)
  [`nuget.org/packages/Box.V2.Core/3.5.2`](https://www.nuget.org/packages/Box.V2.Core/3.5.2)
</Update>

<Update label="2018-03-15" tags={["New features", "Windows", "SDKs"]}>
  ## 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.1` or 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 `name` parameter optional on `RestoreTrashedAsync()`.

  [`nuget.org/packages/Box.V2/3.5.1`](https://www.nuget.org/packages/Box.V2/3.5.1)
  [`nuget.org/packages/Box.V2.Core/3.5.1`](https://www.nuget.org/packages/Box.V2.Core/3.5.1)
</Update>

<Update label="2018-03-13" tags={["Impactful changes", "UI 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.
</Update>

<Update label="2018-03-12" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.15.0 released

  1. Allow retrieving Collaboration fields ([#570](https://github.com/box/box-java-sdk/pull/570))
  2. Implement Get Metadata Template by ID ([#568](https://github.com/box/box-java-sdk/pull/568))
</Update>

<Update label="2018-03-05" tags={["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](/guides/embed/ui-elements).
  * **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.
</Update>

<Update label="2018-03-01" tags={["Java", "SDKs"]}>
  ## Java SDK v2.14.1 released

  1. Add randomization to exponential backoff ([#565](https://github.com/box/box-java-sdk/pull/565))
  2. Force TLS version 1.1 or greater when supported ([#548](https://github.com/box/box-java-sdk/pull/548))
  3. Delay successive API calls by `EventStream` ([#564](https://github.com/box/box-java-sdk/pull/564))
</Update>

<Update label="2018-03-29" tags={["Impactful changes", "API"]}>
  ## 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 called `multiSelect`.
  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.

  ```js theme={null}
  {
    "audience1": ["internal", "internalEng"],
    "documentType": "Q1 plans",
    "competitiveDocument": "no",
    "status": "active",
    "author": "Jones",
    "currentState": "proposal",
    "$type": "marketingCollateral-d086c908-2498-4d3e-8a1f-01e82bfc2abe",
    "$parent": "file_5010739061",
    "$id": "2094c584-68e1-475c-a581-534a4609594e",
    "$version": 0,
    "$typeVersion": 0,
    "$template": "marketingCollateral",
    "$scope": "enterprise_12345"
  }
  ```
</Update>

<Update label="2018-02-15" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.14.0 released

  ## New Features, Enhancements, and Bug Fixes

  1. fixes missing `can_view_path` property on collaboration object ([#560](https://github.com/box/box-java-sdk/pull/560))
  2. Add missing methods and documentation ([#559](https://github.com/box/box-java-sdk/pull/559))
  3. Add support for setting tags on items ([#554](https://github.com/box/box-java-sdk/pull/554))
</Update>

<Update label="2018-02-08" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.13.0 released

  * Handle metadata values better ([#553](https://github.com/box/box-java-sdk/pull/553))
</Update>

<Update label="2018-02-01" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.12.0 released

  1. Fix collaboration notify parameter ([#545](https://github.com/box/box-java-sdk/pull/545))
  2. Add OAuth 2.0 token creation event type ([#533](https://github.com/box/box-java-sdk/pull/533))
  3. Implement invite user to enterprise ([#504](https://github.com/box/box-java-sdk/pull/504))
  4. Switch to `X-Box-UA` header for analytics ([#536](https://github.com/box/box-java-sdk/pull/536))
  5. Reduce Large File Upload memory usage ([#543](https://github.com/box/box-java-sdk/pull/543))
</Update>

<Update label="2018-01-31" tags={["Windows", "SDKs"]}>
  ## Windows .NET SDK v3.4.2 released

  * Updated Box SDK Version in `NuSpec` file to fix dependency issues for `Box V2` and `Box V2.Core`.

  [`nuget.org/packages/Box.V2/3.4.2`](https://www.nuget.org/packages/Box.V2/3.4.2)
  [`nuget.org/packages/Box.V2.Core/3.4.2`](https://www.nuget.org/packages/Box.V2.Core/3.4.2)
</Update>

<Update label="2018-01-25" tags={["New features", "Java", "SDKs"]}>
  ## Java SDK v2.11.0 released

  1. Fix chunked upload for files > 2GB ([#531](https://github.com/box/box-java-sdk/pull/531))
  2. Add updated file version upload endpoint and deprecate old method ([#524](https://github.com/box/box-java-sdk/pull/524))
  3. Perform modified retry on JWT auth to avoid common JWT errors
</Update>

<Update label="2018-01-12" tags={["Java", "SDKs"]}>
  ## Java SDK v2.10.0 released

  * Add optional `is_confirmed` parameter for adding user email alias ([#499](https://github.com/box/box-java-sdk/pull/499))
  * Add support for token revocation ([#510](https://github.com/box/box-java-sdk/pull/510))
  * Metadata template delete ([#512](https://github.com/box/box-java-sdk/pull/512))
</Update>

<Update label="2018-01-10" tags={["New features", "Windows", "SDKs"]}>
  ## Windows .NET SDK v3.4.1 released

  * Added support for [Allowed Collaboration Domains](https://developer.box.com/reference/resources/collaboration-allowlist-entry/)
  * Added Event Type enum
  * Fixed deserialization issue with `BoxRepresentationStatus`

  [`nuget.org/packages/Box.V2/3.4.1`](https://www.nuget.org/packages/Box.V2/3.4.1)
  [`nuget.org/packages/Box.V2.Core/3.4.1`](https://www.nuget.org/packages/Box.V2.Core/3.4.1)
</Update>

<Update label="2018-01-04" tags={["New features", "Impactful changes", "Java", "SDKs"]}>
  ## Java SDK v2.9.0 released

  1. Search `readme` update ([#506](https://github.com/box/box-java-sdk/pull/506))
  2. Add option to pass file `SHA-1` hash for upload integrity ([#502](https://github.com/box/box-java-sdk/pull/502))
  3. Events log limit ([#507](https://github.com/box/box-java-sdk/pull/507))
  4. Terms of Service ([#484](https://github.com/box/box-java-sdk/pull/484))
  5. Change `wiremock` port ([#505](https://github.com/box/box-java-sdk/pull/505))
  6. Delete redundant `response.disconnect()` from `moveFolderToUser()` ([#485](https://github.com/box/box-java-sdk/pull/485))
  7. Events `readme` patch ([#503](https://github.com/box/box-java-sdk/pull/503))
  8. Add missing webhook triggers to enum ([#497](https://github.com/box/box-java-sdk/pull/497))
  9. Fix `MetadataTemplate.updateMetadataTemplate()` type error ([#498](https://github.com/box/box-java-sdk/pull/498))
  10. Add missing event types to enum ([#500](https://github.com/box/box-java-sdk/pull/500))
  11. Add `modified_at` timestamp to `BoxComment.Info`([#501](https://github.com/box/box-java-sdk/pull/501))
  12. Collaboration whitelists ([#492](https://github.com/box/box-java-sdk/pull/492))
  13. Trash empty body patch ([#495](https://github.com/box/box-java-sdk/pull/495))
  14. Adding support for indefinite Box file locking by allowing null expiration ([#494](https://github.com/box/box-java-sdk/pull/494))
  15. Additional test in response for Batch API ([#474](https://github.com/box/box-java-sdk/pull/474))
  16. Fixing `BoxDeveloperEditionAPIConnection - decryptPrivateKey() - PEMParser returns PrivateKeyInfo already - Invalid cast` [#470](https://github.com/box/box-java-sdk/pull/470) ([#471](https://github.com/box/box-java-sdk/pull/471))
</Update>
