diff --git a/.codegen.json b/.codegen.json
new file mode 100644
index 000000000..fdb838280
--- /dev/null
+++ b/.codegen.json
@@ -0,0 +1 @@
+{ "engineHash": "7b5a612", "specHash": "86fcc6c", "version": "10.16.0" }
diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md
index f20f05aa7..1c852d9ca 100644
--- a/.github/ISSUE_TEMPLATE/bug.md
+++ b/.github/ISSUE_TEMPLATE/bug.md
@@ -3,8 +3,7 @@ name: Bug
about: Report a bug found in the SDK
title: ''
labels: bug
-assignees: mwwoda, mhagmajer, antusus, arjankowski, lukaszsocha2, bartlomiejleszczynski
-
+assignees: mwwoda, mhagmajer, arjankowski, lukaszsocha2, bartlomiejleszczynski, congminh1254
---
- [ ] I have checked that the [SDK documentation][sdk-docs] doesn't solve my issue.
@@ -13,36 +12,42 @@ assignees: mwwoda, mhagmajer, antusus, arjankowski, lukaszsocha2, bartlomiejlesz
- [ ] I have searched [Issues in this repo][github-repo] and my issue isn't already reported.
### Description of the Issue
+
### Steps to Reproduce
+
+
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
### Expected Behavior
+
### Error Message, Including Stack Trace
+
### Screenshots
+
### Versions Used
-Java SDK:
-Java:
-[sdk-docs]: ./doc
+
+
+[sdk-docs]: https://github.com/box/box-java-sdk-gen/tree/main/docs
[api-docs]: https://developer.box.com/docs
[dev-forums]: https://community.box.com/t5/Platform-and-Development-Forum/bd-p/DeveloperForum
-[github-repo]: https://github.com/box/box-java-sdk/search?type=Issues
+[github-repo]: https://github.com/box/box-java-sdk-gen/search?type=Issues
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
index 2d8263c13..c3b59c317 100644
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -1,13 +1,13 @@
blank_issues_enabled: false
contact_links:
- name: SDK documentation
- url: https://github.com/box/box-java-sdk/tree/main/doc
+ url: https://github.com/box/box-java-sdk/tree/main/docs
about: Before creating an issue, I have checked that the SDK documentation doesn't solve my issue.
- name: API documentation
url: https://developer.box.com/docs
about: Before creating an issue, I have checked that the API documentation doesn't solve my issue.
- name: Box Developer Forums
- url: https://community.box.com/t5/Platform-and-Development-Forum/bd-p/DeveloperForum
+ url: https://community.box.com/box-platform-5
about: Before creating an issue, I have searched the Box Developer Forums and my issue isn't already reported there.
- name: Issues in this repo
url: https://github.com/box/box-java-sdk/search?type=Issues
diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md
index c6a01bbfa..ea91c6e44 100644
--- a/.github/ISSUE_TEMPLATE/enhancement.md
+++ b/.github/ISSUE_TEMPLATE/enhancement.md
@@ -3,18 +3,21 @@ name: Enhancement
about: Suggest a new feature or change
title: ''
labels: enhancement
-assignees: mwwoda, mhagmajer, antusus, arjankowski, lukaszsocha2, bartlomiejleszczynski
-
+assignees: mwwoda, mhagmajer, arjankowski, lukaszsocha2, bartlomiejleszczynski, congminh1254
---
### Is your feature request related to a problem? Please describe.
+
### Describe the solution you'd like
+
### Describe alternatives you've considered
+
### Additional context
+
diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
index e209f2818..e8d6a28a2 100644
--- a/.github/ISSUE_TEMPLATE/question.md
+++ b/.github/ISSUE_TEMPLATE/question.md
@@ -3,8 +3,7 @@ name: Question
about: Request for Assistance
title: ''
labels: question
-assignees: mwwoda, mhagmajer, antusus, arjankowski, lukaszsocha2, bartlomiejleszczynski
-
+assignees: mwwoda, mhagmajer, arjankowski, lukaszsocha2, bartlomiejleszczynski, congminh1254
---
- [ ] I have checked that the [SDK documentation][sdk-docs] doesn't solve my issue.
@@ -13,36 +12,42 @@ assignees: mwwoda, mhagmajer, antusus, arjankowski, lukaszsocha2, bartlomiejlesz
- [ ] I have searched [Issues in this repo][github-repo] and my issue isn't already reported.
### Description of the Issue
+
### Steps to Reproduce
+
+
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
### Expected Behavior
+
### Error Message, Including Stack Trace
+
### Screenshots
+
### Versions Used
-Java SDK:
-Java:
-[sdk-docs]: ./doc
+
+
+[sdk-docs]: https://github.com/box/box-java-sdk-gen/tree/main/docs
[api-docs]: https://developer.box.com/docs
[dev-forums]: https://community.box.com/t5/Platform-and-Development-Forum/bd-p/DeveloperForum
-[github-repo]: https://github.com/box/box-java-sdk/search?type=Issues
+[github-repo]: https://github.com/box/box-java-sdk-gen/search?type=Issues
diff --git a/.github/stale.yml b/.github/stale.yml
index 062c374e8..70cf69f6b 100644
--- a/.github/stale.yml
+++ b/.github/stale.yml
@@ -19,4 +19,4 @@ markComment: >
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: >
- This issue has been automatically closed due to maximum period of being stale. Thank you for your contribution to Box Java SDK and feel free to open another PR/issue at any time.
+ This issue has been automatically closed due to maximum period of being stale. Thank you for your contribution to Box SDK and feel free to open another PR/issue at any time.
diff --git a/.github/workflows/autoupdate-pr.yml b/.github/workflows/autoupdate-pr.yml
new file mode 100644
index 000000000..085213119
--- /dev/null
+++ b/.github/workflows/autoupdate-pr.yml
@@ -0,0 +1,42 @@
+name: Autoupdate PR
+on:
+ push:
+ branches:
+ - main
+ - sdk-gen
+
+permissions: {}
+
+jobs:
+ update_pull_requests:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ token: ${{ secrets.DISPATCH_ACCESS_TOKEN }}
+
+ - name: Set up Git
+ run: |
+ git config --global user.name 'box-sdk-build'
+ git config --global user.email 'box-sdk-build@box.com'
+
+ - name: Fetch all branches and tags
+ run: git fetch --prune --unshallow
+
+ - name: Auto update pull requests
+ run: |
+ PR_LIST=$(curl -s -H "Authorization: Bearer ${{ secrets.DISPATCH_ACCESS_TOKEN }}" "https://api.github.com/repos/$GITHUB_REPOSITORY/pulls?state=open&base=${{ github.ref_name }}" | jq -r '.[] | .head.ref')
+ for pr_branch in $PR_LIST; do
+ git checkout "$pr_branch"
+ if git merge origin/${{ github.ref_name }}; then
+ git push
+ else
+ # Conflict occurred, resolve by keeping our changes
+ git checkout --ours .
+ git add .
+ git commit -m "Auto resolve conflict by keeping our changes"
+ git push
+ fi
+ done
diff --git a/.github/workflows/build-and-test-daily.yml b/.github/workflows/build-and-test-daily.yml
new file mode 100644
index 000000000..30d2be5ca
--- /dev/null
+++ b/.github/workflows/build-and-test-daily.yml
@@ -0,0 +1,72 @@
+name: Build and Test daily
+on:
+ schedule:
+ - cron: '20 1 * * 1-5'
+
+permissions:
+ contents: read
+
+jobs:
+ build-and-test:
+ runs-on: ubuntu-latest
+ strategy:
+ max-parallel: 1
+ matrix:
+ distribution: ['zulu', 'temurin']
+ java: ['8', '17']
+ name: Java ${{ matrix.java }} (${{ matrix.distribution }})
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ with:
+ ref: main
+ - name: Setup Java
+ uses: actions/setup-java@v4
+ with:
+ distribution: ${{ matrix.distribution }}
+ java-version: ${{ matrix.java }}
+ cache: 'gradle'
+ - name: All Tests
+ env:
+ JWT_CONFIG_BASE_64: ${{ secrets.JWT_CONFIG_BASE_64 }}
+ ADMIN_USER_ID: ${{ secrets.ADMIN_USER_ID }}
+ CLIENT_ID: ${{ secrets.CLIENT_ID }}
+ CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
+ USER_ID: ${{ secrets.USER_ID }}
+ ENTERPRISE_ID: ${{ secrets.ENTERPRISE_ID }}
+ BOX_FILE_REQUEST_ID: ${{ secrets.BOX_FILE_REQUEST_ID }}
+ BOX_EXTERNAL_USER_EMAIL: ${{ secrets.BOX_EXTERNAL_USER_EMAIL }}
+ BOX_EXTERNAL_USER_ID: ${{ secrets.BOX_EXTERNAL_USER_ID }}
+ APP_ITEM_ASSOCIATION_FILE_ID: ${{ secrets.APP_ITEM_ASSOCIATION_FILE_ID }}
+ APP_ITEM_ASSOCIATION_FOLDER_ID: ${{ secrets.APP_ITEM_ASSOCIATION_FOLDER_ID }}
+ WORKFLOW_FOLDER_ID: ${{ secrets.WORKFLOW_FOLDER_ID }}
+ APP_ITEM_SHARED_LINK: ${{ secrets.APP_ITEM_SHARED_LINK }}
+ SLACK_AUTOMATION_USER_ID: ${{ secrets.SLACK_AUTOMATION_USER_ID }}
+ SLACK_ORG_ID: ${{ secrets.SLACK_ORG_ID }}
+ SLACK_PARTNER_ITEM_ID: ${{ secrets.SLACK_PARTNER_ITEM_ID }}
+ AUTOMATE_WORKFLOW_FOLDER_ID: ${{ secrets.AUTOMATE_WORKFLOW_FOLDER_ID }}
+ run: ./gradlew check --stacktrace
+ - name: Coverage
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: ./gradlew jacocoTestReport coverallsJacoco
+ notify:
+ name: Send Slack Notification
+ runs-on: ubuntu-latest
+ needs: [build-and-test]
+ if: always()
+ steps:
+ - name: Send Slack Notification
+ env:
+ SLACK_WEBHOOK_TEST_NOTIFICATION_URL: ${{ secrets.SLACK_WEBHOOK_TEST_NOTIFICATION_URL }}
+ BUILD_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
+ run: |
+ if [ "${{ needs.build-and-test.result }}" != "success" ]; then
+ STATUS="Failure ❌"
+ else
+ STATUS="Success ✅"
+ fi
+
+ curl -X POST -H "Content-Type: application/json" \
+ --data "{\"text\":\"<${BUILD_URL}|Daily Tests Job> in *${GITHUB_REPOSITORY}* finished with status: ${STATUS}\"}" \
+ "$SLACK_WEBHOOK_TEST_NOTIFICATION_URL"
diff --git a/.github/workflows/build-main.yml b/.github/workflows/build-main.yml
deleted file mode 100644
index 9df466a28..000000000
--- a/.github/workflows/build-main.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: build-main
-on:
- pull_request:
- types: [ opened, synchronize ]
- push:
- branches:
- - main
-jobs:
- build-and-test:
- runs-on: ubuntu-latest
- strategy:
- matrix:
- distribution: [ 'zulu', 'temurin' ]
- java: [ '8', '11', '17' ]
- name: Java ${{ matrix.java }} (${{ matrix.distribution }})
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Setup Java
- uses: actions/setup-java@v4
- with:
- distribution: ${{ matrix.distribution }}
- java-version: ${{ matrix.java }}
- cache: 'gradle'
- - name: Build and test
- run: ./gradlew check --stacktrace
- - name: Coverage
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: ./gradlew jacocoTestReport coverallsJacoco
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 000000000..84a244e1c
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,60 @@
+name: build
+on:
+ pull_request:
+ branches:
+ - main
+
+permissions:
+ contents: read
+
+jobs:
+ build-and-test:
+ runs-on: ubuntu-latest
+ strategy:
+ max-parallel: 1
+ matrix:
+ distribution: ['zulu', 'temurin']
+ java: ['8', '17']
+ name: Java ${{ matrix.java }} (${{ matrix.distribution }})
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - name: Setup Java
+ uses: actions/setup-java@v4
+ with:
+ distribution: ${{ matrix.distribution }}
+ java-version: ${{ matrix.java }}
+ cache: 'gradle'
+ - name: All Tests
+ if: ${{ startsWith(github.head_ref, 'codegen-release') && github.actor != 'dependabot[bot]' }}
+ env:
+ JWT_CONFIG_BASE_64: ${{ secrets.JWT_CONFIG_BASE_64 }}
+ ADMIN_USER_ID: ${{ secrets.ADMIN_USER_ID }}
+ CLIENT_ID: ${{ secrets.CLIENT_ID }}
+ CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
+ USER_ID: ${{ secrets.USER_ID }}
+ ENTERPRISE_ID: ${{ secrets.ENTERPRISE_ID }}
+ BOX_FILE_REQUEST_ID: ${{ secrets.BOX_FILE_REQUEST_ID }}
+ BOX_EXTERNAL_USER_EMAIL: ${{ secrets.BOX_EXTERNAL_USER_EMAIL }}
+ BOX_EXTERNAL_USER_ID: ${{ secrets.BOX_EXTERNAL_USER_ID }}
+ APP_ITEM_ASSOCIATION_FILE_ID: ${{ secrets.APP_ITEM_ASSOCIATION_FILE_ID }}
+ APP_ITEM_ASSOCIATION_FOLDER_ID: ${{ secrets.APP_ITEM_ASSOCIATION_FOLDER_ID }}
+ WORKFLOW_FOLDER_ID: ${{ secrets.WORKFLOW_FOLDER_ID }}
+ APP_ITEM_SHARED_LINK: ${{ secrets.APP_ITEM_SHARED_LINK }}
+ SLACK_AUTOMATION_USER_ID: ${{ secrets.SLACK_AUTOMATION_USER_ID }}
+ SLACK_ORG_ID: ${{ secrets.SLACK_ORG_ID }}
+ SLACK_PARTNER_ITEM_ID: ${{ secrets.SLACK_PARTNER_ITEM_ID }}
+ AUTOMATE_WORKFLOW_FOLDER_ID: ${{ secrets.AUTOMATE_WORKFLOW_FOLDER_ID }}
+ run: ./gradlew check --stacktrace
+ - name: Smoke Tests
+ if: ${{ !startsWith(github.head_ref, 'codegen-release') && github.actor != 'dependabot[bot]' }}
+ env:
+ JWT_CONFIG_BASE_64: ${{ secrets.JWT_CONFIG_BASE_64 }}
+ CLIENT_ID: ${{ secrets.CLIENT_ID }}
+ CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
+ USER_ID: ${{ secrets.USER_ID }}
+ ENTERPRISE_ID: ${{ secrets.ENTERPRISE_ID }}
+ run: ./gradlew test --tests com.box.sdkgen.auth.AuthITest --tests com.box.sdkgen.files.FilesITest --tests com.box.sdkgen.downloads.DownloadsITest --tests com.box.sdkgen.uploads.UploadsITest --stacktrace
+ - name: Build (Dependabot only, no tests)
+ if: github.actor == 'dependabot[bot]'
+ run: ./gradlew assemble --stacktrace
diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml
deleted file mode 100644
index 9c2a80b84..000000000
--- a/.github/workflows/integration-tests.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-name: Integration tests
-
-on:
- push:
- branches:
- - main
- pull_request:
- branches:
- - main
-
-jobs:
- core:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v4
- - name: Setup Java
- uses: actions/setup-java@v4
- with:
- distribution: 'temurin'
- java-version: '8'
- - name: Run Tests
- env:
- JAVA_COLLABORATOR_ID: ${{ secrets.JAVA_COLLABORATOR_ID }}
- JAVA_COLLABORATOR: ${{ secrets.JAVA_COLLABORATOR }}
- JAVA_ENTERPRISE_ID: ${{ secrets.JAVA_ENTERPRISE_ID }}
- JAVA_JWT_CONFIG: ${{ secrets.JAVA_JWT_CONFIG }}
- JAVA_USER_ID: ${{ secrets.JAVA_USER_ID }}
- run: ./gradlew integrationTest
diff --git a/.github/workflows/notify-changelog.yml b/.github/workflows/notify-changelog.yml
new file mode 100644
index 000000000..464fd56b7
--- /dev/null
+++ b/.github/workflows/notify-changelog.yml
@@ -0,0 +1,29 @@
+# A GitHub action that notifies the developer
+# changelog repository of any new releases.
+
+name: Notify changelog
+
+on:
+ # Only trigger for a full release,
+ # ignoring pre-releases and drafts
+ release:
+ types:
+ - released
+
+permissions: {}
+
+jobs:
+ notify:
+ # This job can run on the latest Ubuntu
+ # and it should not take more than 3 minutes
+ runs-on: ubuntu-latest
+ timeout-minutes: 3
+
+ steps:
+ - name: Notify changelog of new release
+ uses: peter-evans/repository-dispatch@v1
+ with:
+ token: ${{ secrets.DISPATCH_ACCESS_TOKEN }}
+ repository: box/box-developer-changelog
+ event-type: new-release-note
+ client-payload: '{"ref": "${{ github.ref }}", "repository": "${{github.repository}}", "labels": "sdks,java", "repo_display_name": "Box Java SDK"}'
diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml
deleted file mode 100644
index 58c874f10..000000000
--- a/.github/workflows/releases.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-# A GitHub action that notifies the developer
-# changelog repository of any new releases.
-
-name: Notify changelog
-
-on:
- # Only trigger for a full release,
- # ignoring pre-releases and drafts
- release:
- types:
- - released
-
-jobs:
- notify:
- # This job can run on the latest Ubuntu
- # and it should not take more than 3 minutes
- runs-on: ubuntu-latest
- timeout-minutes: 3
-
- steps:
- # There's really only 1 step, and i
- - name: Notify changelog of new release
- uses: peter-evans/repository-dispatch@v1
- with:
- token: ${{ secrets.DISPATCH_ACCESS_TOKEN }}
- repository: box/box-developer-changelog
- event-type: new-release-note
- client-payload: '{"ref": "${{ github.ref }}", "repository": "${{github.repository}}", "labels": "sdks,java", "repo_display_name": "Box Java SDK"}'
diff --git a/.github/workflows/semantic-pr.yml b/.github/workflows/semantic-pr.yml
index cbff636c5..1bf079c95 100644
--- a/.github/workflows/semantic-pr.yml
+++ b/.github/workflows/semantic-pr.yml
@@ -6,6 +6,11 @@ on:
- opened
- edited
- synchronize
+ branches:
+ - main
+
+permissions:
+ contents: read
jobs:
main:
diff --git a/.github/workflows/spell-check-lint.yml b/.github/workflows/spell-check-lint.yml
index 3283b9f04..1adbdeb74 100644
--- a/.github/workflows/spell-check-lint.yml
+++ b/.github/workflows/spell-check-lint.yml
@@ -1,9 +1,13 @@
name: spell-check-lint
on:
pull_request_target:
- types: [ opened, synchronize, edited ]
+ types: [opened, synchronize, edited]
branches:
- main
+
+permissions:
+ contents: read
+
jobs:
spellcheck-request-title:
runs-on: ubuntu-latest
@@ -19,3 +23,5 @@ jobs:
path: spellchecker
- name: Execute spellchecker
uses: ./spellchecker
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index a1890e823..0df7a29b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,6 @@
.gradle/
build/
.DS_Store
-src/test/config/config.properties
-src/test/config/config.json
/target/
.settings/
.idea/
@@ -16,6 +14,3 @@ out/
*.secret
#Sdkman
.sdkmanrc
-#Release process
-gradle.properties
-release_notes.md
\ No newline at end of file
diff --git a/.versionrc b/.versionrc
index 5dffabd46..ca2ea3076 100644
--- a/.versionrc
+++ b/.versionrc
@@ -1,13 +1,34 @@
{
- "types": [
- {"type": "feat", "section": "New Features and Enhancements:", "hidden": false},
- {"type": "fix", "section": "Bug Fixes:", "hidden": false},
- {"type": "build", "section": "Dependency Upgrades:", "hidden": false},
- {"type": "chore", "hidden": true},
- {"type": "docs", "hidden": true},
- {"type": "style", "hidden": true},
- {"type": "refactor", "hidden": true},
- {"type": "test", "hidden": true},
- {"type": "ci", "hidden":true}
- ]
-}
\ No newline at end of file
+ "types": [
+ {
+ "type": "feat",
+ "section": "New Features and Enhancements",
+ "hidden": false
+ },
+ {
+ "type": "fix",
+ "section": "Bug Fixes",
+ "hidden": false
+ },
+ {
+ "type": "chore",
+ "hidden": true
+ },
+ {
+ "type": "docs",
+ "hidden": true
+ },
+ {
+ "type": "style",
+ "hidden": true
+ },
+ {
+ "type": "refactor",
+ "hidden": true
+ },
+ {
+ "type": "test",
+ "hidden": true
+ }
+ ]
+}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8017bf864..9834014ac 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,236 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
+## [10.16.0](https://github.com/box/box-java-sdk/compare/v10.15.2...v10.16.0) (2026-08-05)
+
+
+### New Features and Enhancements
+
+* add `is_collaborated_content_available_when_owner_inactive` property (box/box-openapi[#613](https://github.com/box/box-java-sdk/issues/613)) ([#1946](https://github.com/box/box-java-sdk/issues/1946)) ([3a67096](https://github.com/box/box-java-sdk/commit/3a67096b0ab31836ef597daf0f2d8a25ef94013d))
+* Added two missing event types (box/box-openapi[#611](https://github.com/box/box-java-sdk/issues/611)) ([#1940](https://github.com/box/box-java-sdk/issues/1940)) ([a37b296](https://github.com/box/box-java-sdk/commit/a37b2964ab71ab789c359680e6f09ad19a310cf9))
+* Support query APIs (box/box-openapi[#610](https://github.com/box/box-java-sdk/issues/610)) ([#1938](https://github.com/box/box-java-sdk/issues/1938)) ([bf8aaaa](https://github.com/box/box-java-sdk/commit/bf8aaaab213b85d704a2735e6ef65a91f5225386))
+
+### [10.15.2](https://github.com/box/box-java-sdk/compare/v10.15.1...v10.15.2) (2026-07-15)
+
+
+### Bug Fixes
+
+* Fix broken readme link (box/box-codegen[#974](https://github.com/box/box-java-sdk/issues/974)) ([#1929](https://github.com/box/box-java-sdk/issues/1929)) ([f216711](https://github.com/box/box-java-sdk/commit/f2167116cc3a84782b89984abbbd9d75fc7cfc91))
+
+### [10.15.1](https://github.com/box/box-java-sdk/compare/v10.15.0...v10.15.1) (2026-07-10)
+
+
+### Bug Fixes
+
+* Bump `Bouncy Castle` to fix CVE in Java (box/box-codegen[#972](https://github.com/box/box-java-sdk/issues/972)) ([#1918](https://github.com/box/box-java-sdk/issues/1918)) ([4441f03](https://github.com/box/box-java-sdk/commit/4441f037afaf148b300466a23818108a364457ab))
+
+## [10.15.0](https://github.com/box/box-java-sdk/compare/v10.14.0...v10.15.0) (2026-07-09)
+
+
+### New Features and Enhancements
+
+* Add new fields to Hubs(box/box-openapi[#606](https://github.com/box/box-java-sdk/issues/606)) ([#1901](https://github.com/box/box-java-sdk/issues/1901)) ([f590481](https://github.com/box/box-java-sdk/commit/f590481020c9d8670dd1f3a96583b1b7c909c303))
+* Setup common default timeout (box/box-codegen[#965](https://github.com/box/box-java-sdk/issues/965)) ([#1905](https://github.com/box/box-java-sdk/issues/1905)) ([a87b8d1](https://github.com/box/box-java-sdk/commit/a87b8d1e10e0f03f61e56b1a3328714bb78efd17))
+
+## [10.14.0](https://github.com/box/box-java-sdk/compare/v10.13.0...v10.14.0) (2026-06-11)
+
+
+### New Features and Enhancements
+
+* Add new event types (box/box-openapi[#1703](https://github.com/box/box-java-sdk/issues/1703)) (box/box-openapi[#605](https://github.com/box/box-java-sdk/issues/605)) ([#1889](https://github.com/box/box-java-sdk/issues/1889)) ([1747b14](https://github.com/box/box-java-sdk/commit/1747b14eac8ae1b4a96e1da2602d9e6894d6b4ee))
+* Add new parameters to ai extract structured method (box/box-openapi[#604](https://github.com/box/box-java-sdk/issues/604)) ([#1888](https://github.com/box/box-java-sdk/issues/1888)) ([09c342f](https://github.com/box/box-java-sdk/commit/09c342f5979f0bdb1a93c822273638aa0e60dbdf))
+* Expose `errorCode` in sign request schemas (box/box-openapi[#601](https://github.com/box/box-java-sdk/issues/601)) ([#1887](https://github.com/box/box-java-sdk/issues/1887)) ([70dc787](https://github.com/box/box-java-sdk/commit/70dc787c16f096070428af8e2caa02be3ba6fcc0))
+
+## [10.13.0](https://github.com/box/box-java-sdk/compare/v10.12.0...v10.13.0) (2026-06-03)
+
+
+### New Features and Enhancements
+
+* Convert Note Public API (box/box-openapi[#599](https://github.com/box/box-java-sdk/issues/599)) ([#1855](https://github.com/box/box-java-sdk/issues/1855)) ([e396190](https://github.com/box/box-java-sdk/commit/e396190406633a2071dacbbe0b67c4a92b03c7e0))
+
+## [10.12.0](https://github.com/box/box-java-sdk/compare/v10.11.0...v10.12.0) (2026-05-20)
+
+
+### New Features and Enhancements
+
+* add failure related fields to `DocGenJob` (box/box-openapi[#598](https://github.com/box/box-java-sdk/issues/598)) ([#1849](https://github.com/box/box-java-sdk/issues/1849)) ([8d72727](https://github.com/box/box-java-sdk/commit/8d72727367cb0b1643db9488d0659264ad7aa45e))
+* Add new event types (box/box-openapi[#597](https://github.com/box/box-java-sdk/issues/597)) ([#1840](https://github.com/box/box-java-sdk/issues/1840)) ([aa439b4](https://github.com/box/box-java-sdk/commit/aa439b475e26f761f7f3aca8e6b5eec55d472838))
+* Sanitize request body in `BoxAPIError` (box/box-codegen[#948](https://github.com/box/box-java-sdk/issues/948)) ([#1844](https://github.com/box/box-java-sdk/issues/1844)) ([39b6fcc](https://github.com/box/box-java-sdk/commit/39b6fccb3067364d9f4eaa3a0f9627eabd526b13))
+
+## [10.11.0](https://github.com/box/box-java-sdk/compare/v10.10.0...v10.11.0) (2026-05-06)
+
+
+### ⚠ BREAKING CHANGES
+
+* Mark `id` field of `AIAgentReference` required (box/box-openapi[#1629](https://github.com/box/box-java-sdk/issues/1629)) (box/box-openapi[#595](https://github.com/box/box-java-sdk/issues/595)) ([#1827](https://github.com/box/box-java-sdk/issues/1827)) ([1c59b46](https://github.com/box/box-java-sdk/commit/1c59b46e90ef5d33ff85eff45125cefe00e5e950))
+
+### Bug Fixes
+
+* Fix metadata template schema (box/box-openapi[#596](https://github.com/box/box-java-sdk/issues/596)) ([#1828](https://github.com/box/box-java-sdk/issues/1828)) ([193718a](https://github.com/box/box-java-sdk/commit/193718a5eb07e0816f7fc23daad3ebbe5cba993b))
+* Mark `id` field of `AIAgentReference` required (box/box-openapi[#1629](https://github.com/box/box-java-sdk/issues/1629)) (box/box-openapi[#595](https://github.com/box/box-java-sdk/issues/595)) ([#1827](https://github.com/box/box-java-sdk/issues/1827)) ([1c59b46](https://github.com/box/box-java-sdk/commit/1c59b46e90ef5d33ff85eff45125cefe00e5e950))
+
+## [10.10.0](https://github.com/box/box-java-sdk/compare/v10.9.0...v10.10.0) (2026-04-30)
+
+
+### Bug Fixes
+
+* Fix java `oneOf` serialization (box/box-codegen[#942](https://github.com/box/box-java-sdk/issues/942)) ([#1806](https://github.com/box/box-java-sdk/issues/1806)) ([dcd5df6](https://github.com/box/box-java-sdk/commit/dcd5df60f3545983209e58c50ab1648a6d5fb167))
+
+
+### New Features and Enhancements
+
+* Automate Public API (box/box-openapi[#594](https://github.com/box/box-java-sdk/issues/594)) ([#1820](https://github.com/box/box-java-sdk/issues/1820)) ([41e859a](https://github.com/box/box-java-sdk/commit/41e859acf78844b0a2e28d3d14ca721b88e2a108))
+
+## [10.9.0](https://github.com/box/box-java-sdk/compare/v10.8.0...v10.9.0) (2026-04-22)
+
+
+### New Features and Enhancements
+
+* Add `max_extension_length` field to Retention Policies (box/box-openapi[#593](https://github.com/box/box-java-sdk/issues/593)) ([#1799](https://github.com/box/box-java-sdk/issues/1799)) ([fc91872](https://github.com/box/box-java-sdk/commit/fc91872b19e16d919fd641e1a6b461639ebbdc54))
+
+## [10.8.0](https://github.com/box/box-java-sdk/compare/v10.7.0...v10.8.0) (2026-04-16)
+
+
+### New Features and Enhancements
+
+* **boxsdkgen:** Update `retentionLength` field to accept both string and integer (box/box-codegen#932) (#1776)
+
+### Bug Fixes
+
+* **boxsdkgen:** Update `retentionLength` field to accept both string and integer (box/box-codegen[#932](https://github.com/box/box-java-sdk/issues/932)) ([#1776](https://github.com/box/box-java-sdk/issues/1776)) ([31f4b04](https://github.com/box/box-java-sdk/commit/31f4b043116fb6ffde0834593fb876a636678346))
+* Fix error propagation in Java (box/box-codegen[#936](https://github.com/box/box-java-sdk/issues/936)) ([#1780](https://github.com/box/box-java-sdk/issues/1780)) ([257fdb2](https://github.com/box/box-java-sdk/commit/257fdb2b6b15ffe6b0d9b48613d5fcea481c42bd))
+* Fix serialization of `OffsetDateTime` (box/box-codegen[#935](https://github.com/box/box-java-sdk/issues/935)) ([#1778](https://github.com/box/box-java-sdk/issues/1778)) ([d9ff755](https://github.com/box/box-java-sdk/commit/d9ff7553fb958811b3344c7b98828a57a8134531))
+
+## [10.7.0](https://github.com/box/box-java-sdk/compare/v10.6.0...v10.7.0) (2026-04-01)
+
+
+### ⚠ BREAKING CHANGES
+
+* Correct search content type 'tags' to match API (box/box-openapi#591) (#1766)
+* Align `LegalHoldPolicyAssignedItem` with API (box/box-openapi#1554) (box/box-openapi#590) (#1762)
+
+### Bug Fixes
+
+* Align `LegalHoldPolicyAssignedItem` with API (box/box-openapi[#1554](https://github.com/box/box-java-sdk/issues/1554)) (box/box-openapi[#590](https://github.com/box/box-java-sdk/issues/590)) ([#1762](https://github.com/box/box-java-sdk/issues/1762)) ([8f82b46](https://github.com/box/box-java-sdk/commit/8f82b46afe978342fb93af6ad31006342a1f5b5a))
+* Correct search content type 'tags' to match API (box/box-openapi[#591](https://github.com/box/box-java-sdk/issues/591)) ([#1766](https://github.com/box/box-java-sdk/issues/1766)) ([52b408e](https://github.com/box/box-java-sdk/commit/52b408ec649dd7d36d3ecc6f2506f34afde644bd))
+
+
+### New Features and Enhancements
+
+* Add `reference` to `AI` and `parent_id` to `HubsItems` (box/box-openapi[#588](https://github.com/box/box-java-sdk/issues/588)) ([#1741](https://github.com/box/box-java-sdk/issues/1741)) ([fccccb7](https://github.com/box/box-java-sdk/commit/fccccb766d961e9badd1cde274595e07ba88b7a2))
+* Support Hub Document API (box/box-codegen[#930](https://github.com/box/box-java-sdk/issues/930)) ([#1767](https://github.com/box/box-java-sdk/issues/1767)) ([8b2ef9f](https://github.com/box/box-java-sdk/commit/8b2ef9f003b76f88ea0481a0539efad38ae63a3b))
+
+## [10.6.0](https://github.com/box/box-java-sdk/compare/v10.5.0...v10.6.0) (2026-03-18)
+
+
+### New Features and Enhancements
+
+* add `canPublicSharedLinkBeCreated` to `Hubs` (box/box-codegen[#928](https://github.com/box/box-java-sdk/issues/928)) ([#1737](https://github.com/box/box-java-sdk/issues/1737)) ([50c2bc9](https://github.com/box/box-java-sdk/commit/50c2bc9dcaaac2445876d2d305c5547e434105b1))
+* Add configurable timeouts for SDKs (box/box-codegen[#924](https://github.com/box/box-java-sdk/issues/924)) ([#1730](https://github.com/box/box-java-sdk/issues/1730)) ([1fa2c9a](https://github.com/box/box-java-sdk/commit/1fa2c9ad954ed01ec387b7a1d1018c62d5de3867))
+
+## [10.5.0](https://github.com/box/box-java-sdk/compare/v10.4.0...v10.5.0) (2026-02-11)
+
+
+### Bug Fixes
+
+* Correct enum value for legal hold policy changes (box/box-openapi[#581](https://github.com/box/box-java-sdk/issues/581)) ([#1695](https://github.com/box/box-java-sdk/issues/1695)) ([f9e3d5e](https://github.com/box/box-java-sdk/commit/f9e3d5ee3c54d074d5b5aef1c5c01599c0b8c9e9))
+* Move assigning default values from builder constructor to `build()` method (box/box-codegen[#922](https://github.com/box/box-java-sdk/issues/922)) ([#1716](https://github.com/box/box-java-sdk/issues/1716)) ([0a9dbe3](https://github.com/box/box-java-sdk/commit/0a9dbe3bebb618a0a33c53cd1e9a90582c0504e2))
+
+
+### New Features and Enhancements
+
+* add confidence scores for structured extract (box/box-openapi[#582](https://github.com/box/box-java-sdk/issues/582)) ([#1697](https://github.com/box/box-java-sdk/issues/1697)) ([112b954](https://github.com/box/box-java-sdk/commit/112b9545d0ef1839d007bf215356b31e658daad8))
+* add signer language, cancel sign request reason (box/box-openapi[#584](https://github.com/box/box-java-sdk/issues/584)) ([#1721](https://github.com/box/box-java-sdk/issues/1721)) ([3c94cfc](https://github.com/box/box-java-sdk/commit/3c94cfc69d6be2db40b72bf2902ee095824e0796))
+* Add watermarking permissions and sources information (box/box-openapi[#579](https://github.com/box/box-java-sdk/issues/579)) ([#1688](https://github.com/box/box-java-sdk/issues/1688)) ([215c0f3](https://github.com/box/box-java-sdk/commit/215c0f3cce4042332373eec66b1695ed958f1f3b))
+
+## [10.4.0](https://github.com/box/box-java-sdk/compare/v10.3.0...v10.4.0) (2025-12-19)
+
+
+### Bug Fixes
+
+* add taxonomy to Metadata Field (read) definition (box/box-openapi[#572](https://github.com/box/box-java-sdk/issues/572)) ([#1644](https://github.com/box/box-java-sdk/issues/1644)) ([61235da](https://github.com/box/box-java-sdk/commit/61235da7d51a64845d344a8286821e59b217a848))
+* fix `RetryAfter` function when there's no `Retry-After` header (box/box-codegen[#903](https://github.com/box/box-java-sdk/issues/903)) ([#1622](https://github.com/box/box-java-sdk/issues/1622)) ([f135e2b](https://github.com/box/box-java-sdk/commit/f135e2b62d4b2d2d266ab40b3b366c8c7968d2db))
+
+
+### New Features and Enhancements
+
+* add Metadata Taxonomies api (box/box-openapi[#569](https://github.com/box/box-java-sdk/issues/569)) ([#1630](https://github.com/box/box-java-sdk/issues/1630)) ([d1e8924](https://github.com/box/box-java-sdk/commit/d1e8924ad123e5fcbf014be50fbbf52ea45d546b))
+* text input validation for Box Sign (box/box-openapi[#568](https://github.com/box/box-java-sdk/issues/568)) ([#1624](https://github.com/box/box-java-sdk/issues/1624)) ([8c5b5c1](https://github.com/box/box-java-sdk/commit/8c5b5c17285c1c0d4a644eb8187dac92f1f96f28))
+* Treat `nullable` fields as Optional (box/box-codegen[#906](https://github.com/box/box-java-sdk/issues/906)) ([#1634](https://github.com/box/box-java-sdk/issues/1634)) ([cacc729](https://github.com/box/box-java-sdk/commit/cacc729dc246c914eb1a6d8281f4261c96711dc1))
+
+## [10.3.0](https://github.com/box/box-java-sdk/compare/v10.2.0...v10.3.0) (2025-12-10)
+
+
+### New Features and Enhancements
+
+* Remove `confidence_score` and `include_confidence_score` from AI extract (box/box-openapi[#567](https://github.com/box/box-java-sdk/issues/567)) ([#1615](https://github.com/box/box-java-sdk/issues/1615)) ([0a069cd](https://github.com/box/box-java-sdk/commit/0a069cdecc4837d8bdb6f1e91401d88c58af5a92))
+* Support new sign request metadata (box/box-openapi[#565](https://github.com/box/box-java-sdk/issues/565)) ([#1599](https://github.com/box/box-java-sdk/issues/1599)) ([b3c46bb](https://github.com/box/box-java-sdk/commit/b3c46bbf2f2f7b9b25befcd6442a4e5c9a92e790))
+
+## [10.2.0](https://github.com/box/box-java-sdk/compare/v10.1.0...v10.2.0) (2025-11-19)
+
+
+### Bug Fixes
+
+* Fix parsing `OffsetDateTime` from String (box/box-codegen[#887](https://github.com/box/box-java-sdk/issues/887)) ([#1582](https://github.com/box/box-java-sdk/issues/1582)) ([d1288c4](https://github.com/box/box-java-sdk/commit/d1288c4804b032d5211d664c396e212a08a5775b))
+
+
+### New Features and Enhancements
+
+* Support GET enterprise configuration API (box/box-openapi[#559](https://github.com/box/box-java-sdk/issues/559)) ([#1519](https://github.com/box/box-java-sdk/issues/1519)) ([88dd8d2](https://github.com/box/box-java-sdk/commit/88dd8d2867d85ca8fc3b48d2aee61060ef328821))
+* Disable OkHttp auto retries on connection failure (box/box-codegen[#874](https://github.com/box/box-java-sdk/issues/874)) ([#1541](https://github.com/box/box-java-sdk/issues/1541)) ([c2bd137](https://github.com/box/box-java-sdk/commit/c2bd137e469b9e67a14a33bb073107ff5db44175))
+* Support Archive API (box/box-openapi[#563](https://github.com/box/box-java-sdk/issues/563)) ([#1553](https://github.com/box/box-java-sdk/issues/1553)) ([609e8bb](https://github.com/box/box-java-sdk/commit/609e8bb5eb7143281543dcfaada23f2649acae9d))
+
+## [10.1.0](https://github.com/box/box-java-sdk/compare/v10.0.0...v10.1.0) (2025-10-06)
+
+
+### Bug Fixes
+
+* Allow flexible key-value data in `AiExtractResponse.answer` and `Event.additionalDetails` (box/box-openapi[#556](https://github.com/box/box-java-sdk/issues/556)) ([#1470](https://github.com/box/box-java-sdk/issues/1470)) ([e215a5f](https://github.com/box/box-java-sdk/commit/e215a5f2502e694421a05d8da550d2b305c09460))
+* Make `role` parameter of update collaboration optional (box/box-openapi[#557](https://github.com/box/box-java-sdk/issues/557)) ([#1479](https://github.com/box/box-java-sdk/issues/1479)) ([6896386](https://github.com/box/box-java-sdk/commit/6896386c6086996399066b09b5afc998a5a95ca4))
+
+
+### New Features and Enhancements
+
+* Add `Javadoc` comments (box/box-codegen[#839](https://github.com/box/box-java-sdk/issues/839)) ([#1465](https://github.com/box/box-java-sdk/issues/1465)) ([c72407d](https://github.com/box/box-java-sdk/commit/c72407dc77cc67f3a178d607a2b1bd4e90e832a8))
+
+## [10.0.0](https://github.com/box/box-java-sdk/compare/v4.16.3...v10.0.0) (2025-09-17)
+
+Introducing **`Box SDK v10`**, a major release designed to elevate your developer experience and streamline integration with Box Content Cloud. Currently available as a separate [`sdk-gen`](https://github.com/box/box-java-sdk/tree/sdk-gen) branch, `v10` will ultimately become the main branch.
+
+### Breaking Changes
+
+- This SDK version is auto-generated and introduces a new interface for all methods. Extensive documentation is available [here](https://github.com/box/box-java-sdk/tree/sdk-gen/docs).
+
+### What's New in `v10`
+
+- **Full API Support** — Complete coverage of the Box API ecosystem, giving you access to all the latest features and functionalities to build feature-rich applications.
+
+- **Rapid API Updates** — Our new auto-generation approach enables Box API additions within days, ensuring you can leverage the most up-to-date features without delay.
+
+- **Embedded Documentation** — All objects and parameters are documented directly in the SDK source code, keeping essential information in one place.
+
+- **Enhanced Convenience Methods** — New methods for authentication, chunk uploads, automatic retries, retry strategy, and more.
+
+### Important Notes
+
+This version includes the Box Next Generation SDK artifact, previously developed in parallel to core Box SDKs. To facilitate migration and provide access to the newest features, we'll soon release an additional major version combining both artifacts. Migration to `v10` includes breaking changes, please review the [migration guide](https://github.com/box/box-java-sdk/blob/sdk-gen/migration-guides/from-v4-to-v10.md) for details. For more information, see the [SDK versioning strategy document](https://developer.box.com/guides/tooling/sdks/sdk-versioning). Follow developer changelog for future updates.
+
+---
+
+### What’s New Compared to [Java SDK Gen](https://github.com/box/box-java-sdk-gen) `v0.8.1`
+
+#### ⚠ BREAKING CHANGES
+
+* Change names of unions (box/box-codegen[#787](https://github.com/box/box-java-sdk/issues/787)) ([#1359](https://github.com/box/box-java-sdk/issues/1359)) ([114e778](https://github.com/box/box-java-sdk/commit/114e7785031e19fb58933f231e656a991b5effb7))
+* Remove unused models from schemas (box/box-openapi[#547](https://github.com/box/box-java-sdk/issues/547)) ([#1354](https://github.com/box/box-java-sdk/issues/1354)) ([e031308](https://github.com/box/box-java-sdk/commit/e031308f102137351238bf3823372150d3927442)), closes [box/box-openapi#542](https://github.com/box/box-openapi/issues/542) [box/box-openapi#544](https://github.com/box/box-openapi/issues/544) [box/box-codegen#781](https://github.com/box/box-codegen/issues/781) [box/box-openapi#545](https://github.com/box/box-openapi/issues/545) [box/box-codegen#782](https://github.com/box/box-codegen/issues/782)
+* Replace `Date` with `OffsetDateTime` (box/box-codegen[#826](https://github.com/box/box-java-sdk/issues/826)) ([#1419](https://github.com/box/box-java-sdk/issues/1419)) ([ed04407](https://github.com/box/box-java-sdk/commit/ed04407e8effa8811bc85023783097f8a95e5223))
+
+#### New Features and Enhancements
+
+* Add proxy support (box/box-codegen[#830](https://github.com/box/box-java-sdk/issues/830)) ([#1424](https://github.com/box/box-java-sdk/issues/1424)) ([cc53247](https://github.com/box/box-java-sdk/commit/cc532475cdaf5ec3fd710149b41a6e7b04dcd32f))
+
+For more details check [migration guide](https://github.com/box/box-java-sdk/blob/sdk-gen/migration-guides/from-box-java-sdk-gen-v0-to-box-java-sdk-v10.md) from `box-java-sdk-gen` `v0` to `box-java-sdk` `v10`.
+
### [4.16.3](https://github.com/box/box-java-sdk/compare/v4.16.2...v4.16.3) (2025-07-23)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a4e23f0eb..e12872653 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -16,94 +16,5 @@ This project adheres to the [Box Open Code of Conduct](http://opensource.box.com
## How to contribute
-* **File an issue** - if you found a bug, want to request an enhancement, or want to implement something (bug fix or feature).
-* **Send a pull request** - if you want to contribute code. Please be sure to file an issue first.
-
-## Pull request best practices
-
-We want to accept your pull requests. Please follow these steps:
-
-### Step 1: File an issue
-
-Before writing any code, please file an issue stating the problem you want to solve or the feature you want to implement. This allows us to give you feedback before you spend any time writing code. There may be a known limitation that can't be addressed, or a bug that has already been fixed in a different way. The issue allows us to communicate and figure out if it's worth your time to write a bunch of code for the project.
-
-### Step 2: Fork this repository in GitHub
-
-This will create your own copy of our repository.
-
-### Step 3: Add the upstream source
-
-The upstream source is the project under the Box organization on GitHub. To add an upstream source for this project, type:
-
-```
-git remote add upstream git@github.com:box/box-java-sdk.git
-```
-
-This will come in useful later.
-
-### Step 4: Create a feature branch
-
-Create a branch with a descriptive name, such as `add-search`.
-
-### Step 5: Push your feature branch to your fork
-
-We use [semantic-versioning](https://semver.org/) and the [conventional commit message format](https://www.conventionalcommits.org/en/v1.0.0/). Keep a separate feature branch for each issue you want to address. As you develop code, continue to push code to your remote feature branch. Example:
-
-```
-tag: short description
-
-longer description here if necessary.
-```
-
-The message summary should be a one-sentence description of the change, and it must be 72 characters in length or shorter. For a list of tags, please [click here](https://github.com/commitizen/conventional-commit-types/blob/master/index.json). Note that you must include the `!` for breaking changes (e.g. `feat!: removed old apis`).
-
-Shown below are examples of the release type that will be done based on a commit message.
-
-#### Commit Types
-
-"Semantic versioning" means that changes to the version number of the package (e.g. `3.42.11` to `3.43.0`) are done according to rules that indicate how the change will affect consumers. Read more on the [semver page](https://semver.org/).
-
-The version number is broken into 3 positions — `Major.Minor.Patch`. In semantic release terms, changes to the numbers follow `Breaking.Feature.Fix`. The `release` script parses commit messages and decides what type of release to make based on the types of commits detected since the last release.
-
-The rules for commit types are:
-
-- Anything that changes or removes an API, option, or output format is a breaking change denoted by `!`.
-- Anything that adds new functionality in a backwards-compatible way is a feature (`feat`). Consumers have to upgrade to the new version to use the feature, but nothing will break if they do so.
-- Bugfixes (`fix`) for existing behavior are a patch. Consumers don't have to do anything but upgrade.
-- Other prefixes, such as `docs` or `chore`, don't trigger releases and don't appear in the changelog. These tags signal that there are **no external changes to _any_ APIs** (including non-breaking ones).
-
-In most cases, commits will be a `feat` or `fix`. Make sure to include the `!` in the title if there are non-backwards-compatible changes in the commit.
-
-| Commit message | Release type | New version |
-| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | ----------- |
-| `feat!: remove old files endpoints` | Major ("breaking") | `X+1.0.0` |
-| `feat: add new file upload endpoint` | Minor ("feature") | `X.Y+1.0` |
-| `fix: file streaming during download` | Patch ("fix") | `X.Y.Z+1` |
-| `docs: document files api` | No release | `X.Y.Z` |
-| `chore: remove commented code from file upload` | No release | `X.Y.Z` |
-| `refactor: rename a variable (invisible change)` | No release | `X.Y.Z` |
-
-### Step 6: Rebase
-
-Before sending a pull request, rebase against upstream, such as:
-
-```
-git fetch upstream
-git rebase upstream/main
-```
-
-This will add your changes on top of what's already in upstream, minimizing merge issues.
-
-### Step 7: Run the tests
-
-Make sure that the code builds and passes all unit tests by running:
-
-```bash
-$ ./gradlew clean build
-```
-
-### Step 8: Send the pull request
-
-Send the pull request from your feature branch to us. Be sure to include a description that lets us know what work you did.
-
-Keep in mind that we like to see one issue addressed per pull request, as this helps keep our git history clean and we can more easily track down issues.
+- **File an issue** - if you found a bug, want to request an enhancement, or want to implement something (bug fix or feature).
+- **Send a pull request** - this project is generated using [Box Codegen](https://github.com/box/box-codegen) based on[Box OpenAPI 3.0 Specification](https://github.com/box/box-openapi), so if you want found something you want to change in the generated code, you'll need to modify the codegen project and submit a pull request there.
diff --git a/README.md b/README.md
index fbff6466d..6209a16f0 100644
--- a/README.md
+++ b/README.md
@@ -2,313 +2,256 @@
-# Box Java SDK
+# Box Java SDK v10
[](http://opensource.box.com/badges)
+
+

-[](https://raw.githubusercontent.com/box/box-java-sdk/main/LICENSE)
-[](https://github.com/box/box-java-sdk/actions/workflows/build-main.yml)
-[](https://coveralls.io/github/box/box-java-sdk?branch=main)
+[](https://coveralls.io/github/box/box-java-sdk-gen?branch=main)
-The Box Java SDK for interacting with the
-[Box Content API](https://developers.box.com/docs/).
+
+
-## Latest Release
-Latest release can be found [here](https://github.com/box/box-java-sdk/tree/v4.16.3).
+- [Introduction](#introduction)
+- [Supported versions](#supported-versions)
+ - [Version v5](#version-v5)
+ - [Version v10](#version-v10)
+ - [Which Version Should I Use?](#which-version-should-i-use)
+- [Installing](#installing)
+- [Getting Started](#getting-started)
+- [Authentication](#authentication)
+- [Documentation](#documentation)
+- [Migration guides](#migration-guides)
+- [Versioning](#versioning)
+ - [Version schedule](#version-schedule)
+- [Contributing](#contributing)
+- [3rd Party Libraries & Licenses](#3rd-party-libraries--licenses)
+- [FIPS 140-2 Compliance](#fips-140-2-compliance)
+- [Questions, Bugs, and Feature Requests?](#questions-bugs-and-feature-requests)
+- [Copyright and License](#copyright-and-license)
-## Upgrades
-You can read about how to migrate to the 4 version [here](doc/upgrades/3.x.x%20to%204.x.x.md).
+
-## Versions
-We use a modified version of [Semantic Versioning](https://semver.org/) for all changes. See [version strategy](VERSIONS.md) for details which is effective from 30 July 2022.
-
-### Supported Version
-
-Only the current MAJOR version of SDK is supported. New features, functionality, bug fixes, and security updates will only be added to the current MAJOR version.
+# Introduction
-A current release is on the leading edge of our SDK development, and is intended for customers who are in active development and want the latest and greatest features. Instead of stating a release date for a new feature, we set a fixed minor or patch release cadence of maximum 2-3 months (while we may release more often). At the same time, there is no schedule for major or breaking release. Instead, we will communicate one quarter in advance the upcoming breaking change to allow customers to plan for the upgrade. We always recommend that all users run the latest available minor release for whatever major version is in use. We highly recommend upgrading to the latest SDK major release at the earliest convenient time and before the EOL date.
+We are excited to introduce the v10 major release of the Box Java SDK,
+designed to elevate the developer experience and streamline your integration with the Box Content Cloud.
-### Version schedule
+With this SDK version, we provide the `com.box.sdkgen` package, which gives you access to:
-| Version | Supported Environments | State | First Release | EOL/Terminated |
-|---------|---------------------------------------------------------|-----------|---------------|----------------|
-| 4 | Java 8 and up | Supported | 17 Jan 2023 | TBD |
-| 3 | Java 8 and up | EOL | 17 Jan 2022 | 17 Jan 2023 |
-| 2 | | EOL | 07 Jan 2016 | 17 Jan 2022 |
-| 1 | | EOL | 15 Apr 2015 | 07 Jan 2016 |
+1. Full API Support: The new generation of Box SDKs empowers developers with complete coverage of the Box API ecosystem. You can now access all the latest features and functionalities offered by Box, allowing you to build even more sophisticated and feature-rich applications.
+2. Rapid API Updates: Say goodbye to waiting for new Box APIs to be incorporated into the SDK. With our new auto-generation development approach, we can now add new Box APIs to the SDK at a much faster pace (in a matter of days). This means you can leverage the most up-to-date features in your applications without delay.
+3. Embedded Documentation: We understand that easy access to information is crucial for developers. With our new approach, we have included comprehensive documentation for all objects and parameters directly in the source code of the SDK. This means you no longer need to look up this information on the developer portal, saving you time and streamlining your development process.
+4. Enhanced Convenience Methods: Our commitment to enhancing your development experience continues with the introduction of convenience methods. These methods cover various aspects such as chunk uploads, classification, and much more.
+5. Seamless Start: The new SDKs integrate essential functionalities like authentication, automatic retries with exponential backoff, exception handling, request cancellation, and type checking, enabling you to focus solely on your application's business logic.
+Embrace the new generation of Box SDKs and unlock the full potential of the Box Content Cloud.
+# Supported versions
-## Getting Started
-Getting Started Docs: https://developer.box.com/guides/tooling/sdks/java/
-API Reference: https://developer.box.com/reference/
+To enhance developer experience, we have introduced the new generated codebase through the `com.box.sdkgen` package.
+The `com.box.sdkgen` package is available in two major supported versions: v5 and v10.
-## JVM
+## Version v5
-The SDK can be obtained by adding it as a [maven dependency](http://opensource.box.com/box-java-sdk/),
-cloning the source into your project, or by downloading one of the precompiled JARs from the
-[releases page on GitHub](https://github.com/box/box-java-sdk/releases).
+In v5 of the Box Java SDK, we are introducing a version that consolidates both the manually written package (`com.box.sdk`)
+and the new generated package (`com.box.sdkgen`). This allows developers to use both packages simultaneously within a single project.
-If you are developing application for Android visit our [Android guide](doc/android.md)
-
-**IF YOU USE THE JAR, you'll also need to include several dependencies:**
-
-1. [minimal-json v0.9.5](https://github.com/ralfstx/minimal-json)
- Maven: `com.eclipsesource.minimal-json:minimal-json:0.9.5`
-2. [jose4j v0.9.4](https://bitbucket.org/b_c/jose4j/wiki/Home)
- Maven: `org.bitbucket.b_c:jose4j:0.9.4`
-3. [bouncycastle bcprov-jdk18on v1.78.1](https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk18on/1.78.1)
- Maven: `org.bouncycastle:bcprov-jdk18on:1.78.1`
-4. [bouncycastle bcpkix-jdk18on v1.78.1](https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk18on/1.78.1)
- Maven: `org.bouncycastle:bcpkix-jdk18on:1.78.1`
-5. [Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 7](http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html)
- If you don't install this, you'll get an exception about key length or exception about parsing PKCS private key for Box Developer Edition. This is not a Box thing, this is a U.S. Government requirement concerning strong encryption.
- The listed jar is for Oracle JRE. There might be other similar JARs for different JRE versions like the one below for IBM JDK
- [Java Cryptography Extension for IBM JDK](https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=jcesdk)
-6. [okhttp v4.12.0](https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp/4.12.0)
- Maven: `com.squareup.okhttp3:okhttp:4.12.0`
-7. [okio-jvm v3.2.0](https://mvnrepository.com/artifact/com.squareup.okio/okio-jvm/3.2.0)
- Maven: `com.squareup.okio:okio-jvm:3.2.0`
-8. [kotlin-stdlib v1.6.20](https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib/1.6.20)
- Maven: `org.jetbrains.kotlin:kotlin-stdlib:1.6.20`
-9. [kotlin-stdlib-common v1.6.20](https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-common/1.6.20)
- Maven: `org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20`
+The codebase for v5 of the Box Java SDK is currently available on the [combined-sdk](https://github.com/box/box-java-sdk/tree/combined-sdk) branch.
+Migration guide which would help with migration from `com.box.sdk` to `com.box.sdkgen` can be found [here](./migration-guides/from-com-box-sdk-to-com-box-sdkgen.md).
-An app has to be authorized by the admin of the enterprise before these tests. It's always good to begin with the
-[Getting Started Section](https://developer.box.com/docs/setting-up-a-jwt-app) at Box's developer website.
+Version v5 is intended for:
-## Android
-If you are developing application for Android visit our [Android guide](doc/android.md).
+- Existing developers of the Box Java SDK v4 who want to access new API features while keeping their current codebase largely unchanged.
+- Existing developers who are in the process of migrating to `com.box.sdkgen`, but do not want to move all their code to the new package immediately.
-## Box Java SDK and other frameworks
-Box Java SDK utilizes the OkHttp client as its underlying component. This client is widely adopted by various
-frameworks, which can occasionally result in issues. We recommend considering library upgrades or excluding
-OkHttp from those frameworks or the software development kit (SDK) to determine if that resolves the problems.
-Typically, it is advisable to search for any reports or instances where others encountered similar
-issues when using the specific framework alongside an external OkHttp client.
+## Version v10
-## Quick Test
+Starting with v10, the SDK is built entirely on the generated `com.box.sdkgen` package, which fully and exclusively replaces the old `com.box.sdk` package.
+The codebase for v10 of the Box Java SDK is currently available on the [main](https://github.com/box/box-java-sdk/tree/main) branch.
-**Following things work only if the app has been configured and authorized as mentioned [here](https://developer.box.com/docs/setting-up-a-jwt-app)**
-
-Here is a simple example of how to authenticate with the API using a developer
-token and then print the ID and name of each item in your root folder.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("developer-token");
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-for (BoxItem.Info itemInfo : rootFolder) {
- System.out.format("[%s] %s\n", itemInfo.getID(), itemInfo.getName());
-}
-```
+Version v10 is intended for:
-For more details on how to get started, check out the [overview guide](doc/overview.md).
-It has a short explanation of how the SDK works and how you can get started using it.
+- New users of the Box Java SDK.
+- Developers already working with the generated Box Java SDK previously available under the [Box Java SDK Gen repository](https://github.com/box/box-java-sdk-gen).
-### Sample Projects
+## Which Version Should I Use?
-Three sample projects can be found in `src/example`.
+| Scenario | Recommended Version | Example gradle dependency |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ----------------------------- |
+| Creating a new application | Use [v10](https://github.com/box/box-java-sdk/tree/main) | `com.box:box-java-sdk:10.0.0` |
+| App using [box-java-sdk-gen](https://central.sonatype.com/artifact/com.box/box-java-sdk-gen) artifact | Migrate to [v10](https://github.com/box/box-java-sdk/tree/main) | `com.box:box-java-sdk:10.0.0` |
+| App using both [box-java-sdk-gen](https://central.sonatype.com/artifact/com.box/box-java-sdk-gen) and [box-java-sdk](https://central.sonatype.com/artifact/com.box/box-java-sdk) artifacts | Upgrade to [v5](https://github.com/box/box-java-sdk/tree/combined-sdk) | `com.box:box-java-sdk:5.0.0` |
+| App using v4 of [box-java-sdk](https://central.sonatype.com/artifact/com.box/box-java-sdk) artifact | Upgrade to [v5](https://github.com/box/box-java-sdk/tree/combined-sdk) | `com.box:box-java-sdk:5.0.0` |
-#### Main
+For full guidance on SDK versioning, see the [Box SDK Versioning Guide](https://developer.box.com/guides/tooling/sdks/sdk-versioning/).
-This project will output your name and a list of the files and folders in your root directory.
+# Installing
-To run the project, first provide a developer token in
-`src/example/java/com/box/sdk/example/Main.java`. You can obtain a developer
-token from your application's [developer console](https://app.box.com/developers/services).
+The SDK is available on [Maven Central Repository](https://mvnrepository.com/artifact/com.box/box-java-sdk). To include the SDK in your project, add the following dependency to your `pom.xml` file:
-```java
-public final class Main {
- private static final String DEVELOPER_TOKEN = "";
-
- // ...
-}
+```xml
+
+ com.box
+ box-java-sdk
+ VERSION
+
```
-Then just invoke `gradle runExample` to run the Main example!
-
-### Other projects
-
-Below projects need app configurations stored in JSON format in `config.json` file at location `src/example/config/`.
-
-This configuration file can be downloaded from your application's `Configuration` tab in the
-[developer console](https://app.box.com/developers/console)
-
-#### CreateAppUser
-
-This project will output the user id of enterprise admin and will create a new App User for the enterprise.
-
-To run the project, first provide the name of the app user in `src/example/java/com/box/sdk/example/CreateAppUser.java`.
+To include the SDK in your project using Gradle, add the following dependency to your `build.gradle` file:
-```java
-public final class CreateAppUser {
-
- private static final String APP_USER_NAME = "";
- private static final String EXTERNAL_APP_USER_ID = "";
-
- // ...
-}
+```gradle
+implementation 'com.box:box-java-sdk:VERSION'
```
-Then just invoke `gradle runCreateAppUser` to run the CreateAppUser example!
+Where `VERSION` is the version of the SDK you want to use. The next generation of the SDK starts with version `10.0.0`.
+You can find the latest version in the [Maven Central Repository](https://mvnrepository.com/artifact/com.box/box-java-sdk).
-Note: The JCE bundled with oracle JRE supports keys upto 128 bit length only. To use larger cryptographic keys, install [JCE Unlimited Strength Jurisdiction Policy Files](http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html).
+# Getting Started
-#### AccessAsAppUser
+To get started with the SDK, get a Developer Token from the Configuration page of your app in the [Box Developer
+Console](https://app.box.com/developers/console). You can use this token to make test calls for your own Box account.
-This project will retrieve the information of the given App User and will list the files/folders under root folder.
+The SDK provides an `BoxDeveloperTokenAuth` class, which allows you to authenticate using your Developer Token.
+Use instance of `BoxDeveloperTokenAuth` to initialize `BoxClient` object.
+Using `BoxClient` object you can access managers, which allow you to perform some operations on your Box account.
-To run the project, first provide the Id of the app user in `src/example/java/com/box/sdk/example/CreateAppUser.java`.
+The example below demonstrates how to authenticate with Developer Token and print names of all items inside a root folder.
```java
-public final class AccessAsAppUser {
-
- private static final String USER_ID = "";
-
- // ...
-}
+BoxDeveloperTokenAuth auth = new BoxDeveloperTokenAuth("DEVELOPER_TOKEN");
+BoxClient client = new BoxClient(auth);
+client.folders.getFolderItems("0").getEntries().forEach(item -> {
+ System.out.println(item.toString());
+});
```
-Then just invoke `gradle runAccessAsAppUser` to run the AccessAsAppUser example!
-
-Note: The JCE bundled with oracle JRE supports keys upto 128 bit length only. To use larger cryptographic keys, install [JCE Unlimited Strength Jurisdiction Policy Files](http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html).
-
-#### BoxDeveloperEditionAPIConnectionAsEnterpriseUser
+# Authentication
-This example shows how to get tokens for an enterprise user, say admin of the enterprise and do actions on behalf of admin.
+Box Java SDK v10 supports multiple authentication methods including Developer Token, OAuth 2.0,
+Client Credentials Grant, and JSON Web Token (JWT).
-To run the project, follow below steps
+You can find detailed instructions and example code for each authentication method in
+[Authentication](./docs/authentication.md) document.
-1. Turn on `Enterprise` in `Application Access` section in Developer Console for the app
+# Documentation
-2. Turn on `Generate User Access Tokens` in `Advanced Features` section in Developer Console for the app
+Browse the [docs](docs/README.md) or see [API Reference](https://developer.box.com/reference/) for more information.
-3. Provide the Id of the admin user (or any enterprise user) in `src/example/java/com/box/sdk/example/BoxDeveloperEditionAPIConnectionAsEnterpriseUser.java`.
+# Migration guides
-```java
-public final class BoxDeveloperEditionAPIConnectionAsEnterpriseUser {
+Migration guides which help you to migrate to supported major SDK versions can be found [here](./migration-guides).
- private static final String USER_ID = "";
- // ...
- Reader reader = new FileReader("src/example/config/config.json");
- BoxConfig boxConfig = BoxConfig.readFrom(reader);
- IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(10);
+# Versioning
- BoxDeveloperEditionAPIConnection api = new BoxDeveloperEditionAPIConnection(
- USER_ID,
- DeveloperEditionEntityType.USER,
- boxConfig,
- accessTokenCache
- );
-}
-```
+We use a modified version of [Semantic Versioning](https://semver.org/) for all changes. See [version strategy](VERSIONS.md) for details which is effective from 30 July 2022.
-## Compatibility
+A current release is on the leading edge of our SDK development, and is intended for customers who are in active development and want the latest and greatest features.
-The Box Java SDK is compatible with Java 8 and up.
+We always recommend that all users run the latest available minor release for whatever major version is in use.
+We highly recommend upgrading to the latest SDK major release at the earliest convenient time and before the EOL date.
-## Compression Support
-The SDK supports both gzip and zstd compression for API requests. Compression is handled automatically based on server capabilities.
+## Version schedule
-## Building
+| Version | Supported Environments | State | First Release | EOL/Terminated |
+| ------- | ---------------------- | --------- | ------------- | ---------------------- |
+| 10 | Java 8 and up | Supported | 17 Sep 2025 | TBD |
+| 5 | Java 8 and up | Supported | 23 Oct 2025 | 2027 or v6 is released |
+| 4 | Java 8 and up | EOL | 17 Jan 2023 | 23 Oct 2025 |
+| 3 | Java 8 and up | EOL | 17 Jan 2022 | 17 Jan 2023 |
+| 2 | | EOL | 07 Jan 2016 | 17 Jan 2022 |
+| 1 | | EOL | 15 Apr 2015 | 07 Jan 2016 |
-The SDK uses Gradle for its build system. SDK comes with Gradle wrapper. Running `./gradlew build` from the root
-of the repository will compile, lint, and test the SDK.
+# Contributing
-```bash
-$ ./gradlew build
-```
+See [CONTRIBUTING.md](./CONTRIBUTING.md).
-The SDK also includes integration tests which make real API calls, and therefore
-are run separately from unit tests. Integration tests should be run against a
-test account since they create and delete data. To run the integration tests,
-remove the `.template` extension from
-`src/test/config/config.properties.template` and fill in your test account's
-information. Then run:
+# 3rd Party Libraries & Licenses
-```bash
-$ ./gradlew integrationTest
-```
+The Java SDK uses third-party libraries that are required for usage. Their licenses are listed below:
-## Documentation
-
-You can find guides and tutorials in the `doc` directory.
-
-* [BUILD ON BOX PLATFORM](https://developer.box.com/guides/getting-started/)
-* [Javadocs](http://box.github.io/box-java-sdk/javadoc/com/box/sdk/package-summary.html)
-* [Overview](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/overview.md)
-* [Configuration](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/configuration.md)
-* [Logging](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/logging.md)
-* [Authentication](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/authentication.md)
-* [Files](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/files.md)
-* [Folders](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/folders.md)
-* [Comments](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/comments.md)
-* [Collaborations](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/collaborations.md)
-* [Collaboration Allowlists](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/collaboration_allowlists.md)
-* [Events](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/events.md)
-* [Search](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/search.md)
-* [Users](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/users.md)
-* [Groups](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/groups.md)
-* [Tasks](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/tasks.md)
-* [Trash](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/trash.md)
-* [Collections](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/collections.md)
-* [Devices](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/devices.md)
-* [Retention Policies](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/retention_policies.md)
-* [Legal Holds Policy](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/legal_holds.md)
-* [Watermarking](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/watermarking.md)
-* [Webhooks](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/webhooks.md)
-* [Web Links](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/weblinks.md)
-* [Metadata Templates](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/metadata_template.md)
-* [Classifications](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/classifications.md)
-* [Recent Items](https://github.com/box/box-java-sdk/blob/v4.16.3/doc/recent_items.md)
-
-
-Javadocs are generated when `gradle javadoc` is run and can be found in
-`build/doc/javadoc`.
-
-## FIPS 140-2 Compliance
+1. [jackson-annotations v2.21](https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations/2.21)
+ Maven: `com.fasterxml.jackson.core:jackson-annotations:2.21`
+ Licence: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+2. [jackson-core v2.21.4](https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core/2.21.4)
+ Maven: `com.fasterxml.jackson.core:jackson-core:2.21.4`
+ Licence: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+3. [jackson-databind v2.21.4](https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.21.4)
+ Maven: `com.fasterxml.jackson.core:jackson-databind:2.21.4`
+ Licence: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+4. [okhttp v4.12.0](https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp/4.12.0)
+ Maven: `com.squareup.okhttp3:okhttp:4.12.0`
+ Licence: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+5. [okio v3.5.0](https://mvnrepository.com/artifact/com.squareup.okio/okio/3.5.0)
+ Maven: `com.squareup.okio:okio:3.5.0`
+ Licence: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+6. [jose4j v0.9.6](https://mvnrepository.com/artifact/org.bitbucket.b_c/jose4j/0.9.6)
+ Maven: `org.bitbucket.b_c:jose4j:0.9.6`
+ Licence: [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+7. [bcprov-jdk18on v1.84](https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk18on/1.84)
+ Maven: `org.bouncycastle:bcprov-jdk18on:1.84`
+ Licence: [MIT](https://opensource.org/licenses/MIT)
+8. [bcpkix-jdk18on v1.84](https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk18on/1.84)
+ Maven: `org.bouncycastle:bcpkix-jdk18on:1.84`
+ Licence: [MIT](https://opensource.org/licenses/MIT)
+
+The following libraries are required for running tests:
+
+1. [junit-jupiter-api v5.10.0](https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api/5.10.0)
+ Maven: `org.junit.jupiter:junit-jupiter-api:5.10.0`
+ Licence: [EPL 2.0](https://www.eclipse.org/legal/epl-2.0/)
+2. [junit-jupiter-engine v5.10.0](https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine/5.10.0)
+ Maven: `org.junit.jupiter:junit-jupiter-engine:5.10.0`
+ Licence: [EPL 2.0](https://www.eclipse.org/legal/epl-2.0/)
+
+# FIPS 140-2 Compliance
To generate a Json Web Signature used for retrieving tokens in the JWT authentication method, the Box Java SDK decrypts an encrypted private key.
-For this purpose, Box Java SDK uses libraries (`org.bouncycastle:bcpkix-jdk18on:1.77` and `org.bouncycastle:bcprov-jdk18on:1.77`)
+For this purpose, Box Java SDK uses libraries (`org.bouncycastle:bcpkix-jdk18on:1.84` and `org.bouncycastle:bcprov-jdk18on:1.84`)
that are NOT compatible with FIPS 140-2 validated cryptographic library (`org.bouncycastle:bc-fips`).
There are two ways of ensuring that decryption operation is FIPS-compiant.
-1. You can provide a custom implementation of the `IPrivateKeyDecryptor` interface,
-which performs the decryption operation using FIPS-certified library of your choice. The interface requires the
-implementation of just one method:
+1. You can provide a custom implementation of the `IPrivateKeyDecryptor` interface,
+ which performs the decryption operation using FIPS-certified library of your choice.
+ The interface requires the implementation of just one method:
+
```java
PrivateKey decryptPrivateKey(String encryptedPrivateKey, String passphrase);
```
-After implementing the custom decryptor, you need to set your custom decryptor class in the Box Config.
-Below is an example of setting up a `BoxDeveloperEditionAPIConnection` with a config file and the custom decryptor.
+
+After implementing the custom decryptor, you need to set your custom decryptor class:
+
```java
-Reader reader = new FileReader(JWT_CONFIG_PATH);
-BoxConfig boxConfig = BoxConfig.readFrom(reader);
-boxConfig.setPrivateKeyDecryptor(customDecryptor)
-BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig);
+JWTConfig newConfig = JWTConfig.fromConfigFile(JWT_CONFIG_PATH, customDecryptor);
+BoxJWTAuth auth = new BoxJWTAuth(jwtConfig);
+BoxClient client = new BoxClient(auth);
```
-2. Alternative method is to override the Bouncy Castle libraries to the v.1.57 version,
-which are compatible with the FIPS 140-2 validated cryptographic library (`org.bouncycastle:bc-fips`).
+2. Alternative method is to override the Bouncy Castle libraries to the v.1.57 version,
+ which are compatible with the FIPS 140-2 validated cryptographic library (`org.bouncycastle:bc-fips`).
NOTE: This solution is not recommended as Bouncy Castle v.1.57 has some moderate vulnerabilities reported against those versions, including:
- - [CVE-2020-26939](https://github.com/advisories/GHSA-72m5-fvvv-55m6) - Observable Differences in Behavior to Error Inputs in Bouncy Castle
- - [CVE-2020-15522](https://github.com/advisories/GHSA-6xx3-rg99-gc3p) - Timing based private key exposure in Bouncy Castle
+
+- [CVE-2020-26939](https://github.com/advisories/GHSA-72m5-fvvv-55m6) - Observable Differences in Behavior to Error Inputs in Bouncy Castle
+- [CVE-2020-15522](https://github.com/advisories/GHSA-6xx3-rg99-gc3p) - Timing based private key exposure in Bouncy Castle
Furthermore,using Bouncy Castle v.1.57 may lead to [Bouncycastle BadPaddingException for JWT auth](#bouncycastle-badPaddingException-for-jWT-auth).
Gradle example
+
```groovy
implementation('com.box:box-java-sdk:x.y.z') {
- exclude group: 'org.bouncycastle', module: 'bcprov-jdk15on'
- exclude group: 'org.bouncycastle', module: 'bcpkix-jdk15on'
+ exclude group: 'org.bouncycastle', module: 'bcprov-jdk18on'
+ exclude group: 'org.bouncycastle', module: 'bcpkix-jdk18on'
}
runtimeOnly('org.bouncycastle:bcprov-jdk15on:1.57')
runtimeOnly('org.bouncycastle:bcpkix-jdk15on:1.57')
```
Maven example:
+
```xml
@@ -319,13 +262,13 @@ Maven example:
org.bouncycastle
- bcprov-jdk15on
+ bcprov-jdk18on
org.bouncycastle
- bcpkix-jdk15on
+ bcpkix-jdk18on
-
+
org.bouncycastle
@@ -342,26 +285,21 @@ Maven example:
```
-### Bouncycastle BadPaddingException for JWT auth
+# Questions, Bugs, and Feature Requests?
-As of October 2023, RSA keypairs generated on the Developer Console (refer to the [Generate a keypair guide](https://developer.box.com/guides/authentication/jwt/jwt-setup/#generate-a-keypair-recommended))
-are no longer compatible with Bouncy Castle version 1.57, which was utilized in the Box Java SDK up to v4.6.1.
-Attempting to use a JWT configuration downloaded from the Developer Console results in a
-`javax.crypto.BadPaddingException: pad block corrupted` error.
-Prossible solutions:
-1. Upgrade to the v4.7.0 of Box Java SDK, which uses newer version of the Bouncy Castle library. (recommended)
-2. Manually generate a keypair using OpenSSL version 1.0.x and add the Public Key to the Developer Console.
- The [manually add keypair guide](https://developer.box.com/guides/authentication/jwt/jwt-setup/#manually-add-keypair) provides assistance in this process.
+Need to contact us directly? [Browse the issues tickets](https://github.com/box/box-java-sdk/issues)! Or, if that
+doesn't work, [file a new one](https://github.com/box/box-java-sdk/issues/new), and we will get
+back to you. If you have general questions about the Box API, you can post to the [Box Developer Forum](https://community.box.com/box-platform-5).
-## Copyright and License
+# Copyright and License
-Copyright 2019 Box, Inc. All rights reserved.
+Copyright 2025 Box, Inc. All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
diff --git a/VERSIONS.md b/VERSIONS.md
index 41fde357a..06f2a9e5a 100644
--- a/VERSIONS.md
+++ b/VERSIONS.md
@@ -1,5 +1,6 @@
# Version Lifecycle
-We use a modified version of [Semantic Versioning](https://semver.org/) for all changes. It is strongly encouraged that you pin at least the major version and potentially the minor version to avoid pulling in breaking changes. Increasing the major version of an SDK indicates that this SDK underwent significant and substantial changes to support new idioms and patterns in the language. Major versions are introduced when public interfaces (e.g. classes, methods, types, etc.), behaviours, or semantics have changed.
+
+We use a modified version of [Semantic Versioning](https://semver.org/) for all changes. It is strongly encouraged that you pin at least the major version and potentially the minor version to avoid pulling in breaking changes. Increasing the major version of an SDK indicates that this SDK underwent significant and substantial changes to support new idioms and patterns in the language. Major versions are introduced when public interfaces (e.g. classes, methods, types, etc.), behaviours, or semantics have changed.
Semantic Versions take the form of `MAJOR.MINOR.PATCH`.
@@ -11,13 +12,12 @@ The MAJOR version is used to indicate the family of technology represented by th
New MAJOR versions will be communicated in advance via:
-* An email announcement is sent to affected accounts, announcing our plans to end support for the specific SDK version. The email will outline the path to end-of-support, specify the campaign timelines, and provide upgrade guidance.
-* Box SDK documentation, such as API reference documentation, user guides, SDK product marketing pages, and GitHub readme(s) are updated to indicate the campaign timeline and provide guidance on upgrading affected applications.
-* Deprecation warnings are added to the SDKs, outlining the path to end-of-support and linking to the SDK documentation.
+- Box SDK documentation, such as API reference documentation, user guides, SDK product marketing pages, and GitHub readme(s) are updated to indicate the campaign timeline and provide guidance on upgrading affected applications.
+- Deprecation warnings are added to the SDKs, outlining the path to end-of-support and linking to the SDK documentation.
Deprecations are introduced in minor releases. We will not introduce new deprecations in patch releases. These deprecations will preserve the existing behaviour while emitting a warning that provide guidance on:
-* How to achieve similar behaviour if an alternative is available
-* The version in which the deprecation will be enforced.
+- How to achieve similar behaviour if an alternative is available
+- The version in which the deprecation will be enforced.
Deprecations will only be enforced in major releases. For example, if a behaviour is deprecated in version 1.2.0, it will continue to work, with a warning, for all releases in the 1.x series. The behaviour will change and the deprecation will be removed in the next major release (2.x.x).
diff --git a/build.gradle b/build.gradle
index dfb0b8ba2..576248aee 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,241 +1,154 @@
plugins {
- id "com.github.nbaztec.coveralls-jacoco" version "1.2.14"
- id "checkstyle"
- id "jacoco"
- id "java"
- id "maven-publish"
- id "signing"
- id "eclipse"
- id "idea"
- id 'org.jreleaser' version '1.18.0'
+ id "java"
+ id "com.diffplug.spotless" version "${spotlessVersion}"
+ id "maven-publish"
+ id "signing"
+ id "org.jreleaser" version "1.18.0"
+ id "com.github.nbaztec.coveralls-jacoco" version "${coverallsJacocoVersion}"
+ id "jacoco"
+ id "org.gradle.test-retry" version "${testRetryVersion}"
}
-
-sourceCompatibility = 1.8
-
group = "com.box"
archivesBaseName = "box-java-sdk"
-version = "4.16.3"
-
+version = "10.16.0"
java {
- withJavadocJar()
- withSourcesJar()
+ sourceCompatibility = JavaVersion.toVersion(libraryJavaVersion)
+ targetCompatibility = JavaVersion.toVersion(libraryJavaVersion)
+ withSourcesJar()
+ withJavadocJar()
}
-
repositories {
- mavenCentral()
+ mavenCentral()
}
-
-sourceSets {
- example {
- java {
- compileClasspath += main.output
- runtimeClasspath += main.runtimeClasspath
- }
- }
- intTest {
- java {
- compileClasspath += sourceSets.main.output
- compileClasspath += sourceSets.test.output
- runtimeClasspath += sourceSets.main.output
- runtimeClasspath += sourceSets.test.output
- }
- }
-}
-
-configurations {
- testsCommonImplementation.extendsFrom(implementation)
- testImplementation.extendsFrom(testsCommonImplementation)
- intTestImplementation.extendsFrom(testsCommonImplementation)
- intTestRuntimeOnly.extendsFrom(runtimeOnly)
-}
-
dependencies {
- implementation "com.eclipsesource.minimal-json:minimal-json:0.9.5"
- implementation "org.bitbucket.b_c:jose4j:0.9.4"
- implementation "org.bouncycastle:bcprov-jdk18on:1.78.1"
- implementation "org.bouncycastle:bcpkix-jdk18on:1.78.1"
- implementation "com.squareup.okhttp3:okhttp:4.12.0"
- implementation "com.github.luben:zstd-jni:1.5.7-2"
- testsCommonImplementation "junit:junit:4.13.2"
- testsCommonImplementation "org.hamcrest:hamcrest-library:2.2"
- testsCommonImplementation "org.mockito:mockito-core:4.8.0"
- testsCommonImplementation "org.slf4j:slf4j-nop:2.0.3"
- testImplementation "com.github.tomakehurst:wiremock:2.27.2"
- exampleImplementation "com.eclipsesource.minimal-json:minimal-json:0.9.5"
- // this is last version working under java 8
- checkstyle "com.puppycrawl.tools:checkstyle:9.3"
-}
-
-compileJava {
- sourceCompatibility = 1.8
- targetCompatibility = 1.8
-}
+ implementation "com.fasterxml.jackson.core:jackson-annotations:${jacksonAnnotationVersion}"
+ implementation "com.fasterxml.jackson.core:jackson-core:${jacksonCoreVersion}"
+ implementation "com.fasterxml.jackson.core:jackson-databind:${jacksonDatabindVersion}"
+ implementation "com.squareup.okhttp3:okhttp:${okhttpVersion}"
+ implementation "com.squareup.okio:okio:${okioVersion}"
+ implementation "org.bitbucket.b_c:jose4j:${jose4jVersion}"
+ implementation "org.bouncycastle:bcprov-jdk18on:${bouncyCastleBcprovJdk18onVersion}"
+ implementation "org.bouncycastle:bcpkix-jdk18on:${bouncyCastleBcpkixJdk18onVersion}"
+ testImplementation "org.junit.jupiter:junit-jupiter-api:${junitApiVersion}"
+ testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junitEngineVersion}"
+}
+spotless {
+ java {
+ googleJavaFormat "${googleJavaFormatVersion}"
+ target "src/**/*.java"
+ }
-javadoc {
- options.windowTitle "Box Java SDK"
- options.noQualifiers "all"
- options.stylesheetFile file("doc/css/javadoc.css")
- options.noTree true
- options.noIndex true
- options.noHelp true
- options.noDeprecatedList true
- options.noNavBar true
- options.encoding "utf-8"
- options.docEncoding "utf-8"
- options.charSet "utf-8"
- options.linkSource true
- options.links "https://docs.oracle.com/javase/8/docs/api/"
}
+test {
+ useJUnitPlatform()
+ retry {
+ maxRetries = 2
+ failOnPassedAfterRetry = false
+ }
-task runExample(type: JavaExec, dependsOn: "exampleClasses") {
- classpath = sourceSets.example.runtimeClasspath
- mainClass = "com.box.sdk.example.Main"
-}
+ testLogging {
+ events = ['passed', 'failed', 'skipped']
+ showStandardStreams = true
+ }
-task runCreateAppUser(type: JavaExec, dependsOn: "exampleClasses") {
- classpath = sourceSets.example.runtimeClasspath
- mainClass = "com.box.sdk.example.CreateAppUser"
-}
+ jacoco {
+ destinationFile = file("$buildDir/jacoco/test.exec")
+ }
-task runAccessAsAppUser(type: JavaExec, dependsOn: "exampleClasses") {
- classpath = sourceSets.example.runtimeClasspath
- mainClass = "com.box.sdk.example.AccessAsAppUser"
-}
+ filter {
+ // Socket timeout
+ excludeTestsMatching 'com.box.sdkgen.transfer.TransferITest.testTransferUserContent'
+ }
-task integrationTest(type: Test) {
- description = "Runs the integration tests."
- group = "Verification"
- testLogging.showStandardStreams = true
- testClassesDirs = sourceSets.intTest.output.classesDirs
- classpath = sourceSets.intTest.runtimeClasspath
}
+publishing {
+ publications {
+ boxJavaSdk(MavenPublication) {
+ from components.java
+ pom {
+ artifactId = project.getArchivesBaseName()
+ name = "Box Java SDK"
+ description = "Official Box Java SDK."
+ url = "https://opensource.box.com/box-java-sdk/"
+ packaging = "jar"
+ licenses {
+ license {
+ name = "The Apache License, Version 2.0"
+ url = "https://www.apache.org/licenses/LICENSE-2.0.txt"
+ }
-jacoco {
- reportsDirectory = file("$buildDir/reports/jacoco")
-}
+ }
-jacocoTestReport {
- reports {
- xml.required = true // coveralls plugin depends on xml format report
- html.required = true
- }
-}
+ developers {
+ developer {
+ id = "box"
+ name = "box"
+ email = "sdks@box.com"
+ }
-tasks.withType(JavaCompile) {
- options.compilerArgs << "-Xlint:all"
+ }
- if (project.hasProperty("bootClasspath")) {
- String bootClasspathString = project.property("bootClasspath")
- String[] bootClasspath = bootClasspathString.split(File.pathSeparator)
- options.bootstrapClasspath = files(bootClasspath)
- }
-}
+ scm {
+ connection = "scm:git:https://github.com/box/box-java-sdk.git"
+ developerConnection = "scm:git:https://github.com/box/box-java-sdk.git"
+ url = "https://github.com/box/box-java-sdk"
+ }
-tasks.withType(Test) {
- testLogging {
- exceptionFormat = "full"
- }
+ }
- jacoco {
- destinationFile = file("$buildDir/jacoco/test.exec")
}
- outputs.upToDateWhen { false }
-}
-
-tasks.withType(GenerateModuleMetadata) {
- enabled = false
-}
-
-artifacts {
- archives sourcesJar, javadocJar
-}
+ }
-test {
- useJUnit {
- excludeCategories "com.box.sdk.IntegrationTestJWT"
+ repositories {
+ maven {
+ url = layout.buildDirectory.dir('staging-deploy')
}
-}
-checkstyle {
- ignoreFailures = false
- maxWarnings = 0
-}
+ }
-publishing {
- publications {
- boxJavaSdk(MavenPublication) {
- from components.java
- pom {
- artifactId = project.getArchivesBaseName()
- name = "Box Java SDK"
- description = "The Box SDK for Java."
- url = "https://opensource.box.com/box-java-sdk/"
- packaging = "jar"
- licenses {
- license {
- name = "The Apache License, Version 2.0"
- url = "https://www.apache.org/licenses/LICENSE-2.0.txt"
- }
- }
- developers {
- developer {
- id = "box"
- name = "Box"
- email = "sdks@box.com"
- }
- }
- scm {
- connection = "scm:git:https://github.com/box/box-java-sdk.git"
- developerConnection = "scm:git:https://github.com/box/box-java-sdk.git"
- url = "https://github.com/box/box-java-sdk"
- }
- }
- }
- }
-
- repositories {
- maven {
- url = layout.buildDirectory.dir('staging-deploy')
- }
- }
}
-
signing {
- required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("publish") }
- // we are switching to gpg-agent and not using Java-based implementation because of
- // org.bouncycastle:bc-fips:1.0.2.1 libray preset in our Docker machines which is
- // not comaptible with Gradle implementation
- useGpgCmd()
- sign publishing.publications.boxJavaSdk
-}
-
-def centralUsername = project.findProperty("centralUsername")
+ required { !version.endsWith("SNAPSHOT") && gradle.taskGraph.hasTask("publish") }
+ // we are switching to gpg-agent and not using Java-based implementation because of
+ // org.bouncycastle:bc-fips:1.0.2.1 libray preset in our Docker machines which is
+ // not compatible with Gradle implementation
+ useGpgCmd()
+ sign publishing.publications.boxJavaSdk
+}
+def centralUsername = project.findProperty("centralUsername")
def centralPassword = project.findProperty("centralPassword")
jreleaser {
- signing {
- active = "NEVER"
- }
- deploy {
- maven {
- mavenCentral {
- sonatype {
- sign = false
- active = 'RELEASE'
- url = 'https://central.sonatype.com/api/v1/publisher'
- stagingRepository('build/staging-deploy')
- username = centralUsername
- password = centralPassword
- }
- }
-
+ signing {
+ active = "NEVER"
+ }
+
+ deploy {
+ maven {
+ mavenCentral {
+ sonatype {
+ active = "ALWAYS"
+ url = "https://central.sonatype.com/api/v1/publisher"
+ sign = false
+ stagingRepository('build/staging-deploy')
+ username = centralUsername
+ password = centralPassword
}
+
+ }
+
}
+
+ }
+
}
+jacoco {
+ reportsDirectory = file("$buildDir/reports/jacoco")
+}
+jacocoTestReport {
+ reports {
+ xml.required = true
+ html.required = true
+ }
-idea {
- module {
- sourceDirs -= file("src/intTest/java")
- testSourceDirs += file("src/intTest/java")
- }
}
diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml
deleted file mode 100755
index e364405b2..000000000
--- a/config/checkstyle/checkstyle.xml
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml
deleted file mode 100644
index 3f6da7c00..000000000
--- a/config/checkstyle/suppressions.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/doc/ai.md b/doc/ai.md
deleted file mode 100644
index fcc3a683e..000000000
--- a/doc/ai.md
+++ /dev/null
@@ -1,148 +0,0 @@
-AI
-==
-
-AI allows to send an intelligence request to supported large language models and returns
-an answer based on the provided prompt and items.
-
-
-
-
-- [AI](#ai)
- - [Send AI request](#send-ai-request)
- - [Send AI text generation request](#send-ai-text-generation-request)
- - [Get AI Agent default configuration](#get-ai-agent-default-configuration)
- - [Extract metadata freeform](#extract-metadata-freeform)
- - [Extract metadata structured](#extract-metadata-structured)
-
-
-
-Send AI request
---------------------------
-
-To send an AI request, call static
-[`sendAIRequest(String prompt, List items, Mode mode)`][send-ai-request] method.
-In the request you have to provide a prompt, a list of items that your prompt refers to and a mode of the request.
-There are two modes available: `SINGLE_ITEM_QA` and `MULTI_ITEM_QA`, which specifies if this request refers to
-for a single or multiple items.
-
-
-```java
-BoxAIResponse response = BoxAI.sendAIRequest(
- api,
- "What is the content of the file?",
- Collections.singletonList("123456", BoxAIItem.Type.FILE),
- BoxAI.Mode.SINGLE_ITEM_QA
-);
-```
-
-You can also provide a list of dialogue history entries to provide additional context to the LLM in generating the response, AI Agent configuration and flag to indicate whether citations should be returned.
-
-NOTE: The AI endpoint may return a 412 status code if you use for your request a file which has just been updated to the box.
-It usually takes a few seconds for the file to be indexed and available for the AI endpoint.
-
-[send-ai-request]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAI.html#sendAIRequest-com.box.sdk.BoxAPIConnection-java.lang.String-java.util.List-com.box.sdk.BoxAI.Mode-
-
-Send AI text generation request
---------------
-
-To send an AI request specifically focused on the creation of new text, call static
-[`sendAITextGenRequest(String prompt, List items, List dialogueHistory)`][send-ai-text-gen-request] method.
-In the request you have to provide a prompt, a list of items that your prompt refers to and optionally a dialogue history,
-which provides additional context to the LLM in generating the response.
-
-
-```java
-List dialogueHistory = new ArrayList<>();
-dialogueHistory.add(
- new BoxAIDialogueEntry(
- "Make my email about public APIs sound more professional",
- "Here is the first draft of your professional email about public APIs.",
- BoxDateFormat.parse("2013-05-16T15:26:57-07:00")
- )
- );
-BoxAIResponse response = BoxAI.sendAITextGenRequest(
- api,
- "Write an email to a client about the importance of public APIs.",
- Collections.singletonList(new BoxAIItem("123456", BoxAIItem.Type.FILE)),
- dialogueHistory
-);
-```
-
-You can also provide an AI Agent configuration to customize the behavior of the AI response generation.
-
-[send-ai-text-gen-request]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAI.html#sendAITextGenRequest-com.box.sdk.BoxAPIConnection-java.lang.String-java.util.List-java.util.List-
-
-Get AI Agent default configuration
---------------------------
-
-To get the default configuration of the AI Agent, call static
-[`getAiAgentDefaultConfig(BoxAPIConnection api, BoxAIAgent.Mode mode, String language, String model)`][get-ai-agent-default-config] method.
-In the request you have to provide the mode of the AI Agent, the language and the model, with the model is required while the language and mode are optional.
-
-
-```java
-BoxAIAgentConfig config = BoxAI.getAiAgentDefaultConfig(
- api,
- BoxAIAgent.Mode.ASK,
- "en",
- "openai__gpt_3_5_turbo"
-);
-```
-
-[get-ai-agent-default-config]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAI.html#getAiAgentDefaultConfig-com.box.sdk.BoxAPIConnection-com.box.sdk.ai.BoxAIAgent.Mode-java.lang.String-java.lang.String-
-
-Extract metadata freeform
---------------------------
-
-To send an AI request to supported Large Language Models (LLMs) and extract metadata in form of key-value pairs, call static
-[`extractMetadataFreeform(BoxAPIConnection api, String prompt, List items)`][extract-metadata-freeform] method.
-In the request you have to provide a prompt, a list of items that your prompt refers to and an optional agent configuration.
-
-
-```java
-BoxAIResponse response = BoxAI.extractMetadataFreeform(
- api,
- "firstName, lastName, location, yearOfBirth, company",
- Collections.singletonList(new BoxAIItem("123456", BoxAIItem.Type.FILE))
-);
-```
-
-[extract-metadata-freeform]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAI.html#extractMetadataFreeform-com.box.sdk.BoxAPIConnection-java.lang.String-java.util.List-
-
-Extract metadata structured
---------------------------
-
-Sends an AI request to supported Large Language Models (LLMs) and returns extracted metadata as a set of key-value pairs. For this request, you need to use an already defined metadata template or define a schema yourself.
-
-To send an AI request to extract metadata from files with a predefined metadata template, call static
-[`extractMetadataStructured extractMetadataStructured(BoxAPIConnection api, List items, BoxAIExtractMetadataTemplate template)`][extract-metadata-structured-metadata-template] method.
-
-
-```java
-BoxAIExtractMetadataTemplate template = new BoxAIExtractMetadataTemplate("templateKey", "enterprise");
-BoxAIExtractStructuredResponse result = BoxAI.extractMetadataStructured(
- api,
- Collections.singletonList(new BoxAIItem("123456", BoxAIItem.Type.FILE)),
- template
-);
-JsonObject sourceJson = result.getSourceJson();
-```
-
-To send an AI request to extract metadata from files with custom fields, call static
-[`extractMetadataStructured extractMetadataStructured(BoxAPIConnection api, List items, List fields)`][extract-metadata-structured-fields] method.
-
-
-```java
-List fields = new ArrayList<>();
-fields.add(new BoxAIExtractField("firstName"));
-
-BoxAIExtractStructuredResponse result = BoxAI.extractMetadataStructured(
- api,
- Collections.singletonList(new BoxAIItem("123456", BoxAIItem.Type.FILE)),
- fields
-);
-JsonObject sourceJson = result.getSourceJson();
-```
-
-[extract-metadata-structured-metadata-template]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAI.html#extractMetadataStructured-com.box.sdk.BoxAPIConnection-java.util.List-com.box.sdk.ai.metadata.BoxAIExtractMetadataTemplate-
-[extract-metadata-structured-fields]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAI.html#extractMetadataStructured-com.box.sdk.BoxAPIConnection-java.util.List-java.util.List-
\ No newline at end of file
diff --git a/doc/android.md b/doc/android.md
deleted file mode 100644
index d03804c4e..000000000
--- a/doc/android.md
+++ /dev/null
@@ -1,97 +0,0 @@
-# Android
-
-The Java SDK should be compatible with modern Android applications written in both Java and Kotlin.
-
-To use the Java SDK in an android application add it to the project's gradle file in the `dependencies` block.
-
-For Groovy
-
-```groovy
-// build.gradle
-
-dependencies {
- implementation "com.box:box-java-sdk:3.8.0"
-}
-```
-
-For Kotlin
-
-```kotlin
-// build.gradle.kts
-
-dependencies {
- implementation("com.box:box-java-sdk:3.8.0")
-}
-```
-
-## Kotlin
-
-The Java SDK can also be used in Kotlin Android applications through interoperability thanks to the Kotlin design.
-You can read more about Kotlin and Java interoperability [here](https://kotlinlang.org/docs/java-interop.html)
-
-The following example creates an API connection with a developer token:
-
-```kotlin
-val api = BoxAPIConnection("myToken")
-```
-
-The following example shows how to get current user
-
-```kotlin
-val userID = "33333"
-val api = BoxAPIConnection("myToken")
-val user = BoxUser(api, userID)
-val userInfo = user.getInfo()
-```
-
-If you are using an IntelliJ-based IDE, you can copy our samples located in the [docs](/doc/) directory
-and paste them into your file. The IDE should ask you to convert the pasted Java sample to Kotlin. Most samples still work after conversion using this approach.
-
-Note that the current Java SDK does not support Kotlin coroutines. By default, you cannot run network calls on the main thread
-in an Android application. There are various ways to overcome this. For example, if you are in a viewModel context, you can run the SDK method as a
-coroutine using viewModelScope.
-
-```kotlin
-viewModelScope.launch {
- val result = withContext(Dispatchers.IO) {
- /*
- SDK code goes here
- */
- }
- // here you can access the result and load it to the viewModel
-}
-```
-
-The following example shows how to get the current items in the root folder, sorted by name in ascending order with additional
-"created_by" and "name" fields returned from the API. The items are then loaded to the custom data class defined earlier.
-
-```kotlin
-// data class definition used in viewModel
-data class Item(
- val isFolder: Boolean,
- val name: String,
- val createdBy: String
-)
-
-// viewModel init code
-viewModelScope.launch {
- val result = withContext(Dispatchers.IO) {
- val res = BoxFolder(BoxAPIConnection("myToken"), "0")
- val iterator: Iterator =
- res.getChildren("name", BoxFolder.SortDirection.ASC, "created_by", "name")
- .iterator()
- val items = mutableListOf- ()
-
- when (val itemInfo = iterator.next()) {
- is BoxFile.Info -> items.add(Item(false, "File " + itemInfo.name, itemInfo.createdBy.name))
- is BoxFolder.Info -> items.add(Item(true, "Folder " + itemInfo.name, itemInfo.createdBy.name))
- }
- items
- }
-}
-```
-
-If you are familiar with Kotlin syntax, you might have noticed that we could have used the `.map` function (or a similar function) to map the API result to a list of items. Due to current limitations, using `.map` and similar operations on collections is not always possible and may
-lead to unexpected results. The preferred way is to use an explicit iterator to iterate over the collections returned by the SDK.
-
-If you find any problem related to the Java SDK in Kotlin-based app feel free to open an issue.
\ No newline at end of file
diff --git a/doc/authentication.md b/doc/authentication.md
deleted file mode 100644
index a38c72001..000000000
--- a/doc/authentication.md
+++ /dev/null
@@ -1,271 +0,0 @@
-# Authentication
-
-The Box API uses OAuth2 for authentication, which can be difficult to implement.
-The SDK makes it easier by providing classes that handle obtaining tokens and
-automatically refreshing them.
-
-
-
-
-
-- [Ways to Authenticate](#ways-to-authenticate)
- - [Developer Token](#developer-token)
- - [Server Authentication with JWT](#server-authentication-with-jwt)
- - [Standard 3-Legged Oauth 2.0](#standard-3-legged-oauth-20)
- - [Box View Authentication with App Token](#box-view-authentication-with-app-token)
- - [Client Credentials Grant](#client-credentials-grant)
-- [Manual Token Creation](#manual-token-creation)
-- [As User](#as-user)
-- [Token Exchange](#token-exchange)
-- [Revoke Token](#revoke-token)
-
-
-## Ways to Authenticate
-
-### Developer Token
-
-The fastest way to get started using the API is with developer tokens. A
-developer token is simply a short-lived access token that cannot be refreshed
-and can only be used with your own account. Therefore, they're only useful for
-testing an app and aren't suitable for production. You can obtain a developer
-token from your application's [developer
-console](https://cloud.app.box.com/developers/services).
-
-The following example creates an API connection with a developer token:
-
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
-```
-
-### Server Authentication with JWT
-
-
-App Users allows your application to provision and control Box accounts that do not have an associated login
-and can only be accessed through the Content API by the controlling application. An App User is a Box account that
-belongs to your Box Platform application and not an end-user of Box, like a [managed user](https://developer.box.com/v2.0/reference#user-object)
-It is important to emphasize that unlike typical Box accounts, these accounts do not have an associated login and can only be accessed through the Box API.
-
-You may authenticate as the service
-account to provision and manage users, or as an individual app user to make calls as that user. See the
-[API documentation](https://github.com/box/box-node-sdk/blob/main/docs/authentication.md#app-user-authentication)
-for detailed instruction on how to use app auth.
-
-The Java SDK also has a convenient helper function `BoxConfig.readFrom()` to assist in constructing an API connection.
-The `readFrom()` method takes in a stream constructed by the JSON config downloaded from the Developer Console seen
-[here](https://developer.box.com/docs/setting-up-a-jwt-app#section-use-an-application-config-file). Once a `BoxConfig`
-object has been created you can use that to create an API connection.
-
-
-```java
-Reader reader = new FileReader("src/example/config/config.json");
-BoxConfig boxConfig = BoxConfig.readFrom(reader);
-IAccessTokenCache tokenCache = new InMemoryLRUAccessTokenCache(100);
-BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig, tokenCache);
-```
-
-It is also possible to get an API connection for an app user or managed user:
-
-
-```java
-Reader reader = new FileReader("src/example/config/config.json");
-BoxConfig boxConfig = BoxConfig.readFrom(reader);
-
-IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(100);
-BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getUserConnection(userId, boxConfig, accessTokenCache);
-```
-
-However, if you would like to do a manual set up then that is also possible with the below options.
-
-App User example:
-```java
-JWTEncryptionPreferences jwtPreferences = new JWTEncryptionPreferences();
-jwtPreferences.setPublicKeyID("PUBLIC-KEY-ID");
-jwtPreferences.setPrivateKeyPassword("PRIVATE-KEY-PASSWORD");
-jwtPreferences.setPrivateKey("PRIVATE-KEY");
-jwtPreferences.setEncryptionAlgorithm(EncryptionAlgorithm.RSA_SHA_256);
-
-IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(100);
-BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection
- .getUserConnection("USER-ID", "CLIENT-ID","CLIENT-SECRET", jwtPreferences, accessTokenCache);
-
-BoxUser.Info userInfo = BoxUser.getCurrentUser(api).getInfo();
-```
-
-Server authentication allows your application to authenticate itself with the Box API for a given enterprise. A
-[Service Account](https://developer.box.com/v2.0/docs/service-account) always exists for a Box application. It is important to
-note that a Service Account is separate from the Box accounts of the applicaton developer and the enterprise admin of any enterprise that has
-authorized the app, meaning files stored in that account are not accessible in any other account by default.
-
-Service Account example:
-
-
-```java
-JWTEncryptionPreferences jwtPreferences = new JWTEncryptionPreferences();
-jwtPreferences.setPublicKeyID("PUBLIC-KEY-ID");
-jwtPreferences.setPrivateKeyPassword("PRIVATE-KEY-PASSWORD");
-jwtPreferences.setPrivateKey("PRIVATE-KEY");
-jwtPreferences.setEncryptionAlgorithm(EncryptionAlgorithm.RSA_SHA_256);
-
-BoxConfig boxConfig = new BoxConfig("YOUR-CLIENT-ID", "YOUR-CLIENT-SECRET", "ENTERPRISE-ID", jwtPreferences);
-IAccessTokenCache tokenCache = new InMemoryLRUAccessTokenCache(10);
-
-BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig, tokenCache);
-```
-
-### Standard 3-Legged Oauth 2.0
-
-Using an auth code is the most common way of authenticating with the Box API.
-Your application must provide a way for the user to login to Box (usually with a
-browser or web view) in order to obtain an auth code.
-
-After a user logs in and grants your application access to their Box account,
-they will be redirected to your application's `redirect_uri` which will contain
-an auth code. This auth code can then be used along with your client ID and
-client secret to establish an API connection.
-
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-CLIENT-ID",
- "YOUR-CLIENT-SECRET", "YOUR-AUTH-CODE");
-```
-
-### Box View Authentication with App Token
-
-Allows applications that do not own content stored in Box (e.g. app-owned content) to be able to use Box as a service
-provider rather than a content store. This is currently mostly used for previewing items. For scopes you can choose
-between "item_preview", "item_upload", or "item_delete". See the
-[Getting Started with the New Box View](https://developer.box.com/docs/getting-started-with-new-box-view) for detailed
-instruction.
-
-
-```java
-BoxTransactionalAPIConnection api = new BoxTransactionalAPIConnection("YOUR-ACCESS-TOKEN");
-```
-
-You can also request a specific scope of the transaction token by passing in: "item_preview", "item_upload", or "item_delete".
-
-```java
-BoxAPIConnection api = BoxTransactionalAPIConnection.getTransactionConnection("YOUR-ACCESS-TOKEN", "item_preview");
-```
-
-Lastly, you can choose to specify a resource to generate a token for with. If you're passing a token down to your client
-this is a great way to restrict access on that token in turn locking down what the token has access to.
-
-```java
-BoxAPIConnection api = BoxTransactionalAPIConnection.getTransactionConnection("YOUR-ACCESS-TOKEN", "item_preview",
-"https://api.box.com/2.0/files/YOUR-FILE-ID");
-```
-
-### Client Credentials Grant
-Allows you to obtain an access token by having client credentials and secret with enterprise or user ID,
-which allows you to work using service or user account.
-
-The `BoxCCGAPIConnection` works the same way as the `BoxAPIConnection` so for example to get root folder you can do:
-
-```java
-BoxCCGAPIConnection api = BoxCCGAPIConnection.userConnection(
- "client_id",
- "client_secret",
- "user_id"
-);
-BoxFolder root = BoxFolder.getRootFolder(api);
-```
-
-Obtained token is valid for specified ammount of time and it will be refreshed automatically by default.
-
-#### Obtaining Service Account token
-
-The [Service Account](https://developer.box.com/guides/getting-started/user-types/service-account//) is separate from the Box accounts of the application developer and the
-enterprise admin of any enterprise that has authorized the app — files stored in that account
-are not accessible in any other account by default, and vice versa.
-To obtain service account you will have to provide enterprise ID with client id and secret:
-
-
-```java
-BoxCCGAPIConnection api = BoxCCGAPIConnection.applicationServiceAccountConnection(
- "client_id",
- "client_secret",
- "enterprise_id"
-);
-```
-
-#### Obtaining User token
-
-To obtain user account you will have to provide user ID with client id and secret
-
-```java
-BoxCCGAPIConnection api = BoxCCGAPIConnection.userConnection(
- "client_id",
- "client_secret",
- "user_id"
-);
-```
-In order to enable generating user token you have to go to your application configuration that can be found [here](https://app.box.com/developers/console).
-In`Configuration` tab, in section `Advanced Features` select `Generate user access tokens`.
-Do not forget to re-authorize application if it was already authorized.
-
-## Manual Token Creation
-
-In certain advanced scenarios, you may want to obtain an access and refresh
-token yourself through manual calls to the API. In this case, you can create an
-API connection with the tokens directly.
-
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-CLIENT-ID",
- "YOUR-CLIENT-SECRET", "YOUR-ACCESS-TOKEN", "YOUR-REFRESH-TOKEN");
-```
-
-## As User
-
-The purpose of as user is to be used by enterprise administrators to make API calls on behalf of their managed users.
-This can also be used by a Service Account to make API calls for managed users or app users. This is only meant to be used
-for `BoxAPIConnection`s and not `BoxDeveloperEditionAPIConnection`s.
-
-In order to invoke as user calls you can use
-
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-ACCESS-TOKEN");
-api.asUser("USER-ID");
-```
-
-Once you are done making calls on behalf of a managed user or app user you can switch back to the admin or service account with
-
-
-```java
-api.asSelf();
-```
-
-## Token Exchange
-
-You can exchange a API connection's access token for one with a lower scope, in order to restrict the permissions
-or to pass to a less secure location (e.g. a browser-based app). This is useful if you want to use the
-[Box UI Kits](https://developer.box.com/docs/box-ui-elements), since they generally do not need full read/write
-permissions to run.
-
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-ACCESS-TOKEN");
-
-String resource = "https://api.box.com/2.0/files/RESOURCE-ID";
-List scopes = new ArrayList();
-scopes.add("item_preview");
-scopes.add("item_content_upload");
-
-ScopedToken token = api.getLowerScopedToken(scopes, resource);
-```
-
-The above example will downscope an access token to only allow for previewing an item and uploading an item.
-
-Revoke Token
-------------
-
-At any point if you wish to revoke your tokens you can do so by calling the following.
-
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-ACCESS-TOKEN");
-api.revokeToken();
-```
diff --git a/doc/classifications.md b/doc/classifications.md
deleted file mode 100644
index f468bd807..000000000
--- a/doc/classifications.md
+++ /dev/null
@@ -1,226 +0,0 @@
-Classifications
-===============
-
-Classfications are a type of metadata that allows users and applications
-to define and assign a content classification to files and folders.
-
-Classifications use the metadata APIs to add and remove classifications, and
-assign them to files. For more details on metadata templates please see the
-[metadata documentation](./metadata.md).
-
-
-
-
-- [Classifications](#classifications)
- - [Add initial classifications](#add-initial-classifications)
- - [List all classifications](#list-all-classifications)
- - [Add another classification](#add-another-classification)
- - [Update a classification](#update-a-classification)
- - [Delete a classification](#delete-a-classification)
- - [Delete all classifications](#delete-all-classifications)
- - [Add classification to file](#add-classification-to-file)
- - [Update classification on file](#update-classification-on-file)
- - [Get classification on file](#get-classification-on-file)
- - [Remove classification from file](#remove-classification-from-file)
- - [Add classification to folder](#add-classification-to-folder)
- - [Update classification on folder](#update-classification-on-folder)
- - [Get classification on folder](#get-classification-on-folder)
- - [Remove classification from folder](#remove-classification-from-folder)
-
-
-
-Add initial classifications
----------------------------
-
-If an enterprise does not already have a classification defined, the first classification(s)
-can be added with the [`createMetadataTemplate`][create-metadata-template] method.
-
-
-```java
-MetadataTemplate.Field classification = new MetadataTemplate.Field();
-classification.setType("enum");
-classification.setKey(Metadata.CLASSIFICATION_KEY);
-classification.setDisplayName("Classification");
-classification.setHidden("false");
-
-List options = new ArrayList();
-options.add("Top Secret");
-classification.setOptions(topSecret)
-
-List fields = new ArrayList();
-fields.add(classification);
-
-MetadataTemplate template = MetadataTemplate.createMetadataTemplate(api, Metadata.ENTERPRISE_METADATA_SCOPE, Metadata.CLASSIFICATION_TEMPLATE_KEY, "Classification", false, fields);
-```
-
-[create-metadata-template]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#createMetadataTemplate-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-java.lang.String-boolean-java.util.List-
-
-
-List all classifications
-------------------------
-
-To retrieve a list of all the classifications in an enterprise call the
-[`getMetadataTemplate`][get-metadata-template]
-method to get the classifciations template, which will contain a list of all the
-classifications
-
-
-```java
-MetadataTemplate template = MetadataTemplate.getMetadataTemplate(api, Metadata.CLASSIFICATION_TEMPLATE_KEY);
-```
-
-[get-metadata-template]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#getMetadataTemplate-com.box.sdk.BoxAPIConnection-
-
-Add another classification
---------------------------
-
-To add another classification, call the [`updateMetadataTemplate`][update-metadata-template]
-method with the an operation to add a new classification to the template.
-
-
-```java
-List updates = new ArrayList();
-
-String update = "{\n op: \"addEnumOption\",\n fieldKey: \"Box__Security__Classification__Key\",\n data: {\n key: \"Sensitive\"\n }\n}";
-
-updates.add(new MetadataTemplate.FieldOperation(addCategoryFieldJSON));
-
-MetadataTemplate.updateMetadataTemplate(api, Metadata.ENTERPRISE_METADATA_SCOPE, Metadata.CLASSIFICATION_TEMPLATE_KEY, updates);
-```
-
-[update-metadata-template]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#updateMetadataTemplate-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-java.util.List-
-
-
-Update a classification
------------------------
-
-To update an existing classification, call the
-[`updateMetadataTemplate`][update-metadata-template]
-method with the an operation to update the existing classification already present on the template.
-
-
-```java
-List updates = new ArrayList();
-
-String update = "{\n op: \"editEnumOption\",\n fieldKey: \"Box__Security__Classification__Key\",\n enumOptionKey: \"Sensitive\",\n data: {\n key: \"Very Sensitive\"\n }\n}";
-
-updates.add(new MetadataTemplate.FieldOperation(addCategoryFieldJSON));
-
-MetadataTemplate.updateMetadataTemplate(api, Metadata.ENTERPRISE_METADATA_SCOPE, Metadata.CLASSIFICATION_TEMPLATE_KEY, updates);
-```
-
-Add classification to file
---------------------------
-
-To add a classification to a file, call [`setMetadata(String templateKey, String templateScope, Metadata properties)`][set-metadata]
-with the name of the classification template, as well as the details of the classification
-to add to the file.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Metadata metadata = new Metadata()
-metadata.add(Metadata.CLASSIFICATION_KEY, "Sensitive")
-file.setMetadata(Metadata.CLASSIFICATION_TEMPLATE_KEY, Metadata.ENTERPRISE_METADATA_SCOPE, metadata);
-```
-
-[set-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#setMetadata-java.lang.String-java.lang.String-com.box.sdk.Metadata-
-
-Update classification on file
------------------------------
-
-To update a classification on a file, call
-[`setMetadata(String templateKey, String templateScope, Metadata properties)`][set-metadata]
-with the name of the classification template, as well as the details of the classification
-to add to the file.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Metadata metadata = new Metadata()
-metadata.add(Metadata.CLASSIFICATION_KEY, "Sensitive")
-file.setMetadata(Metadata.CLASSIFICATION_TEMPLATE_KEY, Metadata.ENTERPRISE_METADATA_SCOPE, metadata);
-```
-
-Get classification on file
---------------------------
-
-Retrieve the classification on a file by calling
-[`getMetadata(String templateKey)`](http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getMetadata-java.lang.String-)
-with the ID of the file.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Metadata metadata = file.getMetadata(Metadata.CLASSIFICATION_TEMPLATE_KEY);
-```
-
-Remove classification from file
--------------------------------
-
-A classification can be removed from a file by calling
-[`deleteMetadata`](http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#deleteMetadata--).
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.deleteMetadata(Metadata.CLASSIFICATION_TEMPLATE_KEY);
-```
-
-Add classification to folder
-----------------------------
-
-To add a classification to a folder, call [`setMetadata(String templateKey, String templateScope, Metadata properties)`][set-metadata]
-with the name of the classification template, as well as the details of the classification
-to add to the folder.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-Metadata metadata = new Metadata()
-metadata.add(Metadata.CLASSIFICATION_KEY, "Sensitive")
-folder.setMetadata(Metadata.CLASSIFICATION_TEMPLATE_KEY, Metadata.ENTERPRISE_METADATA_SCOPE, metadata);
-```
-
-[set-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#setMetadata-java.lang.String-java.lang.String-com.box.sdk.Metadata-
-
-Update classification on folder
--------------------------------
-
-To update a classification on a folder, call
-[`setMetadata(String templateKey, String templateScope, Metadata properties)`][set-metadata]
-with the name of the classification template, as well as the details of the classification
-to add to the folder.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-Metadata metadata = new Metadata()
-metadata.add(Metadata.CLASSIFICATION_KEY, "Sensitive")
-folder.setMetadata(Metadata.CLASSIFICATION_TEMPLATE_KEY, Metadata.ENTERPRISE_METADATA_SCOPE, metadata);
-```
-
-Get classification on folder
-----------------------------
-
-Retrieve the classification on a folder by calling
-[`getMetadata(String templateKey)`](http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getMetadata-java.lang.String-)
-with the ID of the folder.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-Metadata metadata = folder.getMetadata(Metadata.CLASSIFICATION_TEMPLATE_KEY);
-```
-
-Remove classification from folder
----------------------------------
-
-A classification can be removed from a folder by calling
-[`deleteMetadata`](http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#deleteMetadata--).
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-folder.deleteMetadata(Metadata.CLASSIFICATION_TEMPLATE_KEY);
-```
\ No newline at end of file
diff --git a/doc/collaboration_allowlists.md b/doc/collaboration_allowlists.md
deleted file mode 100644
index 0b464a528..000000000
--- a/doc/collaboration_allowlists.md
+++ /dev/null
@@ -1,147 +0,0 @@
-Collaboration Allowlists
-========================
-
-Collaboration Allowlists are used to manage a set of approved domains or Box users that an enterprise
-can collaborate with.
-
-
-
-
-
-- [Add a Collaboration Allowlist For a Domain](#add-a-collaboration-allowlist-for-a-domain)
-- [Get a Collaboration Allowlist's Information for a Domain](#get-a-collaboration-allowlists-information-for-a-domain)
-- [Get all Collaboration Allowlist's Information for Domain](#get-all-collaboration-allowlists-information-for-domain)
-- [Remove a Collaboration Allowlist for a Domain](#remove-a-collaboration-allowlist-for-a-domain)
-- [Add a Collaboration Allowlist for a User](#add-a-collaboration-allowlist-for-a-user)
-- [Get a Collaboration Allowlist's Information for a User](#get-a-collaboration-allowlists-information-for-a-user)
-- [Get all Collaboration Allowlist's Information for a User](#get-all-collaboration-allowlists-information-for-a-user)
-- [Remove a Collaboration Allowlist for a User](#remove-a-collaboration-allowlist-for-a-user)
-
-
-
-Add a Collaboration Allowlist For a Domain
-------------------------------------------
-
-A collaboration allowlist can be created for a domain with
-[`create(BoxAPIConnection api, String domain, AllowlistDirection direction)`][allowlist1].
-The `AllowlistDirection` parameter determines which way the allowlisting
-applies. You can set the value to inbound, outbound, or both.
-
-
-```java
-BoxCollaborationAllowlist.create(api, "test.com", BoxCollaborationAllowlist.AllowlistDirection.BOTH);
-```
-
-[allowlist1]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlist.html#create-com.box.sdk.BoxAPIConnection-java.lang.String-com.box.sdk.BoxCollaborationAllowlist.AllowlistDirection-
-
-Get a Collaboration Allowlist's Information for a Domain
---------------------------------------------------------
-
-A specific collaboration allowlist for a domain can be retrieved with
-[`getInfo()`][getAllowlistInfo]
-
-
-```java
-BoxCollaborationAllowlist domainAllowlist = new BoxCollaborationAllowlist(api, "id");
-domainAllowlist.getInfo();
-```
-
-[getAllowlistInfo]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlist.html#getInfo--
-
-Get all Collaboration Allowlist's Information for Domain
---------------------------------------------------------
-
-All domain collaboration allowlists associated with an enterprise can be
-retrieved with [`getAll(BoxAPIConnection api)`][getAllAllowlists1]
-
-
-```java
-BoxCollaborationAllowlist.getAll(api);
-```
-
-To specify the number of allowlists to retrieve you can pass a limit on how
-many allowlists to return to [`getAll(BoxAPIConnection api, int limit)`][getAllAllowlists2].
-
-```java
-BoxCollaborationAllowlist.getAll(api, 10);
-```
-
-[getAllAllowlists1]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlist.html#getAll-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[getAllAllowlists2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlist.html#getAll-com.box.sdk.BoxAPIConnection-int-java.lang.String...-
-
-Remove a Collaboration Allowlist for a Domain
----------------------------------------------
-
-To remove a collaboration allowlist you can call [`delete()`][deleteAllowlist]
-
-
-```java
-BoxCollaborationAllowlist domainToBeDeleted = new BoxCollaborationAllowlist(api, "allowlist-id");
-domainToBeDeleted.delete();
-```
-
-[deleteAllowlist]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlist.html#delete--
-
-Add a Collaboration Allowlist for a User
-----------------------------------------
-
-A collaboration allowlist can be created for a user with
-[`create(BoxAPIConnection api, String userID)`][createExempt]
-
-
-```java
-String userID = "12345";
-BoxCollaborationAllowlistExemptTarget.create(api, userID);
-```
-
-[createExempt]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlistExemptTarget.html#create-com.box.sdk.BoxAPIConnection-java.lang.String-
-
-Get a Collaboration Allowlist's Information for a User
-------------------------------------------------------
-
-To retrieve information regarding a specific user collaboration allowlist use
-[`getInfo()`][getInfoExempt]
-
-
-```java
-BoxCollaborationAllowlistExemptTarget userAllowlist = new BoxCollaborationAllowlistExemptTarget(api, "allowlistID");
-userAllowlist.getInfo();
-```
-
-[getInfoExempt]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlistExemptTarget.html#getInfo--
-
-Get all Collaboration Allowlist's Information for a User
---------------------------------------------------------
-
-To retrieve information regarding all user allowlists associated with an enterprise use
-[`getAll(BoxAPIConnection api)`][getAllExempt1]
-
-
-```java
-BoxCollaborationAllowlistExemptTarget.getAll(api);
-```
-
-Alternatively you can specify the number of user allowlists to return with one
-request by passing a the maximum number of records to return to
-[`getAll(BoxApiConnection api, int limit)`][getAllExempt2]
-
-```java
-BoxCollaborationAllowlistExemptTarget.getAll(api, 5);
-```
-
-[getAllExempt1]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlistExemptTarget.html#getAll-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[getAllExempt2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlistExemptTarget.html#getAll-com.box.sdk.BoxAPIConnection-int-java.lang.String...-
-
-Remove a Collaboration Allowlist for a User
--------------------------------------------
-
-To remove a user collaboration allowlist entry from an enterprise use
-[`delete()`][deleteExempt]
-
-
-```java
-BoxCollaborationAllowlistExemptTarget userAllowlist = new BoxCollaborationAllowlistExemptTarget(api, "allowlist_id");
-userAllowlist.delete();
-```
-
-[deleteExempt]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaborationAllowlistExemptTarget.html#delete--
diff --git a/doc/collaborations.md b/doc/collaborations.md
deleted file mode 100644
index 296e0bf65..000000000
--- a/doc/collaborations.md
+++ /dev/null
@@ -1,168 +0,0 @@
-Collaborations
-==============
-
-Collaborations are used to share folders between users or groups. They also
-define what permissions a user has for a folder.
-
-
-
-
-
-- [Add a Collaboration](#add-a-collaboration)
-- [Edit a Collaboration](#edit-a-collaboration)
-- [Remove a Collaboration](#remove-a-collaboration)
-- [Get a Collaboration's Information](#get-a-collaborations-information)
-- [Get the Collaborations on a Folder](#get-the-collaborations-on-a-folder)
-- [Get the Collaborations on a File](#get-the-collaborations-on-a-file)
-- [Get Pending Collaborations](#get-pending-collaborations)
-- [Accept or Decline a Pending Collaboration](#accept-or-decline-a-pending-collaboration)
-
-
-
-Add a Collaboration
--------------------
-
-A collaboration can be added for an existing user or group with
-[`collaborate(BoxCollaborator collaborator, BoxCollaboration.Role role)`][collaborate1]. The
-`role` parameter determines what permissions the collaborator will have on the
-folder.
-
-
-```java
-BoxCollaborator user = new BoxUser(api, "user-id")
-BoxFolder folder = new BoxFolder(api, "folder-id");
-folder.collaborate(user, BoxCollaboration.Role.EDITOR);
-```
-
-You can also add a collaboration by providing an email address with
-[`collaborate(String emailAddress, BoxCollaboration.Role role)`][collaborate2].
-If the recipient doesn't have a Box account, they will be asked create one.
-
-```java
-BoxFolder folder = new BoxFile(api, "id");
-folder.collaborate("gcurtis@box.com", BoxCollaboration.Role.EDITOR);
-```
-
-If you need to create a collaboration with a group, provide a group id.
-
-
-```java
-BoxCollaborator group = new BoxGroup(api, "group-id");
-BoxFolder folder = new BoxFolder(api, "folder-id");
-folder.collaborate(group, BoxCollaboration.Role.EDITOR);
-```
-
-[collaborate1]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#collaborate-com.box.sdk.BoxCollaborator-com.box.sdk.BoxCollaboration.Role-
-[collaborate2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#collaborate-java.lang.String-com.box.sdk.BoxCollaboration.Role-
-
-Edit a Collaboration
---------------------
-
-A collaboration can be edited by creating a new
-[`BoxCollaboration.Info`][box-collaboration-info] object or updating an existing
-one, and then passing it to [`updateInfo(BoxCollaboration.Info fieldsToUpdate)`][update-info]
-
-
-```java
-BoxCollaboration collaboration = new BoxCollaboration(api, "id");
-BoxCollaboration.Info info = collaboration.new Info();
-info.setStatus(BoxCollaboration.Status.ACCEPTED);
-collaboration.updateInfo(info);
-```
-
-[box-collaboration-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaboration.Info.html
-[update-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaboration.html#updateInfo-com.box.sdk.BoxCollaboration.Info-
-
-Remove a Collaboration
-----------------------
-
-A collaboration can be removed by calling [`delete()`][delete].
-
-
-```java
-BoxCollaboration collaboration = new BoxCollaboration(api, "id");
-collaboration.delete();
-```
-
-[delete]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaboration.html#delete--
-
-Get a Collaboration's Information
----------------------------------
-
-Calling [`getInfo()`][get-info-fields] on a collaboration returns a snapshot of the
-collaboration's info.
-
-
-```java
-BoxCollaboration collaboration = new BoxCollaboration(api, "id");
-BoxCollaboration.Info info = collaboration.getInfo();
-```
-
-You can also choose to retrieve only specific fields of the collaboration by calling
-[`getInfo(String... fields)`][get-info-fields] with a list of field names.
-
-```java
-BoxCollaboration collaboration = new BoxCollaboration(api, "id");
-BoxCollaboration.Info info = collaboration.getInfo(BoxCollaboration.ALL_FIELDS);
-```
-
-[get-info-fields]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaboration.html#getInfo-java.lang.String...-
-
-Get the Collaborations on a Folder
-----------------------------------
-
-You can get all of the collaborations on a folder by calling
-[`getCollaborations()`][get-collaborations] on the folder.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-Collection collaborations = folder.getCollaborations();
-```
-
-[get-collaborations]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getCollaborations--
-
-Get the Collaborations on a File
---------------------------------
-
-You can get an iterator over all of the collaborations on a file by calling
-[`BoxFile#getAllFileCollaborations(String... fields)`][get-collaborations-file]
-on the file.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Iterable collaborations = file.getAllFileCollaborations();
-```
-
-[get-collaborations-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getAllFileCollaborations-java.lang.String...-
-
-Get Pending Collaborations
---------------------------
-
-A collection of all the user's pending collaborations can be retrieved with
-[`getPendingCollaborations(BoxAPIConnection api)`][get-pending-collaborations].
-
-
-```java
-Collection pendingCollaborations =
- BoxCollaboration.getPendingCollaborations(api);
-```
-
-[get-pending-collaborations]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollaboration.html#getPendingCollaborations-com.box.sdk.BoxAPIConnection-
-
-Accept or Decline a Pending Collaboration
------------------------------------------
-
-To accept or decline a pending collaboration, update the info of the pending collaboration object
-with the desired status.
-
-
-```java
-// Accept all pending collaborations
-Collection pendingCollaborations = BoxCollaboration.getPendingCollaborations(api);
-for (BoxCollaboration.Info collabInfo : pendingCollaborations) {
- collabInfo.setStatus(BoxCollaboration.Status.ACCEPTED);
- collabInfo.getResource().updateInfo(collabInfo);
-}
-```
diff --git a/doc/collections.md b/doc/collections.md
deleted file mode 100644
index 3e5304bf4..000000000
--- a/doc/collections.md
+++ /dev/null
@@ -1,104 +0,0 @@
-Collections
-===========
-
-Collections contain information about the items contained inside of them,
-including files and folders. The only collection available currently is a
-“Favorites” collection. The contents of the collection are discovered in a
-similar way in which the contents of a folder are discovered.
-
-
-
-
-
-- [Get Collections](#get-collections)
-- [Get a Collection's Items](#get-a-collections-items)
-- [Add Items to a Collection](#add-items-to-a-collection)
-- [Remove Items from a Collection](#remove-items-from-a-collection)
-
-
-
-Get Collections
----------------
-
-Existing collections can be retrieved by calling the
-[`getAllCollections(BoxAPIConnection)`][get-collections] method. Currently only
-"Favorites" collection is supported.
-
-
-```java
-Iterable collections = BoxCollection.getAllCollections(api);
-for (BoxCollection.Info collectionInfo : collections) {
- // Do something with the collection.
-}
-```
-
-[get-collections]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxCollection.html#getAllCollections-com.box.sdk.BoxAPIConnection-
-
-Get a Collection's Items
-------------------------
-
-Every `BoxCollection` implements [`Iterable`][iterator] which allows
-you to iterate over the collection's contents. The iterator automatically
-handles paging and will make additional network calls to load more data from Box
-when necessary.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-for (BoxItem.Info itemInfo : folder) {
- if (itemInfo instanceof BoxFile.Info) {
- BoxFile.Info fileInfo = (BoxFile.Info) itemInfo;
- // Do something with the file.
- } else if (itemInfo instanceof BoxFolder.Info) {
- BoxFolder.Info folderInfo = (BoxFolder.Info) itemInfo;
- // Do something with the folder.
- }
-}
-```
-
-[iterator]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxCollection.html#iterator--
-
-Add Items to a Collection
--------------------------
-
-Add an item to a collection by calling
-[`setCollections(BoxCollection... collections)`][set-collections] on any `BoxItem`. Note that this
-method will overwrite all collections that the item belongs to.
-
-
-```java
-BoxCollection favorites = null;
-for (BoxCollection.Info info : BoxCollection.getAllCollections(api)) {
- if (info.getCollectionType().equals("favorites")) {
- favorites = info.getResource();
- break;
- }
-}
-BoxFile file = new BoxFile(api, "id");
-file.setCollections(favorites);
-```
-
-Remove Items from a Collection
-------------------------------
-
-Remove an item from a collection by calling
-[`setCollections(BoxCollection... collections)`][set-collections] on any `BoxItem` and exclude the
-collection to wish to remove it from.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-BoxFile.Info info = file.getInfo("collections");
-
-ArrayList collections = new ArrayList();
-for (BoxCollection.Info info : info.getCollections(api)) {
- // Include every existing collection except for favorites to remove the file
- // from the favorites collection.
- if (!info.getCollectionType().equals("favorites")) {
- collections.add(info.getResource());
- }
-}
-file.setCollections(collections.toArray());
-```
-
-[set-collections]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.html#setCollections-com.box.sdk.BoxCollection...-
diff --git a/doc/comments.md b/doc/comments.md
deleted file mode 100644
index 6681330fd..000000000
--- a/doc/comments.md
+++ /dev/null
@@ -1,125 +0,0 @@
-Comments
-========
-
-Comment objects represent a user-created comment on a file. They can be added
-directly to a file or they can be a reply to another comment.
-
-
-
-
-
-- [Get a Comment's Information](#get-a-comments-information)
-- [Get the Comments on a File](#get-the-comments-on-a-file)
-- [Add a Comment to a File](#add-a-comment-to-a-file)
-- [Reply to a Comment](#reply-to-a-comment)
-- [Change a Comment's Message](#change-a-comments-message)
-- [Delete a Comment](#delete-a-comment)
-
-
-
-Get a Comment's Information
----------------------------
-
-Calling [`getInfo()`][get-info] on a comment returns a snapshot of the comment's
-info.
-
-
-```java
-BoxComment comment = new BoxComment(api, "id");
-BoxComment.Info info = comment.getInfo();
-```
-
-[get-info]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxComment.html#getInfo--
-
-Get the Comments on a File
---------------------------
-
-You can get all of the comments on a file by calling the
-[`getComments()`][get-comments] method.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-List comments = file.getComments();
-```
-
-[get-comments]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getComments--
-
-Add a Comment to a File
------------------------
-
-A comment can be added to a file with the [`addComment(String message)`][add-comment]
-method.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.addComment("This file is pretty cool.");
-```
-
-The comment's message can also contain @mentions by using the string
-@[userid:username] anywhere within the message, where userid and username are
-the ID and username of the person being mentioned. [See the documentation]
-(https://developers.box.com/docs/#comments-comment-object) on the
-`tagged_message` field for more information on @mentions.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.addComment("Message mentioning @[1234:user@box.com].");
-```
-
-[add-comment]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#addComment-java.lang.String-
-
-Reply to a Comment
-------------------
-
-You can reply to a comment with the [`reply(String message)`][reply] method.
-
-
-```java
-BoxComment comment = new BoxComment(api, "id");
-comment.reply("I agree with this!");
-```
-
-
-The comment's message can also contain @mentions by using the string
-@[userid:username] anywhere within the message, where userid and username are
-the ID and username of the person being mentioned. [See the documentation]
-(https://developers.box.com/docs/#comments-comment-object) on the
-`tagged_message` field for more information on @mentions.
-
-
-```java
-BoxComment comment = new BoxComment(api, "id");
-comment.reply("@[1234:user@box.com] I agree with this!");
-```
-
-[reply]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxComment.html#reply-java.lang.String-
-
-Change a Comment's Message
---------------------------
-
-The message of a comment can be changed with the
-[`changeMessage(String message)`][change-message] method.
-
-
-```java
-BoxComment comment = new BoxComment(api, "id");
-comment.changeMessage("An edited message.");
-```
-
-[change-message]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxComment.html#changeMessage-java.lang.String-
-
-Delete a Comment
-----------------
-
-A comment can be deleted with the [`delete()`][delete] method.
-
-
-```java
-BoxComment comment = new BoxComment(api, "id");
-comment.delete();
-```
-
-[delete]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxComment.html#delete--
diff --git a/doc/configuration.md b/doc/configuration.md
deleted file mode 100644
index 030b9d171..000000000
--- a/doc/configuration.md
+++ /dev/null
@@ -1,329 +0,0 @@
-# Configuration
-
-- [Proxy configuration](#proxy-configuration)
- - [Custom proxy authenticator](#custom-proxy-authenticator)
- - [Example: NTLM authenticator](#example-ntlm-authenticator)
-- [Configure retries of calls and timeouts](#configure-retries-of-calls-and-timeouts)
- - [Maximum retries](#maximum-retries)
- - [Connection timeout](#connection-timeout)
- - [Read timeout](#read-timeout)
-- [URLs configuration](#urls-configuration)
- - [Base URL](#base-url)
- - [Base Upload URL](#base-upload-url)
- - [Base App URL](#base-app-url)
- - [Token URL](#token-url-deprecated)
- - [Revoke URL](#revoke-url-deprecated)
-- [SSL configuration](#ssl-configuration)
-- [Instrumenation of OpenTelemetry](#instrumenation-of-opentelemetry)
-
-# Proxy configuration
-
-To set up proxy
-use [BoxApiConnection.setProxy](https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#setProxy-java.net.Proxy-)
-to set proxy address
-and [BoxApiConnection.setProxyBasicAuthentication][set-basic-proxy-auth]
-to set username and password required by proxy:
-
-```java
-BoxAPIConnection api=new BoxAPIConnection("access_token");
-Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress("proxy_url",8888));
-// You can use any subclass of BoxAPIConnection
-api.setProxy(proxy);
-api.setProxyBasicAuthentication("proxyUsername", "proxyPassword");
-```
-Proxy username and password will be used only if provided `SocketAddress` is an instance of
-`InetSocketAddress`. If you would like to use a custom `SocketAddress` you can provide your own
-`okhttp3.Authenticator` using [BoxApiConnection.setProxyAuthenticator(Authenticator)][set-proxy-authenticator]
-
-
-## Custom proxy authenticator
-By using [BoxApiConnection.setProxyBasicAuthentication][set-basic-proxy-auth] you can enable default
-proxy authenticator that handles only Basic authentication. But you can provide your own authenticator by using
-[BoxApiConnection.setProxyAuthenticator(Authenticator)][set-proxy-authenticator].
-
-To do that you will need to add a dependency to your project:
-```
-"com.squareup.okhttp3:okhttp:XXX"
-```
-Please match the version with what SDK is using by checking `build.gradle`
-and looking for entry `implementation "com.squareup.okhttp3:okhttp:"`.
-
-Now you can add an authenticator. by calling
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("access_token");
-Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress("proxy_url",8888));
-api.setProxy(proxy);
-api.setProxyAuthenticator((route, response) -> response
- .request()
- .newBuilder()
- .addHeader("Proxy-Authorization", "My custom authenticator")
- .build()
-);
-```
-
-### Example: NTLM authenticator
-
-For example, you can add NTLM authorization. This is example NTLM authenticator that
-is using parts from Apache Http Client 5.
-
-```java
-import okhttp3.Authenticator;
-import okhttp3.Request;
-import okhttp3.Response;
-import okhttp3.Route;
-import org.apache.hc.client5.http.impl.auth.NTLMEngineException;
-
-public class NTLMAuthenticator implements Authenticator {
- final NTLMEngineImpl engine = new NTLMEngineImpl();
- private final String domain;
- private final String username;
- private final String password;
- private final String ntlmMsg1;
-
- public NTLMAuthenticator(String username, String password, String domain) {
- this.domain = domain;
- this.username = username;
- this.password = password;
- String localNtlmMsg1 = null;
- try {
- localNtlmMsg1 = engine.generateType1Msg(null, null);
- } catch (Exception e) {
- e.printStackTrace();
- }
- ntlmMsg1 = localNtlmMsg1;
- }
-
- @Override
- public Request authenticate(Route route, Response response) {
- if(response.code() == 407 && "Proxy authorization required".equals(response.message())) {
- String ntlmChallenge = response.headers("Proxy-Authenticate")
- .stream()
- .filter(h -> h.startsWith("NTLM "))
- .findFirst().orElse("");
- if(ntlmChallenge.length() > 5) {
- try {
- String ntlmMsg3 = engine.generateType3Msg(username, password.toCharArray(), domain, "ok-http-example-ntlm", ntlmChallenge.substring(5));
- return response.request().newBuilder().header("proxy-Authorization", "NTLM " + ntlmMsg3).build();
- } catch (NTLMEngineException e) {
- throw new RuntimeException(e);
- }
- }
- return response.request().newBuilder().header("proxy-Authorization", "NTLM " + ntlmMsg1).build();
- }
- return response.request();
- }
-}
-```
-
-The `NTLMEngineImpl` could be created by using Apache implementation that can be found
-[here](https://github.com/apache/httpcomponents-client/blob/master/httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/NTLMEngineImpl.java).
-You can add a dependency to `org.apache.httpcomponents.client5:httpclient5:5.1.3`.
-Copy the `NTLMEngineImpl` class and add it to your source.
-
-Now you can use custom NTML Authenticator in your `BoxAPIConnection`:
-```java
-BoxAPIConnection api = new BoxAPIConnection("access_token");
-Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress("proxy_url",8888));
-api.setProxy(proxy);
-api.setProxyAuthenticator(new NTLMAuthenticator("some proxy username", "some proxy password", "proxy workgroup"));
-```
-
-[set-basic-proxy-auth]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#setProxyBasicAuthentication-java.lang.String-java.lang.String-
-[set-proxy-authenticator]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#setProxyAuthenticator-okhttp3.Authenticator-
-
-# Configure retries of calls and timeouts
-SDK can retry failed calls when:
- - failed writting request body
- - when recieved HTTP response code:
- - 429 - rate limit exceeded
- - 5XX - internal server error
- - 400 error with error that `exp` claim has expired. This usially means there is a clock skew.
-
-SDK is using exponnetial strategy to calculate time between retries.
- If response contains `Retry-After` header its value will be used as a wait time between calls.
-You can check details in `com.box.sdk.BoxAPIRequest.send(com.box.sdk.ProgressListener)` method.
-
-## Maximum retries
-
-To configure how many times API will retry calls
-use [BoxApiConnection.setMaxRetryAttempts](https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#setMaxRetryAttempts-int-):
-
-```java
-// You can use any subclass of BoxAPIConnection
-api.setMaxRetryAttempts(10);
-```
-
-default value for retry attempts is `5`.
-
-## Connection timeout
-
-To set up how log (in milliseconds) API waits to establish connection
-use [BoxApiConnection.setConnectTimeout](https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#setConnectTimeout-int-):
-
-```java
-// You can use any subclass of BoxAPIConnection
-int connectionTimeout = 100; // timeout in milliseconds
-api.setConnectTimeout(connectionTimeout);
-```
-
-default value is `0` which mean API waits forever to establish connection.
-
-## Read timeout
-
-To set up how log (in milliseconds) API waits to read data from connection
-use [BoxApiConnection.setReadTimeout](https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#setReadTimeout-int-):
-
-```java
-// You can use any subclass of BoxAPIConnection
-int readTimeout = 100; // timeout in milliseconds
-api.setReadTimeout(readTimeout);
-```
-
-default value is `0` which mean API waits forever to read data from connection.
-
-# URLs configuration
-
-### Base URL
-The default base URL used for making API calls to Box can be changed by calling `BoxAPIConnection#setBaseURL(String)`
-method on `BoxApiConnection`. Default value is `https://api.box.com/`.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
-
-api.setBaseURL("https://example.com");
-String baseUrl = api.getBaseURL(); // will produce "https://example.com/2.0/"
-```
-
-Setting Base URL changes the Token and Revoke URL as well:
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
-
-api.setBaseURL("https://example.com");
-
-String baseUrl = api.getBaseURL(); // will produce "https://example.com/2.0/"
-String tokenUrl = api.getRevokeURL(); // will produce "https://example.com/oauth2/revoke"
-String revokeUrl = api.getTokenURL(); // will produce "https://example.com/oauth2/token"
-```
-
-### Base Upload URL
-The default URL used for uploads can be changed by calling `BoxAPIConnection#setBaseUploadURL(String)` method on `BoxApiConnection`.
-Default value is `https://upload.box.com/api/`.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
-
-api.setBaseUploadURL("https://upload.example.com");
-api.getBaseUploadURL(); // will produce "https://upload.example.com/2.0/"
-```
-
-### Base App URL
-The default base app URL can be changed by calling `BoxAPIConnection#setBaseAppUrl()` method on `BoxApiConnection`.
-Default value is https://app.box.com.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
-
-api.setBaseAppUrl("https://example.app.com");
-api.getBaseAppUrl(); // will produce "https://app.example.com"
-```
-
-### Token URL (deprecated)
-The default URL used for getting token can be changed by calling `setTokenURL()` method on `BoxApiConnection`.
-Default value is https://api.box.com/oauth2/token. This method is deprecated. Use `BoxAPIConnection#setBaseURL(String)`
-instead.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
-
-api.setTokenURL("https://example.com/token");
-```
-
-If you use `setTokenUrl` this URL will be used over the one coming from `setBaseUrl` when doing authentication.
-
-### Revoke URL (deprecated)
-The default URL used for invalidating token can be changed by calling `setRevokeURL()` method on `BoxApiConnection`.
-Default value is https://api.box.com/oauth2/revoke. This method is deprecated. Use `BoxAPIConnection#setBaseURL(String)`
-instead.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
-
-api.setRevokeURL("https://example.com/revoke");
-```
-
-If you use `setRevokeUrl` this URL will be used over the one coming from`setBaseUrl` when doing authentication.
-
-# SSL configuration
-You can override default settings used to verify SSL certificates.
-This can be used to allow using self-signed certificates. For example:
-```java
-BoxAPIConnection api = new BoxAPIConnection(...);
-
-// to allow self-signed certificates
-X509TrustManager trustManager = new X509TrustManager() {
- @Override
- public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {
- }
-
- @Override
- public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {
- }
-
- @Override
- public java.security.cert.X509Certificate[] getAcceptedIssuers() {
- return new java.security.cert.X509Certificate[]{};
- }
-};
-
-// to allow self-signed certificates created for localhost
-HostnameVerifier hostnameVerifier = (hostname, session) -> true;
-
-api.configureSslCertificatesValidation(trustManager, hostnameVerifier);
-```
-
-If you just need to provide trust manager use `BoxAPIConnection.DEFAULT_HOSTNAME_VERIFIER` as a hostname verifier.
-The same goes for hostname verifier. If you need just to provide it use
-`BoxAPIConnection.DEFAULT_TRUST_MANAGER` as a trust manager.
-Example:
-```java
-BoxAPIConnection api = new BoxAPIConnection(...);
-X509TrustManager trustManager = ...
-api.configureSslCertificatesValidation(trustManager, BoxAPIConnection.DEFAULT_HOSTNAME_VERIFIER);
-```
-
-# Instrumenation of OpenTelemetry
-
-OpenTelemetry is an observability framework and toolkit for creating and managing telemetry data, such as traces,
-metrics, and logs. The Box Java SDK can be instrumented with OpenTelemetry to collect telemetry data about the
-requests made by the SDK.
-
-To start, add the [opentelemetry-okhttp-3.0](https://mvnrepository.com/artifact/io.opentelemetry.instrumentation/opentelemetry-okhttp-3.0) dependency to your project.
-Next, create a custom class that extends BoxAPIConnection and integrates telemetry in the overridden `createNewCall` method.
-Here's an example implementation:
-```java
-public class BoxAPIConnectionWithTelemetry extends BoxAPIConnection {
-
- private OkHttpTelemetry telemetry;
-
- public BoxAPIConnectionWithTelemetry(String accessToken) {
- super(accessToken);
- }
-
- /**
- * Add required constructors
- */
-
- public void setTelemetry(OpenTelemetry openTelemetry) {
- this.telemetry = OkHttpTelemetry.builder(openTelemetry).build();
- }
-
- protected Call createNewCall(OkHttpClient httpClient, Request request) {
- return this.telemetry.newCallFactory(httpClient).newCall(request);
- }
-}
-
-```
-
-Please note that you should not modify either `httpClient` or `request` parameters in the createNewCall method.
-Altering these parameters can discard the BoxAPIConnection configuration and lead to unexpected behavior.
\ No newline at end of file
diff --git a/doc/css/javadoc.css b/doc/css/javadoc.css
deleted file mode 100644
index ad7887e4d..000000000
--- a/doc/css/javadoc.css
+++ /dev/null
@@ -1,488 +0,0 @@
-body {
- color: #333;
- font-family: 'Helvetica Neue', Calibri, sans-serif;
- margin: 0;
-}
-hr {
- display: none;
-}
-caption {
- display: none;
-}
-a:link,
-a:visited {
- text-decoration: none;
- color: rgb(26, 116, 186);
-}
-a:hover,
-a:focus {
- text-decoration: none;
- color: rgb(22, 100, 160);
-}
-a:active {
- text-decoration: none;
- color: #4c6b87;
-}
-a[name] {
- color: #353833;
-}
-a[name]:hover {
- text-decoration: none;
- color: #353833;
-}
-pre {
- font-family: Menlo, Consolas, monospace;
- font-size: 1em;
-}
-code {
- font-family: Menlo, Consolas, monospace;
- font-size: 1em;
-}
-h1 {
- font-size: 2em;
-}
-h2 {
- font-size: 1.7em;
-}
-h3 {
- font-size: 1.5em;
-}
-h4 {
- font-size: 1.2em;
-}
-h5 {
- font-size: 1.1em;
-}
-h6 {
- font-size: 1.1em;
-}
-ul {
- list-style-type: disc;
-}
-table tr td dt code {
- vertical-align: top;
-}
-sup {
- font-size: .6em;
-}
-h3 a:link,
-h3 a:visited {
- text-decoration: none;
- color: rgb(153, 153, 153);
-}
-h3 a:hover,
-h3 a:focus {
- text-decoration: none;
- color: rgb(169, 169, 169);
-}
-tbody:first-of-type tr:nth-child(odd) {
- background: #f3f3f3
-}
-tbody:nth-of-type(2) tr:nth-child(even) {
- background: #f3f3f3
-}
-tbody:first-of-type tr:first-child {
- font-size: 1.2em
-}
-.constantValuesContainer h2 {
- margin: 0 0 0 .5882em;
-}
-.details {
- margin: 1em;
-}
-.clear {
- clear: both;
- height: 0px;
- overflow: hidden;
-}
-.aboutLanguage {
- float: right;
- padding: 0px 21px;
- font-size: .8em;
- z-index: 200;
- margin-top: -7px;
-}
-.legalCopy {
- margin-left: .5em;
-}
-.bar a,
-.bar a:link,
-.bar a:visited,
-.bar a:active {
- color: #FFFFFF;
- text-decoration: none;
-}
-.bar a:hover,
-.bar a:focus {
- color: #bb7a2a;
-}
-.tab {
- background-color: #0066FF;
- background-image: url(resources/titlebar.gif);
- background-position: left top;
- background-repeat: no-repeat;
- color: #ffffff;
- padding: 8px;
- width: 5em;
- font-weight: bold;
-}
-.bar {
- display: none;
-}
-ul.navList,
-ul.subNavList {
- float: left;
- margin: 0 25px 0 0;
- padding: 0;
-}
-ul.navList li {
- list-style: none;
- float: left;
- padding: 3px 6px;
-}
-ul.subNavList li {
- list-style: none;
- float: left;
- font-size: 90%;
-}
-.topNav a:link,
-.topNav a:active,
-.topNav a:visited,
-.bottomNav a:link,
-.bottomNav a:active,
-.bottomNav a:visited {
- color: rgb(153, 153, 153);
- text-decoration: none;
-}
-.topNav a:hover,
-.bottomNav a:hover {
- text-decoration: none;
- color: #fff;
-}
-.navBarCell1Rev {
- font-weight: bold;
-}
-.header,
-.footer {
- clear: both;
- margin: 1em;
-}
-.indexHeader {
- margin: 10px;
- position: relative;
-}
-.indexHeader h1 {
- font-size: 1.3em;
-}
-.subTitle {
- display: none;
-}
-.header ul {
- margin: 0 0 25px 0;
- padding: 0;
-}
-.footer ul {
- margin: 20px 0 5px 0;
-}
-.header ul li,
-.footer ul li {
- list-style: none;
- font-size: 1.2em;
-}
-.header .docSummary ~ p {
- display: none;
-}
-ul.blockList ul.blockList ul.blockList li.blockList h3 {
- background-color: rgb(64, 64, 64);
- color: #fff;
- font-size: 1.2em;
- padding: .5em 1em .5em 1em;
-}
-ul.blockList ul.blockList li.blockList h3 {
- display: none;
-}
-ul.blockList li.blockList h2 {
- padding: 0px 0 20px 0;
-}
-div.summary ul.blockList li.blockList ul.blockList li.blockList ul.blockList code {
- display: block;
- margin: 1em;
-}
-div.summary ul.blockList li.blockList ul.blockList li.blockList ul.blockList li.blockList h3 {
- display: block;
-}
-.contentContainer,
-.sourceContainer,
-.classUseContainer,
-.serializedFormContainer,
-.constantValuesContainer {
- clear: both;
- position: relative;
-}
-.indexContainer {
- margin: 10px;
- position: relative;
- font-size: 1.0em;
-}
-.indexContainer h2 {
- font-size: 1.1em;
- padding: 0 0 3px 0;
-}
-.indexContainer ul {
- margin: 0;
- padding: 0;
-}
-.indexContainer ul li {
- list-style: none;
-}
-.contentContainer .description dl dt,
-.contentContainer .details dl dt,
-.serializedFormContainer dl dt {
- font-size: 1.1em;
- font-weight: bold;
- margin: 10px 0 0 0;
- color: #4E4E4E;
-}
-.contentContainer .description dl dd,
-.contentContainer .details dl dd,
-.serializedFormContainer dl dd {
- margin: 10px 0 10px 20px;
-}
-.serializedFormContainer dl.nameValue dt {
- margin-left: 1px;
- font-size: 1.1em;
- display: inline;
- font-weight: bold;
-}
-.serializedFormContainer dl.nameValue dd {
- margin: 0 0 0 1px;
- font-size: 1.1em;
- display: inline;
-}
-ul.horizontal li {
- display: inline;
- font-size: 0.9em;
-}
-ul.inheritance {
- margin-left: 1em;
- padding: 0;
-}
-ul.inheritance li {
- display: inline;
- list-style: none;
-}
-ul.inheritance li ul.inheritance {
- margin-left: 15px;
- padding-left: 15px;
- padding-top: 1px;
-}
-ul.blockList,
-ul.blockListLast {
- margin: 1em 0 1em 0;
- padding: 0;
-}
-ul.blockList h4,
-ul.blockListLast h4 {
- background-color: rgb(64, 64, 64);
- color: #fff;
- margin: 0 -.8333em 0 -.8333em;
- padding: .5em 1em .5em 1em;
-}
-ul.blockList li.blockList,
-ul.blockListLast li.blockList {
- list-style: none;
- margin-bottom: 25px;
-}
-ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
- margin-left: 0;
- padding-left: 0;
- padding-bottom: 15px;
- border: none;
- border-bottom: 1px solid #9eadc0;
-}
-ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
- list-style: none;
- border-bottom: none;
- padding-bottom: 0;
-}
-table tr td dl,
-table tr td dl dt,
-table tr td dl dd {
- margin-top: 0;
- margin-bottom: 1px;
-}
-.contentContainer table,
-.classUseContainer table,
-.constantValuesContainer table {
- width: 100%;
-}
-.contentContainer ul li table,
-.classUseContainer ul li table,
-.constantValuesContainer ul li table {
- width: 100%;
-}
-.contentContainer .description table,
-.contentContainer .details table {
- border-bottom: none;
-}
-.contentContainer ul li table th.colOne,
-.contentContainer ul li table th.colFirst,
-.contentContainer ul li table th.colLast,
-.classUseContainer ul li table th,
-.constantValuesContainer ul li table th,
-.contentContainer ul li table td.colOne,
-.contentContainer ul li table td.colFirst,
-.contentContainer ul li table td.colLast,
-.classUseContainer ul li table td,
-.constantValuesContainer ul li table td {
- vertical-align: top;
-}
-a[name="package_description"] ~ * {
- display: none;
-}
-.overviewSummary caption,
-.packageSummary caption,
-.contentContainer ul.blockList li.blockList caption,
-.summary caption,
-.classUseContainer caption,
-.constantValuesContainer caption {
- position: relative;
- text-align: left;
- background-repeat: no-repeat;
- color: #FFFFFF;
- font-weight: bold;
- clear: none;
- overflow: hidden;
- padding: 0px;
- margin: 0px;
-}
-caption a:link,
-caption a:hover,
-caption a:active,
-caption a:visited {
- color: #FFFFFF;
-}
-.overviewSummary caption span,
-.packageSummary caption span,
-.contentContainer ul.blockList li.blockList caption span,
-.summary caption span,
-.classUseContainer caption span,
-.constantValuesContainer caption span {
- white-space: nowrap;
- padding-top: 8px;
- padding-left: 8px;
- display: block;
- float: left;
- background-image: url(resources/titlebar.gif);
- height: 18px;
-}
-.overviewSummary .tabEnd,
-.packageSummary .tabEnd,
-.contentContainer ul.blockList li.blockList .tabEnd,
-.summary .tabEnd,
-.classUseContainer .tabEnd,
-.constantValuesContainer .tabEnd {
- width: 10px;
- background-image: url(resources/titlebar_end.gif);
- background-repeat: no-repeat;
- background-position: top right;
- position: relative;
- float: left;
-}
-ul.blockList ul.blockList li.blockList table {
- width: 100%;
-}
-.tableSubHeadingColor {
- background-color: #EEEEFF;
-}
-.rowColor {
- background-color: #ffffff;
-}
-.overviewSummary td,
-.packageSummary td,
-.contentContainer ul.blockList li.blockList td,
-.summary td,
-.classUseContainer td,
-.constantValuesContainer td {
- text-align: left;
- padding: .5em 1em .5em 1em;
-}
-th.colFirst,
-th.colLast,
-th.colOne,
-.constantValuesContainer th {
- background: rgb(64, 64, 64);
- color: #fff;
- text-align: left;
- padding: .5em 1em .5em 1em;
-}
-td.colOne a:link,
-td.colOne a:active,
-td.colOne a:visited,
-td.colOne a:hover,
-td.colFirst a:link,
-td.colFirst a:active,
-td.colFirst a:visited,
-td.colFirst a:hover,
-td.colLast a:link,
-td.colLast a:active,
-td.colLast a:visited,
-td.colLast a:hover,
-.constantValuesContainer td a:link,
-.constantValuesContainer td a:active,
-.constantValuesContainer td a:visited,
-.constantValuesContainer td a:hover {
- font-weight: bold;
-}
-td.colFirst,
-th.colFirst {
- white-space: nowrap;
-}
-table.overviewSummary {
- padding: 0px;
- margin-left: 0px;
-}
-table.overviewSummary td.colFirst,
-table.overviewSummary th.colFirst,
-table.overviewSummary td.colOne,
-table.overviewSummary th.colOne {
- width: 25%;
- vertical-align: middle;
-}
-table.packageSummary td.colFirst,
-table.overviewSummary th.colFirst {
- width: 25%;
- vertical-align: middle;
-}
-div.description {
- margin: 1em;
-}
-.description pre {
- margin-top: 0;
-}
-.description .block {
- margin: 2em 0 2em 0;
-}
-.deprecatedContent {
- margin: 0;
- padding: 10px 0;
-}
-.docSummary {
- padding: 0;
-}
-.sourceLineNo {
- color: green;
- padding: 0 30px 0 0;
-}
-h1.hidden {
- visibility: hidden;
- overflow: hidden;
- font-size: .9em;
-}
-.block {
- display: block;
- margin: 3px 0 0 0;
-}
-.strong {
- font-weight: bold;
-}
diff --git a/doc/devices.md b/doc/devices.md
deleted file mode 100644
index 9ed133093..000000000
--- a/doc/devices.md
+++ /dev/null
@@ -1,62 +0,0 @@
-Devices
-======
-
-Device pinning is a feature that allows enterprise admins to pin their user’s
-corporate-managed Box account to a particular mobile device or Box Sync client.
-
-
-
-
-
-- [Get Enterprise Device Pins](#get-enterprise-device-pins)
-- [Get Device Pin](#get-device-pin)
-- [Delete Device Pin](#delete-device-pin)
-
-
-
-Get Enterprise Device Pins
---------------------------
-
-Calling the static [`getEnterpriceDevicePins(BoxAPIConnection api, String enterpriseID, String... fields)`][get-enterprise-device-pins]
-will return an iterable that will page through all of the device pins belongs to
-enterprise with given ID. It is possible to specify maximum number of retrieved
-items per single response by passing the maxiumum number of records to retrieve to
-[`getEnterpriceDevicePins(BoxAPIConnection api, String enterpriseID, int limit, String... fields)`][get-enterprise-device-pins-with-limit]
-
-
-```java
-Iterable enterpriseDevicePins = BoxDevicePin.getEnterpriceDevicePins(api, id);
-for (BoxDevicePin.Info devicePin : enterpriseDevicePins) {
- // Do something with the device pin.
-}
-```
-
-[get-enterprise-device-pins]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxDevicePin.html#getEnterpriceDevicePins-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String...-
-[get-enterprise-device-pins-with-limit]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxDevicePin.html#getEnterpriceDevicePins-com.box.sdk.BoxAPIConnection-java.lang.String-int-java.lang.String...-
-
-Get Device Pin
---------------
-
-Existing collections can be retrieved by calling the [`getInfo(String... fields)`][get-device-pin] method.
-Optional parameters can be used to retrieve specific fields of the Device Pin object.
-
-
-```java
-BoxDevicePin devicePin = new BoxDevicePin(api, id);
-BoxDevicePin.Info devicePinInfo = devicePin.getInfo();
-```
-
-[get-device-pin]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxDevicePin.html#getInfo-java.lang.String...-
-
-Delete Device Pin
---------------
-
-A device pin can be deleted by calling the [`delete()`][delete] method.
-
-
-```java
-BoxDevicePin devicePin = new BoxDevicePin(api, id);
-devicePin.delete();
-```
-
-[delete]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxDevicePin.html#delete--
diff --git a/doc/events.md b/doc/events.md
deleted file mode 100644
index 0bf1f8826..000000000
--- a/doc/events.md
+++ /dev/null
@@ -1,244 +0,0 @@
-# Events
-
-The Box API provides an events endpoint that utilizes long-polling to send user
-events in real-time. The SDK provides an `EventStream` class that automatically
-handles long-polling and deduplicating events.
-
-
-
-
-
-- [User Events](#user-events)
- - [Deduplicating Events](#deduplicating-events)
-- [Enterprise (Admin) Events](#enterprise-admin-events)
- - [Historical Querying](#historical-querying)
- - [Live Monitoring](#live-monitoring)
-
-
-
-## User Events
-
-Subscribing to user events works by creating an `EventStream` and attaching
-listeners for the events that are fetched in near-real time from the API.
-
-When the `EventStream` is started, it will begin long-polling on a separate
-thread. Events received from the API are then forwarded to any listeners as a
-[`BoxEvent`][box-event] object.
-
-To create an `EventStream` starting from the current point in time, use
-the [`EventStream(BoxAPIConnection api)`][event-stream] constructor. To
-start from a known stream position, pass the stream position to the
-[`EventStream(BoxAPIConnection api, long streamPosition)`][event-stream-position]
-constructor.
-
-
-```java
-EventStream stream = new EventStream(api);
-stream.addListener(new EventListener() {
- public void onEvent(BoxEvent event) {
- // Handle the event.
- }
-});
-stream.start();
-```
-
-Keep in mind that events are received on a separate thread, so things like UI
-operations may need to be explicitly delegated back to the UI thread.
-
-When you're done listening for events, be sure to call `stream.stop()` to stop
-long-polling.
-
-[event-stream]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/EventStream.html#EventStream-com.box.sdk.BoxAPIConnection-
-[event-stream-position]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/EventStream.html#EventStream-com.box.sdk.BoxAPIConnection-long-
-[box-event]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxEvent.html
-
-### Deduplicating Events
-
-Since the Box API [may send duplicate events](https://developers.box.com/docs/#events),
-the `EventStream` will remember the last 512 received events and automatically
-ignore them.
-
-## Enterprise (Admin) Events
-
-### Historical Querying
-
-The Box API provides an `EventLog` class and a
-`getEnterpriseEvents(BoxAPIConnection api, EnterpriseEventsRequest enterpriseEventsRequest)` method
-that reads from the `admin-logs` stream and returns an `Iterable` over
-Enterprise [`BoxEvent`][box-event] records. The emphasis for this stream is on completeness over latency,
-which means that Box will deliver admin events in chronological order and without duplicates,
-but with higher latency. You can specify start and end time/dates. This method
-will only work with an API connection for an enterprise admin account or service account with a manage enterprise properties.
-
-
-```java
-// get the last two hours of unfiltered enterprise events
-Date startDate = new Date(System.currentTimeMillis() - (1000 * 60 * 60 * 2));
-Date endDate = new Date(System.currentTimeMillis());
-EnterpriseEventsRequest request = new EnterpriseEventsRequest()
- .after(startDate)
- .before(endDate);
-EventLog eventLog = EventLog.getEnterpriseEvents(api, request);
-for (BoxEvent event : eventLog) {
- System.out.println("Enterprise Event Created by User: "
- + event.getCreatedBy().getName()
- + " Login: " + event.getCreatedBy().getLogin()
- + " Event Type: " + event.getEventType()
- + " Created at: " + event.getCreatedAt().toString()
- );
-};
-```
-
-Additionally, you can set a limit of the number of enterprise events to be retrieved per response by specifying the
-limit field.
-
-```java
-// get first 20 events
-EnterpriseEventsRequest request = new EnterpriseEventsRequest()
- .limit(20);
-EventLog eventLog = EventLog.getEnterpriseEvents(api, request);
-for (BoxEvent event : eventLog) {
- System.out.println("Enterprise Event Created by User: "
- + event.getCreatedBy().getName()
- + " Login: " + event.getCreatedBy().getLogin()
- + " Event Type: " + event.getEventType()
- + " Created at: " + event.getCreatedAt().toString()
- );
-};
-```
-
-
-You can also filter events by type.
-```java
-// filter events by type
-EnterpriseEventsRequest request = new EnterpriseEventsRequest()
- .types(EventType.ITEM_CREATE, EventType.ITEM_OPEN);
-EventLog eventLog = EventLog.getEnterpriseEvents(api, request);
-for (BoxEvent event : eventLog){
- System.out.println("Enterprise Event Created by User: "
- + event.getCreatedBy().getName()
- + " Login: " + event.getCreatedBy().getLogin()
- + " Event Type: " + event.getEventType()
- + " Created at: " + event.getCreatedAt().toString()
- );
-};
-```
-
-You can also filter events by type name. This is usefull if a new event type is introduced and is not mapped to
-`BoxEvent.EventType`.
-```java
-// filter events by type name
-EnterpriseEventsRequest request = new EnterpriseEventsRequest()
- .typeNames("ITEM_CREATE", "ITEM_OPEN");
-EventLog eventLog = EventLog.getEnterpriseEvents(api, request);
-for (BoxEvent event : eventLog){
- System.out.println("Enterprise Event Created by User: "
- + event.getCreatedBy().getName()
- + " Login: " + event.getCreatedBy().getLogin()
- + " Event Type: " + event.getEventType()
- + " Event Type Name: " + event.getTypeName()
- + " Created at: " + event.getCreatedAt().toString()
- );
-};
-```
-
-Bear in mind that if an event type is not mapped to `BoxEvent.EventType` the value of `BoxEvent#getEventType()` will
-be `BoxEvent.EventType.UNKNOWN` but `BoxEvent#getTypeName()` will return its name.
-
-If you want to progress within a stream you can use position parameter:
-```java
-EnterpriseEventsRequest request1 = new EnterpriseEventsRequest().limit(20);
-EventLog eventLog1 = EventLog.getEnterpriseEvents(api, request1);
-// process revieved events
-EnterpriseEventsRequest request2 = new EnterpriseEventsRequest().limit(20)
- .position(eventLog1.getNextStreamPosition()); // get events from the next position
-EventLog eventLog2 = EventLog.getEnterpriseEvents(api, request2);
-// process revieved events
-```
-
-### Live Monitoring
-To monitor recent events that have been generated within Box across the enterprise use
-`EventLog#getEnterpriseEventsStream(BoxAPIConnection api, EnterpriseEventsStreamRequest enterpriseEventsStreamRequest)`,
-method that reads from the `admin-logs-streaming` stream and returns an `Iterable` over
-Enterprise [`BoxEvent`][box-event] records.
-The emphasis for this feed is on low latency rather than chronological accuracy, which means that Box may return
-events more than once and out of chronological order. Events are returned via the API around 12 seconds after they
-are processed by Box (the 12 seconds buffer ensures that new events are not written after your cursor position).
-Only two weeks of events are available via this feed, and you cannot set start and end time/dates. This method
-will only work with an API connection for an enterprise admin account or service account with a manage enterprise properties.
-
-
-```java
-EnterpriseEventsStreamRequest request = new EnterpriseEventsStreamRequest()
-EventLog eventLog = EventLog.getEnterpriseEventsStream(api, request);
-for (BoxEvent event : eventLog) {
- System.out.println("Enterprise Event Created by User: "
- + event.getCreatedBy().getName()
- + " Login: " + event.getCreatedBy().getLogin()
- + " Event Type: " + event.getEventType()
- + " Created at: " + event.getCreatedAt().toString()
- );
-};
-```
-
-You can limit number of events returned.
-```java
-// get first 20 events
-EnterpriseEventsStreamRequest request = new EnterpriseEventsStreamRequest()
- .limit(20)
-EventLog eventLog = EventLog.getEnterpriseEventsStream(api, request);
-```
-
-
-You can also filter events by type.
-```java
-// filter events by type
-EnterpriseEventsStreamRequest request = new EnterpriseEventsStreamRequest()
- .types(EventType.ITEM_CREATE, EventType.ITEM_OPEN);
-EventLog eventLog = EventLog.getEnterpriseEventsStream(api, request);
-for (BoxEvent event : eventLog){
- System.out.println("Enterprise Event Created by User: "
- + event.getCreatedBy().getName()
- + " Login: " + event.getCreatedBy().getLogin()
- + " Event Type: " + event.getEventType()
- + " Created at: " + event.getCreatedAt().toString()
- );
-};
-```
-
-You can also filter events by type name. This is usefull if a new event type is introduced and is not mapped to
-`BoxEvent.EventType`.
-```java
-// filter events by type name
-EnterpriseEventsRequest request = new EnterpriseEventsStreamRequest()
- .typeNames("ITEM_CREATE", "ITEM_OPEN");
-EventLog eventLog = EventLog.getEnterpriseEventsStream(api, request);
-for (BoxEvent event : eventLog){
- System.out.println("Enterprise Event Created by User: "
- + event.getCreatedBy().getName()
- + " Login: " + event.getCreatedBy().getLogin()
- + " Event Type: " + event.getEventType()
- + " Event Type Name: " + event.getTypeName()
- + " Created at: " + event.getCreatedAt().toString()
- );
-};
-```
-
-Bear in mind that if an event type is not mapped to `BoxEvent.EventType` the value of `BoxEvent#getEventType()` will
-be `BoxEvent.EventType.UNKNOWN` but `BoxEvent#getTypeName()` will return its name.
-
-If you want to progress within a stream you can use position parameter:
-```java
-EnterpriseEventsStreamRequest request1 = new EnterpriseEventsStreamRequest().limit(20);
-EventLog eventLog1 = EventLog.getEnterpriseEventsStream(api, request1);
-// process revieved events
-EnterpriseEventsStreamRequest request2 = new EnterpriseEventsStreamRequest().limit(20)
- .position(eventLog1.getNextStreamPosition()); // get events from the next position
-EventLog eventLog2 = EventLog.getEnterpriseEventsStream(api, request2);
-// process revieved events
-```
-
-If you have the next stream position, and make a subsequent call, the API will return immediately
-even when there are no events, the next stream position will be returned.
-If you have a stream position that is older than two weeks than API will return no events and next
-stream position.
diff --git a/doc/file_requests.md b/doc/file_requests.md
deleted file mode 100644
index ca6021f4d..000000000
--- a/doc/file_requests.md
+++ /dev/null
@@ -1,77 +0,0 @@
-File Requests
-=============
-
-File request objects represent a file request associated with a folder.
-
-
-
-
-- [Get a File Request's Information](#get-a-file-requests-information)
-- [Copy a File Request's Information](#copy-a-file-requests-information)
-- [Update a File Request's Information](#update-a-file-requests-information)
-- [Delete a File Request](#delete-a-file-request)
-
-
-
-Get a File Request's Information
-------------------------
-
-Calling [`getInfo()`][get-info] returns information on a file request.
-
-
-```java
-BoxFileRequest fileRequest = new BoxFileRequest(api, "id");
-BoxFileRequest.Info fileRequestInfo = fileRequest.getInfo();
-```
-
-[get-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileRequest.html#getInfo
-
-Copy a File Request's Information
----------------------------
-
-Calling [`copyInfo(String folderId)`][copy-info] copies an existing file request that is already present
-on one folder, and applies it to another folder. If you want to set certain fields of the newly copied file request when it is created,
-set those fields in the `BoxFileRequest.Info` that you pass into this method [`copyInfo(BoxFileRequest.Info info, String folderId)`][copy-info].
-
-
-```java
-BoxFileRequest fileRequest = new BoxFileRequest(api, "id");
-BoxFileRequest.Info fileRequestInfo = fileRequest.new Info();
-fileRequestInfo.setDescription("Following documents are requested for your process");
-fileRequestInfo.setIsDescriptionRequired(true);
-fileRequestInfo.setStatus(BoxFileRequest.Status.ACTIVE);
-fileRequestInfo = fileRequest.copyInfo(fileRequestInfo, "folderId");
-```
-
-[copy-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTask.html#copyInfo
-
-Update a File Request's Information
----------------------------
-
-Calling [`updateInfo(BoxFileRequest.Info info)`][update-info] updates a file request. This can be used to activate
-or deactivate a file request.
-
-
-```java
-BoxFileRequest fileRequest = new BoxFileRequest(api, "id");
-BoxFileRequest.Info fileRequestInfo = fileRequest.new Info();
-fileRequestInfo.setDescription("Following documents are requested for your process");
-fileRequestInfo.setIsDescriptionRequired(true);
-fileRequestInfo.setStatus(BoxFileRequest.Status.ACTIVE);
-fileRequestInfo = fileRequest.updateInfo(fileRequestInfo);
-```
-
-[update-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileRequest.html#updateInfo
-
-Delete a File Request
--------------
-
-Calling [`delete()`][delete] deletes a file request permanently.
-
-
-```java
-BoxFileRequest fileRequest = new BoxFileRequest(api, "id");
-fileRequest.delete();
-```
-
-[delete]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFileRequest.html#delete
diff --git a/doc/files.md b/doc/files.md
deleted file mode 100644
index f275b256c..000000000
--- a/doc/files.md
+++ /dev/null
@@ -1,1135 +0,0 @@
-Files
-=====
-
-File objects represent individual files in Box. They can be used to download a
-file's contents, upload new versions, and perform other common file operations
-(move, copy, delete, etc.).
-
-
-
-
-- [Get a File's Information](#get-a-files-information)
-- [Update a File's Information](#update-a-files-information)
-- [Download a File](#download-a-file)
-- [Upload a File](#upload-a-file)
-- [Upload Preflight Check](#upload-preflight-check)
-- [Upload a Large File in Chunks](#upload-a-large-file-in-chunks)
-- [Upload a Large File in Chunks Including Attributes](#upload-a-large-file-in-chunks-including-attributes)
-- [Upload a Large File Version in Chunks](#upload-a-large-file-version-in-chunks)
-- [Upload a Large File Version in Chunks Including Attributes](#upload-a-large-file-version-in-chunks-including-attributes)
-- [Upload a Large File Or File Version Manually](#upload-a-large-file-or-file-version-manually)
-- [Move a File](#move-a-file)
-- [Copy a File](#copy-a-file)
-- [Delete a File](#delete-a-file)
-- [Get Previous Versions of a File](#get-previous-versions-of-a-file)
-- [Upload a New Version of a File](#upload-a-new-version-of-a-file)
-- [Download a Previous Version of a File](#download-a-previous-version-of-a-file)
-- [Promote a Previous Version of a File](#promote-a-previous-version-of-a-file)
-- [Delete a Previous Version of a File](#delete-a-previous-version-of-a-file)
-- [Lock a File](#lock-a-file)
-- [Unlock a File](#unlock-a-file)
-- [Find File for Shared Link](#find-file-for-shared-link)
-- [Download File for Shared Link](#download-file-for-shared-link)
-- [Create a Shared Link](#create-a-shared-link)
-- [Get a Shared Link](#get-a-shared-link)
-- [Update a Shared Link](#update-a-shared-link)
-- [Remove a Shared Link](#remove-a-shared-link)
-- [Add a Collaborator](#add-a-collaborator)
-- [Get an Embed Link](#get-an-embed-link)
-- [Create Metadata](#create-metadata)
-- [Set Metadata](#set-metadata)
-- [Get Metadata](#get-metadata)
-- [Update Metadata](#update-metadata)
-- [Delete Metadata](#delete-metadata)
-- [Get All Metadata on File](#get-all-metadata-on-file)
-- [Set Classification on File](#set-classification-on-file)
-- [Get Classification on File](#get-classification-on-file)
-- [Remove Classification on File](#remove-classification-on-file)
-- [Get File Representations](#get-file-representations)
-- [Get Representation Content](#get-representation-content)
-
-
-
-Get a File's Information
-------------------------
-
-Calling [`getInfo()`][get-info] on a file returns a snapshot of the file's info.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-BoxFile.Info info = file.getInfo();
-```
-
-Requesting information for only the fields you need with
-[`getInfo(String... fields)`][get-info]
-can improve performance and reduce the size of the network request.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-// Only get information about a few specific fields.
-BoxFile.Info info = file.getInfo("size", "owned_by");
-```
-
-[get-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getInfo-java.lang.String...-
-
-Update a File's Information
----------------------------
-
-Updating a file's information is done by creating a new [`BoxFile.Info`][box-file-info]
-object or updating an existing one, and then calling
-[`updateInfo(BoxFile.Info fieldsToUpdate)`][update-info].
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-BoxFile.Info info = file.new Info();
-info.setName("New Name");
-file.updateInfo(info);
-```
-
-[box-file-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.Info.html
-[update-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#updateInfo-com.box.sdk.BoxFile.Info-
-
-Download a File
----------------
-
-A file can be downloaded by calling [`download(OutputStream stream)`][download]
-and providing an `OutputStream` where the file's contents will be written.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-BoxFile.Info info = file.getInfo();
-
-FileOutputStream stream = new FileOutputStream(info.getName());
-file.download(stream);
-stream.close();
-```
-
-Download progress can be tracked by providing a [`ProgressListener`][progress]
-to [`download(OutputStream stream, ProgressListener progress)`][download2].
-The `ProgressListener` will then receive progress updates as the download
-completes.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-BoxFile.Info info = file.getInfo();
-
-FileOutputStream stream = new FileOutputStream(info.getName());
-// Provide a ProgressListener to monitor the progress of the download.
-file.download(stream, new ProgressListener() {
- public void onProgressChanged(long numBytes, long totalBytes) {
- double percentComplete = numBytes / totalBytes;
- }
-});
-stream.close();
-```
-
-[download]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#download-java.io.OutputStream-
-[download2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#download-java.io.OutputStream-com.box.sdk.ProgressListener-
-[progress]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/ProgressListener.html
-
-Upload a File
--------------
-
-Files are uploaded to a folder by calling the
-[`uploadFile(InputStream fileContents, String fileName)`][upload] method
-on the [`BoxFolder`][box-folder] you want to upload the file into.
-
-
-```java
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-FileInputStream stream = new FileInputStream("My File.txt");
-BoxFile.Info newFileInfo = rootFolder.uploadFile(stream, "My File.txt");
-stream.close();
-```
-
-Note that using `FileInputStream` allows you to read the content of the file only once.
-If the first upload attempt fails, the stream will become exhausted,
-and request retry with no content might be performed. To retry an upload, you would have to
-create a new `FileInputStream` and call `uploadFile()` method again.
-
-If you want the SDK to automatically retry the upload in case of any error, you need to provide an
-`InputStream` class that supports the `reset()` operation. For example, you can read all bytes from your file into
-a `ByteArrayInputStream` and then use it for the upload method. Be aware that this approach will load the whole file
-into memory, so it is not recommended for large files, as it can exhaust easily your memory.
-
-```java
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-InputStream stream = new ByteArrayInputStream(Files.readAllBytes(new File(path).toPath()));
-BoxFile.Info newFileInfo = rootFolder.uploadFile(stream, "My File.txt");
-stream.close();
-```
-
-Upload progress can be tracked by providing the size of the file and a
-[`ProgressListener`][progress] to
-[`uploadFile(InputStream fileContents, String fileName, long fileSize, ProgressListener progress)`][upload2].
-The `ProgressListener` will then receive progress updates as the upload completes.
-
-```java
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-FileInputStream stream = new FileInputStream("My File.txt");
-BoxFile.Info newFileInfo = rootFolder.uploadFile(stream, "My File.txt", 1024, new ProgressListener() {
- public void onProgressChanged(long numBytes, long totalBytes) {
- double percentComplete = numBytes / totalBytes;
- }
-});
-stream.close();
-```
-
-We also support the ability to attach a description of the file upon upload by calling the
-[`uploadFile(InputStream fileContents, String fileName, String fileDescription)`][upload3] method.
-
-```java
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-FileInputStream stream = new FileInputStream("My File.txt");
-BoxFile.Info newFileInfo = rootFolder.uploadFile(stream, "My File.txt", "File Description");
-stream.close();
-```
-
-[upload]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#uploadFile-java.io.InputStream-java.lang.String-
-[upload2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#uploadFile-java.io.InputStream-java.lang.String-long-com.box.sdk.ProgressListener-
-[upload3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#uploadFile-java.io.InputStream-java.lang.String-java.lang.String-
-[box-folder]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html
-
-Upload Preflight Check
-----------------------
-
-You may want to check if a file can be successfully uploaded before beginning
-the file transfer, in order to the time and bandwidth of sending the file over
-the network if the upload would not have succeeded. Calling the
-[`BoxFolder#canUpload(String fileName, long fileSize)`][upload-preflight] method
-on the folder you want to upload a new file into will verify that there is no
-name conflict and that the account has enough storage space for the file.
-
-
-```java
-String fileName = "My Doc.pdf";
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-try {
- folder.canUpload(fileName, 98734576);
-
- // If the file upload would not have succeeded, it will not be attempted
- folder.uploadFile(fileContents, fileName);
-} catch (BoxAPIException ex) (
-
-)
-```
-
-[upload-preflight]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#canUpload-java.lang.String-long-
-
-Upload a Large File in Chunks
------------------------------
-
-A large file can be uploaded with the
-[`uploadLargeFile(InputStream fileContents, String fileName, long fileSize)`][upload-large-file]
-method on the folder to upload the new file into. This will upload the file in
-parts with integrity checks on each part, to ensure that network errors
-mid-upload do not fail the entire operation.
-
-
-```java
-File myFile = new File("My Large_File.txt");
-FileInputStream stream = new FileInputStream(myFile);
-
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-BoxFile.Info fileInfo = rootFolder.uploadLargeFile(inputStream, "My_Large_File.txt", myFile.length());
-```
-
-[upload-large-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#uploadLargeFile-java.io.InputStream-java.lang.String-long-
-
-Upload a Large File in Chunks Including Attributes
---------------------------------------------------
-
-A large file can be uploaded, including attributes, with the
-[`uploadLargeFile(InputStream fileContents, String fileName, long fileSize, Map fileAttributes)`][upload-large-file-including-attributes]
-method on the folder to upload the new file into. This will upload the file in
-parts with integrity checks on each part, to ensure that network errors
-mid-upload do not fail the entire operation.
-
-```java
-File myFile = new File("My Large_File.txt");
-FileInputStream stream = new FileInputStream(myFile);
-Map fileAttributes = new HashMap();
-fileAttributes.put("content_modified_at", "2017-04-08T00:58:08Z");
-
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-BoxFile.Info fileInfo = rootFolder.uploadLargeFile(inputStream, "My_Large_File.txt", myFile.length(), fileAttributes);
-```
-
-[upload-large-file-including-attributes]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#uploadLargeFile-java.io.InputStream-java.lang.String-long-java.util.Map-
-
-Upload a Large File Version in Chunks
--------------------------------------
-
-To upload a new file version for a large file, call the
-[`uploadLargeFile(InputStream fileContents, long fileSize)`][upload-large-file-version]
-method on the file to be updated. This will upload the new version of the file
-in parts with integrity checks on each part, to ensure that network errors
-mid-upload do not fail the entire operation.
-
-
-```java
-File myFile = new File("My Large_File.txt");
-FileInputStream stream = new FileInputStream(myFile);
-
-String fileID = "12345";
-BoxFile file = new BoxFile(api, fileID);
-BoxFile.Info fileInfo = file.uploadLargeFile(inputStream, myFile.length());
-```
-
-[upload-large-file-version]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#uploadLargeFile-java.io.InputStream-long-
-
-Upload a Large File Version in Chunks Including Attributes
-----------------------------------------------------------
-
-To upload a new file version for a large file, including attributes, call the
-[`uploadLargeFile(InputStream fileContents, long fileSize, Map fileAttributes)`][upload-large-file-version-including-attributes]
-method on the file to be updated. This will upload the new version of the file
-in parts with integrity checks on each part, to ensure that network errors
-mid-upload do not fail the entire operation.
-
-```java
-File myFile = new File("My Large_File.txt");
-FileInputStream stream = new FileInputStream(myFile);
-Map fileAttributes = new HashMap();
-fileAttributes.put("content_modified_at", "2017-04-08T00:58:08Z");
-
-String fileID = "12345";
-BoxFile file = new BoxFile(api, fileID);
-BoxFile.Info fileInfo = file.uploadLargeFile(inputStream, myFile.length(), fileAttributes);
-```
-
-[upload-large-file-version-including-attributes]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#uploadLargeFile-java.io.InputStream-long-java.util.Map-
-
-Upload a Large File Or File Version Manually
---------------------------------------------
-
-To start the process of uploading a large file or file version, first create a
-new upload session with
-[`BoxFolder#createUploadSession(String fileName, String fileSize)`][create-upload-session]
-for a new file, or
-[`BoxFile#createUploadSession(long fileSize)`][create-upload-session-version]
-for a new file version. Once the upload session is created, all other steps
-are identical for both cases.
-
-
-```java
-BoxFileUploadSession.Info sessionInfo;
-if (/* uploading a new file */) {
- // Create the upload session for a new file
- BoxFolder rootFolder = BoxFolder.getRootFolder(api);
- sessionInfo = rootFolder.createUploadSession("New Large File.pdf", fileSize);
-} else if (/* uploading a new version of an exiting file */) {
- // Create the uplaod session for a new version of an existing file
- String fileID = "93465";
- BoxFile file = new BoxFile(api, fileID);
- sessionInfo = file.createUploadSession(fileSize);
-}
-
-//Get the session resource from the session info
-BoxFileUploadSession session = sessionInfo.getResource();
-
-//Create the Message Digest for the whole file
-MessageDigest digest = null;
-try {
- digest = MessageDigest.getInstance("SHA1");
-} catch (NoSuchAlgorithmException ae) {
- throw new BoxAPIException("Digest algorithm not found", ae);
-}
-```
-
-Both of these methods will return a
-
-Once the upload session is created, the large file can be uploaded in chunks with the
-[`uploadPart(InputStream stream, long offset, int partSize, long totalSizeOfFile)`][upload-part]
-method of the session instance. If there is a failure in uploading any of the
-parts, the failed part can be uploaded again without affecting the other parts.
-
-
-```java
-//Reading a large file
-FileInputStream fis = new FileInputStream("My_Large_File.txt");
-//Create the digest input stream to calculate the digest for the whole file.
-DigestInputStream dis = new DigestInputStream(fis, digest);
-
-List parts = new ArrayList();
-
-//Get the part size. Each uploaded part should match the part size returned as part of the upload session.
-//The last part of the file can be less than part size if the remaining bytes of the last part is less than
-//the given part size
-long partSize = sessionInfo.getPartSize();
-//Start byte of the part
-long offset = 0;
-//Overall of bytes processed so far
-long processed = 0;
-while (processed < fileSize) {
- long diff = fileSize - processed;
- //The size last part of the file can be less than the part size.
- if (diff < partSize) {
- partSize = diff;
- }
-
- //Upload a part. It can be uploaded asynchorously
- BoxFileUploadSessionPart part = session.uploadPart(dis, offset, (int)partSize, fileSize);
- parts.add(part);
-
- //Increase the offset and proceesed bytes to calculate the Content-Range header.
- processed += partSize;
- offset += partSize;
-}
-```
-
-At any point in time, the list of parts that have been uploaded successfully can be retrieved with the
-[`listParts(int offset, int limit)`][list-parts] method of the session instance.
-
-
-```java
-//The following snippet retrives first 1000 parts that are uploaded.
-BoxFileUploadSessionPartList partList = session.listParts(0, 1000);
-List parts = partList.getEntries();
-```
-
-Once all the parts are uploaded successfully, the upload session can be committed with the
-[`commit(String digest, List parts, Map attributes, String ifMatch, String ifNoneMatch)`][upload-session-commit] method.
-
-
-```java
-//Creates the file hash
-byte[] digestBytes = digest.digest();
-//Base64 encoding of the hash
-String digestStr = Base64.encode(digestBytes);
-
-//Commit the upload session. If there is a failure, abort the commit.
-BoxFile.Info fileInfo = session.commit(digestStr, parts, null, null, null);
-```
-
-The upload session can be aborted at any time with the
-[`abort()`][upload-session-abort] method of the session instance. This will
-cancel the upload and any parts that were already uploaded will be lost.
-
-
-```java
-session.abort();
-```
-
-The upload session status can be retrieved at any time with the [`getStatus()`][upload-session-status] method.
-This call will update the parts processed and other information in the session info instance.
-
-
-```java
-BoxFileUploadSession.Info updatedSessionInfo = session.getStatus();
-```
-
-[create-upload-session]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#createUploadSession-java.lang.String-long-
-[create-upload-session-version]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#createUploadSession-long-
-[upload-part]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileUploadSession.html#uploadPart-java.io.InputStream-long-int-long-
-[list-parts]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileUploadSession.html#listParts-int-int-
-[upload-session-commit]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileUploadSession.html#commit-java.lang.String-java.util.List-java.util.Map-java.lang.String-java.lang.String-
-[upload-session-abort]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileUploadSession.html#abort--
-[upload-session-status]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileUploadSession.html#getStatus--
-
-Move a File
------------
-
-To move a file from one folder into another, call
-[`move(BoxFolder destination)`][move] on the file to be moved with the
-destination folder.
-
-```java
-String fileID = "1234";
-String destinationFolderID = "5678";
-BoxFile file = new BoxFile(api, fileID);
-BoxFolder destinationFolder = new BoxFolder(destinationFolderID);
-file.move(destinationFolder)
-```
-
-To avoid name conflicts in the destination folder, you can optionally provide a
-new name for the file to [`move(BoxFolder destination, String newName)`][move-rename]. The file
-will be placed into the destination folder with the new name.
-
-```java
-String fileID = "1234";
-String destinationFolderID = "5678";
-BoxFile file = new BoxFile(api, fileID);
-BoxFolder destinationFolder = new BoxFolder(destinationFolderID);
-file.move(destinationFolder, "Vacation Photo (1).jpg");
-```
-
-[move]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#move-com.box.sdk.BoxFolder-
-[move-rename]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#move-com.box.sdk.BoxFolder-java.lang.String-
-
-Copy a File
------------
-
-A file can be copied to a new folder and optionally be renamed with the
-[`copy(BoxFolder destination)`][copy] and
-[`copy(BoxFolder destination, String newName)`][copy2] methods.
-
-
-```java
-// Copy a file into the user's root folder
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-BoxFile file = new BoxFile(api, "id");
-BoxFile.Info copiedFileInfo = file.copy(rootFolder, "New Name");
-```
-
-[copy]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#copy-com.box.sdk.BoxFolder-
-[copy2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#copy-com.box.sdk.BoxFolder-java.lang.String-
-
-Delete a File
--------------
-
-Calling the [`delete()`][delete] method will move the file to the user's trash.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.delete();
-```
-
-[delete]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#delete--
-
-Get Previous Versions of a File
--------------------------------
-
-For users with premium accounts, versions of a file can be retrieved with the
-[`getVersions()`][get-versions] method. By default, it will return up to 1000 file versions with all default fields set.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Collection versions = file.getVersions();
-for (BoxFileVersion version : versions) {
- System.out.format("SHA1 of \"%s\": %s\n", file.getInfo().getName(), version.getSha1());
-}
-```
-
-File versions can be retrieved with specified starting position with the
-[`getVersionsRange(long offset, long limit)`][get-versions-range] method.
-You can use the `limit` and `offset` parameters to page through the all available file versions.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Collection versions = file.getVersionsRange(1000, 2000);
-for (BoxFileVersion version : versions) {
- System.out.format("SHA1 of \"%s\": %s\n", file.getInfo().getName(), version.getSha1());
-}
-```
-
-You can specify selected fields to be returned while getting versions information.
-Assume we want to get version SHA1 and version number:
-```java
-BoxFile file = new BoxFile(api, "id");
-Collection versions = file.getVersions("sha1", "version_number");
-for (BoxFileVersion version : versions) {
- System.out.format("SHA1 of \"%d\": %s\n", version.getVersionNumber(), version.getSha1());
-}
-```
-You can find a list of available fields at [`BoxFile.ALL_VERSION_FIELDS`][versions-fields].
-
-[get-versions]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getVersions--
-[versions-fields]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#ALL_VERSION_FIELDS--
-
-Upload a New Version of a File
-------------------------------
-
-New versions of a file can be uploaded with the
-[`uploadNewVersion(InputStream fileContents)`][upload-new-version]
-method.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-FileInputStream stream = new FileInputStream("My File.txt");
-file.uploadNewVersion(stream);
-```
-
-[upload-new-version]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#uploadNewVersion-java.io.InputStream-
-
-Download a Previous Version of a File
--------------------------------------
-
-For users with premium accounts, previous versions of a file can be downloaded
-by calling [`download(OutputStream output)`][download-version].
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Collection versions = file.getVersions();
-BoxFileVersion firstVersion = versions.iterator().next();
-
-FileOutputStream stream = new FileOutputStream(firstVersion.getName());
-firstVersion.download(stream);
-stream.close();
-```
-
-[download-version]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersion.html#download-java.io.OutputStream-
-
-Promote a Previous Version of a File
-------------------------------------
-
-A previous version of a file can be promoted with the [`promote()`][promote]
-method to become the current version of the file.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Collection versions = file.getVersions();
-BoxFileVersion firstVersion = versions.iterator().next();
-firstVersion.promote();
-```
-
-[promote]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersion.html#promote--
-
-Delete a Previous Version of a File
------------------------------------
-
-A version of a file can be deleted and moved to the trash by calling
-[`delete()`][delete-version].
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Collection versions = file.getVersions();
-BoxFileVersion firstVersion = versions.iterator().next();
-firstVersion.delete();
-```
-
-[delete-version]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersion.html#delete--
-
-Lock a File
------------
-
-A file can be locked indefinitely by calling [`lock()`][lock] on the file to
-be locked. A locked file cannot be modified by any other user until it is
-unlocked. This is useful if you want to "check out" a file while you're working
-on it, to ensure that other collaborators do not make changes while your changes
-are in progress.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.lock();
-```
-
-When locking a file, you can optionally prevent other users from downloading the
-file in addition to prevent changes by calling
-[`lock(boolean preventDownload)`][lock-download] with `true`.
-
-```java
-// Lock the file and prevent downloading
-BoxFile file = new BoxFile(api, "id");
-file.lock(true);
-```
-
-You can also set a date when the lock will automatically be released by
-calling [`lock(Date expirationDate)`][lock-expires] with the date on
-which the lock should expire. This is recommended to prevent a file
-from accidentally being locked longer than intended.
-
-```java
-final long ONE_WEEK_MILLIS = 1000 * 60 * 60 * 24 * 7;
-long expirationTimestamp = System.currentTimeMillis() + ONE_WEEK_MILLIS;
-Date expirationTime = new Date(expirationTimestamp);
-BoxFile file = new BoxFile(api, "id");
-file.lock(expirationTime);
-```
-
-Both options can be passed together to
-[`lock(boolean preventDownload, Date expireTime)`][lock-both].
-
-[lock]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#lock-java.util.Date-
-[lock-download]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#lock-boolean-
-[lock-expires]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#lock-java.util.Date-
-[lock-both]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#lock-java.util.Date-boolean-
-
-Unlock a File
--------------
-
-A file can be unlocked by calling [`unlock()`][unlock].
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.unlock();
-```
-
-[unlock]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#unlock--
-
-Find File for Shared Link
--------------------------
-
-To get the file information for a shared link, you can call
-[`BoxItem.getSharedItem(BoxAPIConnection api, String sharedLink)`][get-shared-item]
-with the shared link to get information about the file behind it.
-
-```java
-String sharedLink = "https://app.box.com/s/abcdefghijklmnopqrstuvwxyz123456";
-BoxItem.Info itemInfo = BoxItem.getSharedItem(api, sharedLink);
-```
-
-If the shared link is password-protected, call
-[`BoxItem.getSharedItem(BoxAPIConnection api, String sharedLink, String password)`][get-shared-item-password]
-with the shared link and password.
-
-
-```java
-String sharedLink = "https://app.box.com/s/abcdefghijklmnopqrstuvwxyz123456";
-String password = "letmein";
-BoxItem.Info itemInfo = BoxItem.getSharedItem(api, sharedLink, password);
-```
-
-[get-shared-item]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.html#getSharedItem-com.box.sdk.BoxAPIConnection-java.lang.String-
-[get-shared-item-password]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.html#getSharedItem-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-
-
-Download File from Shared Link
----------------
-
-A file can be downloaded via a shared link
-by calling [`downloadFromSharedLink(BoxAPIConnection api, OutputStream output, String sharedLink)`][download-from-shared-link]
-and providing an `OutputStream` where the file's contents will be written and shared link of the file.
-
-If the shared link is password-protected, call
-[`downloadFromSharedLink(BoxAPIConnection api, OutputStream output, String sharedLink, String password)`][download-from-shared-link-password]
-method.
-
-```java
-FileOutputStream stream = new FileOutputStream("My File.txt");
-String sharedLink = "https://cloud.box.com/s/12339wbq4c7y2xd3drg4j9j9wer3ptt6n";
-String password = "Secret123@";
-BoxFile.downloadFromSharedLink(api, stream, sharedLink, password);
-stream.close();
-```
-
-Download progress can be tracked by providing a [`ProgressListener`][progress]
-to [` downloadFromSharedLink(BoxAPIConnection api, OutputStream output, String sharedLink, String password, ProgressListener listener)`][download-from-shared-link-password-progress].
-The `ProgressListener` will then receive progress updates as the download
-completes.
-
-```java
-FileOutputStream stream = new FileOutputStream("My File.txt");
-// Provide a ProgressListener to monitor the progress of the download.
-BoxFile.downloadFromSharedLink(api, stream, sharedLink, password, new ProgressListener() {
- public void onProgressChanged(long numBytes, long totalBytes) {
- double percentComplete = numBytes / totalBytes;
- }
-});
-stream.close();
-```
-[download-from-shared-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#downloadFromSharedLink-com.box.sdk.BoxAPIConnection-java.io.OutputStream-java.lang.String-
-[download-from-shared-link-password]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#downloadFromSharedLink-com.box.sdk.BoxAPIConnection-java.io.OutputStream-java.lang.String-java.lang.String-
-[download-from-shared-link-password-progress]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#downloadFromSharedLink-com.box.sdk.BoxAPIConnection-java.io.OutputStream-java.lang.String-java.lang.String-com.box.sdk.ProgressListener-
-
-Create a Shared Link
---------------------
-
-A shared link for a file can be generated by calling
-[`createSharedLink(BoxSharedLinkRequest sharedLinkRequest)`][create-shared-link].
-
-
-```java
-// Optionally we can calculate and set the date when shared link will automatically be disabled
-final long ONE_WEEK_MILLIS = 1000 * 60 * 60 * 24 * 7;
-long unsharedTimestamp = System.currentTimeMillis() + ONE_WEEK_MILLIS;
-Date unsharedDate = new Date(unsharedTimestamp);
-
-BoxFile file = new BoxFile(api, "id");
-BoxSharedLinkRequest sharedLinkRequest = new BoxSharedLinkRequest()
- .access(OPEN)
- .permissions(true, true)
- .unsharedDate(unsharedDate);
-BoxSharedLink sharedLink = file.createSharedLink(sharedLinkRequest);
-```
-
-A set of shared link access level constants are available through the SDK for convenience:
-* `BoxSharedLink.Access.OPEN`
-* `BoxSharedLink.Access.COLLABORATORS`
-* `BoxSharedLink.Access.COMPANY`
-* `BoxSharedLink.Access.DEFAULT`
-
-[create-shared-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#createSharedLink-com.box.sdk.sharedlink.BoxSharedLinkRequest-
-
-Get a Shared Link
------------------
-
-Retrieve the shared link for a file by calling
-[`getSharedLink()`][get-shared-link].
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-BoxFile.Info info = file.getInfo();
-BoxSharedLink link = info.getSharedLink();
-String url = link.getUrl();
-```
-
-[get-shared-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.Info.html#getSharedLink--
-
-Update a Shared Link
---------------------
-
-A shared link for a file can be updated by calling the same method as used when creating a shared link,
-[`createSharedLink(BoxSharedLinkRequest sharedLinkRequest)`][create-shared-link].
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-BoxSharedLinkRequest sharedLinkRequest = new BoxSharedLinkRequest()
- .access(OPEN)
- .permissions(true, true);
-BoxSharedLink sharedLink = file.createSharedLink(sharedLinkRequest);
-```
-
-Remove a Shared Link
---------------------
-
-A shared link for a file can be removed by calling [`removeSharedLink()`][remove-shared-link].
-
-
-```java
-BoxFile file = new BoxFile(api, "12345");
-BoxFile.Info info = file.getInfo();
-info.removeSharedLink();
-file.updateInfo(info);
-```
-
-[remove-shared-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#removeSharedLink--
-
-Add a Collaborator
-------------------
-
-You can invite another person to collaborate on a file by email with
-[`collaborate(String emailAddress, BoxCollaboration.Role role, Boolean notify, Boolean canViewPath, Date expiresAt, Boolean isAccessOnly)`][share-a-file].
-
-The `notify` parameter will determine if the user or group will receive an
-email notification when being added as a collaborator. This option is only
-available to enterprise administrators.
-
-The `canViewPath` parameter allows the invitee to see the entire list of ancestor
-folders of the associated file. The user will not gain privileges in any ancestor
-folder, but will be able to see the whole path to that file in the owner's account.
-
-The `expiresAt` parameter allows the owner to set a date-time in the future when
-the collaboration should expire.
-
-The `isAccessOnly` parameter allows the owner to set the collaboration to be
-access only collaboration.
-
-The `notify`, `canViewPath`, `expiresAt` and `isAccessOnly` parameters can be left as `null`.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-BoxCollaboration.Info collabInfo = file.collaborate("testuser@example.com", BoxCollaboration.Role.EDITOR, true, true);
-```
-
-Alternatively, if you know the user's ID, you can invite them directly
-without needing to know their email address with the
-[`collaborate(BoxCollaborator user, BoxCollaboration.Role role, Boolean notify, Boolean canViewPath, Date expiresAt, Boolean isAccessOnly)`][share-a-file-userID]
-
-```java
-BoxUser collaborator = new BoxUser(api, "user-id");
-BoxFile file = new BoxFile(api, "file-id");
-BoxCollaboration.Info collabInfo = file.collaborate(collaborator, BoxCollaboration.Role.EDITOR, true, true);
-```
-
-[share-a-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#collaborate-java.lang.String-com.box.sdk.BoxCollaboration.Role-java.lang.Boolean-java.lang.Boolean-java.lang.String-java.util.Date-java.lang.Boolean-
-[share-a-file-userID]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#collaborate-com.box.sdk.BoxCollaborator-com.box.sdk.BoxCollaboration.Role-java.lang.Boolean-java.lang.Boolean-java.lang.String-java.util.Date-java.lang.Boolean-
-
-
-Get an Embed Link
------------------
-
-A file embed link can be generated by calling [`getPreviewLink()`][get-preview-link].
-
-```java
-BoxFile file = new BoxFile(api, "id");
-URL embedLink = file.getPreviewLink();
-```
-
-[get-preview-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getPreviewLink--
-
-Create Metadata
----------------
-
-Metadata can be created on a file by calling
-[`createMetadata(Metadata metadata)`][create-metadata],
-[`createMetadata(String typeName, Metadata metadata)`][create-metadata-2], or
-[`createMetadata(String typeName, String scope, Metadata metadata)`][create-metadata-3].
-
-
-```java
-// Add property "foo" with value "bar" to the default metadata properties
-BoxFile file = new BoxFile(api, "id");
-file.createMetadata(new Metadata().add("/foo", "bar"));
-```
-
-Note: This method will only succeed if the provided metadata template is not currently applied to the file, otherwise
-it will fail with a Conflict error. To get to know how to edit existing metadata please
-go to [set metadata](#set-metadata) and [update metadata](#update-metadata) sections.
-
-[create-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#createMetadata-com.box.sdk.Metadata-
-[create-metadata-2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#createMetadata-java.lang.String-com.box.sdk.Metadata-
-[create-metadata-3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#createMetadata-java.lang.String-java.lang.String-com.box.sdk.Metadata-
-[update-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#updateMetadata-com.box.sdk.Metadata-
-
-Set Metadata
-------------
-
-To set metadata on a file, call [`setMetadata(String templateName, String scope, Metadata metadata)`][set-metadata].
-This method will try to create provided metadata on a file. However, if metadata has already been applied to this file,
-it will overwrite values of metadata keys specified in the `metadata` parameter. The metadata keys not specified in
-the `metadata` parameter will remain unchanged.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.setMetadata("test_template", "enterprise", new Metadata().add("/foo", "bar"));
-```
-
-Note: If you want to set new metadata on a file including hard reset of the current metadata
-(also removing keys not specified in the `metadata` param):
-first delete metadata as specified in [delete metadata](#delete-metadata) section and then set new metadata again.
-
-[set-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#setMetadata-java.lang.String-java.lang.String-com.box.sdk.Metadata-
-
-Get Metadata
-------------
-
-Retrieve a file's Metadata by calling [`getMetadata()`][get-metadata],
-[`getMetadata(String typeName)`][get-metadata-2], or
-[`getMetadata(String typeName, String scope)`][get-metadata-3].
-These methods return a [`Metadata`][metadata] object, which allows access to metadata values.
-
-
-```java
-// Get the default free-form metadata properties
-BoxFile file = new BoxFile(api, "id");
-Metadata metadata = file.getMetadata();
-
-// Unknown type metadata field, you can test for type or try to get as any type
-JsonValue unknownValue = metadata.getValue("/someField");
-
-// String or Enum metadata fields
-String stringValue = metadata.getString("/author");
-
-// Float metadata fields can be interpreted as any numeric type
-float floatValue = metadata.getFloat("/price");
-
-// Date metadata fields
-Date dateValue = metadata.getDate("/deadline");
-
-// Multiselect metadata fields
-List multiSelectValues = metadata.getMultiSelect("/categories");
-```
-
-[metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/Metadata.html
-[get-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getMetadata--
-[get-metadata-2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getMetadata-java.lang.String-
-[get-metadata-3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getMetadata-java.lang.String-java.lang.String-
-
-Update Metadata
----------------
-
-Update a file's Metadata by calling [`updateMetadata(Metadata properties)`][update-metadata].
-
-Note: This method will only succeed if the provided metadata template has already been applied to the file. If the file
-does not have existing metadata, this method will fail with a Not Found error. This is useful in cases where you know
-the file will already have metadata applied, since it will save an API call compared to `setMetadata()`.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.updateMetadata(new Metadata("templateScope", "templateKey").add("/foo", "bar"));
-```
-
-Also, it is possible to add multi-select fields for your file metadata by calling
-[`updateMetadata(Metadata properties)`][update-metadata] with a list of values.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-List valueList = new ArrayList();
-valueList.add("bar");
-valueList.add("qux");
-file.updateMetadata(new Metadata("templateScope", "templateKey").add("/foo", valueList));
-```
-
-If you wanted to replace all selected fields for a specified key you can use the
-[`replace(String path, List values)`][replace-metadata].
-
-```java
-BoxFile file = new BoxFile(api, "id");
-List valueList = new ArrayList();
-valueList.add("bar");
-valueList.add("qux");
-file.updateMetadata(new Metadata("templateScope", "templateKey").replace("/foo", valueList));
-```
-
-If you wanted to remove a metadata value for a specified key you can use the
-[`remove(String path)`][remove-metadata].
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.updateMetadata(new Metadata("templateScope", "templateKey").remove("/foo"));
-```
-
-[update-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#updateMetadata-com.box.sdk.Metadata-
-[replace-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/Metadata.html#replace-java.lang.String-java.util.List-
-[remove-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/Metadata.html#remove-java.lang.String-
-
-Delete Metadata
----------------
-
-A file's Metadata can be deleted by calling
-[`deleteMetadata()`][delete-metadata],
-[`deleteMetadata(String typeName)`][delete-metadata-2], or
-[`deleteMetadata(String typeName, String scope)`][delete-metadata-3].
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.deleteMetadata("myMetadataTemplate");
-```
-
-[delete-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#deleteMetadata--
-[delete-metadata-2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#deleteMetadata-java.lang.String-
-[delete-metadata-3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#deleteMetadata-java.lang.String-java.lang.String-
-
-Get All Metadata on File
---------------
-
-Calling the [`getAllMetadata()`][get-all-metadata] method on a file will return
-an iterable that will page through all of the metadata associated with the file.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Iterable metadataList = file.getAllMetadata();
-for (Metadata metadata : metadataList) {
- // Do something with the metadata.
-}
-```
-
-[get-all-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getAllMetadata-java.lang.String...-
-
-Set Classification on File
---------------------------
-
-Calling the [`setClassification(String classificationType)`][set-classification] method on a file will add a
-classification template on the file. This method will return the classification type applied on the file. The
-classification types include `Public`, `Internal`, and `Confidential`. `Public` being the most available permission,
-`Internal` which restricts the specified file to company and collaborators only, and finally, `Confidential`, which is
-for collaborators only.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-String classificationType = file.setClassification("Public");
-```
-
-It is important to note that this call will attempt to create a classification on the file first, if one already exists
-then it will do the update. If you already know that a classification exists on the file and would like to save an API
-call, we encourage you to use the [`updateClassification(String classificationType)`][update-classification] method.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-String classificationType = file.updateClassification("Public");
-```
-
-[set-classification]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#setClassification-java.lang.String...-
-[update-classification]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#updateClassification-java.lang.String...-
-
-Get Classification on File
---------------------------
-
-To retrieve the classification assigned on the file, use the [`getClassification()`][get-classification] method. This
-will return the classification type on the file.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-String classificationType = file.getClassification();
-```
-
-[get-classification]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getClassification-java.lang.String...-
-
-Remove Classification on File
------------------------------
-
-To remove classification from the file, use the [`deleteClassification()`][delete-classification] method.
-
-```java
-BoxFile file = new BoxFile(api, "id");
-file.deleteClassification();
-```
-
-[delete-classification]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#deleteClassification--
-
-Get File Representations
-------------------------
-
-To get the preview representations of a file, call the
-[`getInfoWithRepresentations(String representationHints, String... fields)`][get-reps]
-method with the [representation hints][rep-hints] to fetch, along with any other
-fields on the file object to fetch simultaneously. This method returns a [`BoxFile.Info`][box-file-info]
-object that contains the representations as a list of [`Representation`][rep-obj] objects.
-
-Note that this method only provides information about a set of available representations; your
-application will need to handle checking the status of the representations and downlaoding them
-via the provided content URL template.
-
-```java
-BoxFile file = new BoxFile(api, "1234");
-
-// Get the PDF representation and file name
-String repHints = "[pdf]";
-BoxFile.Info fileInfo = file.getInfoWithRepresentations(repHints, "name");
-List representations = fileInfo.getRepresentations();
-String name = fileInfo.getName();
-```
-
-[get-reps]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getInfoWithRepresentations-java.lang.String-java.lang.String...-
-[rep-hints]: https://developer.box.com/v2.0/reference/#section-x-rep-hints-header
-[rep-obj]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/Representation.html
-
-Get Representation Content
---------------------------
-
-To write the contents of a single file representation to an `OutputStream`, call the
-[`getRepresentationContent(String representationHint, OutputStream output)`][get-rep-content]
-method with an [X-Rep-Hints value][rep-hints] specifying the representation you want.
-
-> __Note:__ This method only supports getting the contents of a single representation; if your
-> X-Rep-Hints value specifies multiple representations, an arbitrary one of them will be fetched.
-
-```java
-// Read the PDF representation of file 12345 into memory
-ByteArrayOutputStream output = new ByteArrayOutputStream();
-
-BoxFile file = new BoxFile(api, "12345");
-file.getRepresentationContent("[pdf]", output);
-```
-
-For representations with multiple files, e.g. multi-page images, you will need to pass an `assetPath`
-parameter to specify which file you want to fetch.
-
-```java
-// If file 12345 is a document, its PNG representation will consist of one image per page of the document
-// Get the image of the first page of the document and write it to a file
-FileOutputStream output = new FileOutputStream("/path/to/file.png");
-BoxFile file = new BoxFile(api, "12345");
-file.getRepresentationContent("[png?dimensions=1024x1024]", "1.png", output);
-```
-
-Generating a representation for the selected file is an asynchronous operation and may take some time.
-Therefore, by default, the `getRepresentationContent` method periodically checks the status of the generated file and downloads it when it is ready.
-With the `maxRetries` parameter in [`getRepresentationContent(String representationHint, String assetPath, OutputStream output, int maxRetries)`][get-rep-content-overloaded], you can define
-the number of status checks for the generated file, which will be performed at intervals of 100 ms.
-
-If this number is exceeded, a `BoxApiException` will be thrown.
-
-```java
-FileOutputStream output = new FileOutputStream("/path/to/file.png");
-BoxFile file = new BoxFile(api, "12345");
-file.getRepresentationContent("[png?dimensions=1024x1024]", "1.png", output, 10);
-```
-
-
-[get-rep-content]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getRepresentationContent-java.lang.String-java.lang.String-java.io.OutputStream-
-[get-rep-content-overloaded]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getRepresentationContent-java.lang.String-java.lang.String-java.io.OutputStream-int-
diff --git a/doc/folders.md b/doc/folders.md
deleted file mode 100644
index e5bb6eb0d..000000000
--- a/doc/folders.md
+++ /dev/null
@@ -1,801 +0,0 @@
-Folders
-=======
-
-Folder objects represent a folder from a user's account. They can be used to
-iterate through a folder's contents, collaborate a folder with another user or
-group, and perform other common folder operations (move, copy, delete, etc.).
-
-
-
-
-- [Get the User's Root Folder](#get-the-users-root-folder)
-- [Get a Folder's Items](#get-a-folders-items)
- - [SortParameters and Using PagingParameters](#sortparameters-and-using-pagingparameters)
-- [Get a Folder's Information](#get-a-folders-information)
-- [Update a Folder's Information](#update-a-folders-information)
-- [Create a Folder](#create-a-folder)
-- [Copy a Folder](#copy-a-folder)
-- [Move a Folder](#move-a-folder)
-- [Rename a Folder](#rename-a-folder)
-- [Delete a Folder](#delete-a-folder)
-- [Find Folder for Shared Link](#find-folder-for-shared-link)
-- [Create a Shared Link](#create-a-shared-link)
-- [Get a Shared Link](#get-a-shared-link)
-- [Update a Shared Link](#update-a-shared-link)
-- [Remove a Shared Link](#remove-a-shared-link)
-- [Share a Folder](#share-a-folder)
-- [Get All Collaborations for a Folder](#get-all-collaborations-for-a-folder)
-- [Create Metadata](#create-metadata)
-- [Set Metadata](#set-metadata)
-- [Get Metadata](#get-metadata)
-- [Update Metadata](#update-metadata)
-- [Delete Metadata](#delete-metadata)
-- [Get All Metadata on Folder](#get-all-metadata-on-folder)
-- [Get Metadata for Multiple Files](#get-metadata-for-multiple-files)
-- [Set Classification on Folder](#set-classification-on-folder)
-- [Get Classification on Folder](#get-classification-on-folder)
-- [Remove Classification on Folder](#remove-classification-on-folder)
-- [Create Cascade Policy On Folder](#create-cascade-policy-on-folder)
-- [Get a Cascade Policy's Information](#get-a-cascade-policys-information)
-- [Get All Cascade Policies on Folder](#get-all-cascade-policies-on-folder)
-- [Force Apply Cascade Policy on Folder](#force-apply-cascade-policy-on-folder)
-- [Delete Cascade Policy](#delete-cascade-policy)
-- [Lock a Folder](#lock-a-folder)
-- [Get All Locks on a Folder](#get-all-locks-on-a-folder)
-- [Delete a Lock on a Folder](#delete-a-lock-on-a-folder)
-
-
-
-Get the User's Root Folder
---------------------------
-
-The user's root folder can be accessed with the static
-[`getRootFolder(BoxAPIConnection api)`][get-root-folder] method.
-
-```java
-BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-```
-
-[get-root-folder]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getRootFolder-com.box.sdk.BoxAPIConnection-
-
-Get a Folder's Items
---------------------
-
-Every `BoxFolder` implements [`Iterable`][iterator] which allows you to
-iterate over the folder's contents. The iterator automatically handles paging
-and will make additional API calls to load more data when necessary.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-for (BoxItem.Info itemInfo : folder) {
- if (itemInfo instanceof BoxFile.Info) {
- BoxFile.Info fileInfo = (BoxFile.Info) itemInfo;
- // Do something with the file.
- } else if (itemInfo instanceof BoxFolder.Info) {
- BoxFolder.Info folderInfo = (BoxFolder.Info) itemInfo;
- // Do something with the folder.
- }
-}
-```
-
-`BoxFolder` purposely doesn't provide a way of getting a collection of
-`BoxItems`. Getting the entire contents of a folder is usually unnecessary and
-can be extremely inefficient for folders with a large number of items. If you
-really require a collection instead of an iterable, you can create the
-collection manually.
-
-```java
-Collection folderItems = new ArrayList();
-BoxFolder folder = new BoxFolder(api, "id");
-for (BoxItem.Info itemInfo : folder) {
- folderItems.add(itemInfo.getResource());
-}
-```
-
-We also allow users to sort the results of the folder items by `name`, `id`, or `date`. This will maintain the integrity
-of the ordering when you retrieve the items for a folder. You can do this by calling the
-[`getChildren(String sortField, BoxFolder.SortDirection sortDirection, String... fields)`][get-items-with-sort] method.
-
-```java
-BoxFolder folder = new BoxFolder(this.api, "12345");
-Iterator itemIterator = folder.getChildren("name", BoxFolder.SortDirection.ASC).iterator();
-while (itemIterator.hasNext()) {
- BoxItem.Info itemInfo = itemIterator.next();
- // Do something
-}
-```
-
-### SortParameters and Using PagingParameters
-
-`SortParameters` is an abstraction hiding way that SDK is doing sorting.
-`PagingParameters` is an abstraction hiding way that SDK is doing pagination.
-If you want to start offset based pagination:
-
-```java
-BoxFolder folder = new BoxFolder(this.api, "12345");
-// setup ascending sorting by name
-SortParameters sorting = SortParameters.ascending("name");
-// setup paging with offset 0 and limit 100
-long offset = 0;
-long limit = 100;
-PagingParameters paging = PagingParameters.offset(offset, limit)
-Iterable itemIterator = childFolder.getChildren(sorting, paging);
-while (itemIterator.hasNext()) {
- BoxItem.Info itemInfo=itemIterator.next();
- // Do something
-}
-```
-
-With offset pagination you cannot set offset larger than 300000.
-With marker based pagination you can iterate over folders containing more than 300000 elements.
-With marker based pagination you cannot use sorting. Use `SortParameters.none()` to turn off sort.
-If you want to use PagingParameters to start marker based pagination do:
-```java
-BoxFolder folder = new BoxFolder(this.api, "12345");
-// disable sorting
-SortParameters sorting = SortParameters.none();
-// setup paging with makred based pagination and limit 100
-long limit = 100;
-PagingParameters paging = PagingParameters.marker(limit)
-Iterable itemIterator = childFolder.getChildren(sorting, paging);
-while (itemIterator.hasNext()) {
- BoxItem.Info itemInfo=itemIterator.next();
- // Do something
-}
-```
-
-[iterator]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#iterator--
-[get-items-with-sort]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getChildren-java.lang.String-com.box.sdk.BoxFolder.SortDirection-java.lang.String...-
-
-Get a Folder's Information
---------------------------
-
-Calling [`getInfo()`][get-info] on a folder returns a snapshot of the folder's
-info.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-BoxFolder.Info info = folder.getInfo();
-```
-
-Requesting information for only the fields you need can improve performance and
-reduce the size of the network request. The [`getInfo(String... fields)`][get-info]
-method lets you specify which fields are retrieved.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-// Only get information about a few specific fields.
-BoxFolder.Info info = folder.getInfo("size", "owned_by");
-```
-
-[get-info]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getInfo-java.lang.String...-
-
-Update a Folder's Information
------------------------------
-
-Updating a folder's information is done by creating a new `BoxFolder.Info`
-object or updating an existing one, and then calling
-[`updateInfo(BoxFolder.Info fieldsToUpdate)`][update-info].
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-BoxFolder.Info info = folder.new Info();
-info.setName("New Name");
-folder.updateInfo(info);
-```
-
-[update-info]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#updateInfo-com.box.sdk.BoxFolder.Info-
-
-Create a Folder
----------------
-
-Create a child folder by calling [`createFolder(String folderName)`][create-folder]
-on the parent folder.
-
-
-```java
-BoxFolder parentFolder = new BoxFolder(api, "id");
-BoxFolder.Info childFolderInfo = parentFolder.createFolder("Child Folder Name");
-```
-
-[create-folder]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#createFolder-java.lang.String-
-
-Copy a Folder
--------------
-
-Call the [`copy(BoxFolder destination)`][copy] method to copy a folder to
-another folder.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id1");
-BoxFolder destination = new BoxFolder(api, "id2");
-folder.copy(destination);
-```
-
-You can also use the [`copy(BoxFolder destination, String newName)`][copy2] method to rename the
-folder while copying it. This allows you to make a copy of the folder in the
-same parent folder, but with a different name.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id1");
-BoxFolder.Info parentFolderInfo = folder.getInfo().getParent();
-BoxFolder parentFolder = parentFolderInfo.getResource();
-folder.copy(parentFolder, "New Name");
-```
-
-[copy]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#copy-com.box.sdk.BoxFolder-
-[copy2]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#copy-com.box.sdk.BoxFolder-java.lang.String-
-
-Move a Folder
--------------
-
-Call the [`move(BoxFolder destination)`][move] method with the destination you want the folder moved
-to.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id1");
-BoxFolder destination = new BoxFolder(api, "id2");
-folder.move(destination);
-```
-
-[move]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#move-com.box.sdk.BoxFolder-
-
-Rename a Folder
----------------
-
-Call the [`rename(String newName)`][rename] method with a new name for the folder.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-folder.rename("New Name");
-```
-
-A folder can also be renamed by updating the folder's information. This is
-useful if you want to perform more than one change to the folder in a single API
-request.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-BoxFolder.Info info = folder.new Info();
-info.setName("New Name");
-folder.updateInfo(info);
-```
-
-[rename]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#rename-java.lang.String-
-
-Delete a Folder
----------------
-
-A folder can be deleted with the [`delete(boolean recursive)`][delete] method. Passing
-`true` to this method indicates that the folder and its contents should be
-recursively deleted.
-
-
-```java
-// Delete the folder and all its contents
-BoxFolder folder = new BoxFolder(api, "id");
-folder.delete(true);
-```
-
-[delete]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#delete-boolean-
-
-Find Folder for Shared Link
--------------------------
-
-To get the folder information for a shared link, you can call
-[`BoxItem.getSharedItem(BoxAPIConnection api, String sharedLink)`][get-shared-item]
-with the shared link to get information about the folder behind it.
-
-```java
-String sharedLink = "https://app.box.com/s/abcdefghijklmnopqrstuvwxyz123456";
-BoxItem.Info itemInfo = BoxItem.getSharedItem(api, sharedLink);
-```
-
-If the shared link is password-protected, call
-[`BoxItem.getSharedItem(BoxAPIConnection api, String sharedLink, String password)`][get-shared-item-password]
-with the shared link and password.
-
-
-```java
-String sharedLink = "https://app.box.com/s/abcdefghijklmnopqrstuvwxyz123456";
-String password = "letmein";
-BoxItem.Info itemInfo = BoxItem.getSharedItem(api, sharedLink, password);
-```
-
-[get-shared-item]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.html#getSharedItem-com.box.sdk.BoxAPIConnection-java.lang.String-
-[get-shared-item-password]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.html#getSharedItem-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-
-
-Create a Shared Link
---------------------
-
-A shared link for a folder can be generated by calling
-[`createSharedLink(BoxSharedLinkRequest sharedLinkRequest)`][create-shared-link].
-
-
-```java
-// Optionally we can calculate and set the date when shared link will automatically be disabled
-final long ONE_WEEK_MILLIS = 1000 * 60 * 60 * 24 * 7;
-long unsharedTimestamp = System.currentTimeMillis() + ONE_WEEK_MILLIS;
-Date unsharedDate = new Date(unsharedTimestamp);
-
-BoxFolder folder = new BoxFolder(api, "id");
-BoxSharedLinkRequest sharedLinkRequest = new BoxSharedLinkRequest()
- .access(OPEN)
- .permissions(true, true)
- .unsharedDate(unsharedDate);
-BoxSharedLink sharedLink = folder.createSharedLink(sharedLinkRequest);
-```
-
-A set of shared link access level constants are available through the SDK for convenience:
-* `BoxSharedLink.Access.OPEN`
-* `BoxSharedLink.Access.COLLABORATORS`
-* `BoxSharedLink.Access.COMPANY`
-* `BoxSharedLink.Access.DEFAULT`
-
-[create-shared-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#createSharedLink-com.box.sdk.sharedlink.BoxSharedLinkRequest-
-
-Get a Shared Link
------------------
-
-Retrieve the shared link for a folder by calling
-[`getSharedLink()`][get-shared-link].
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-BoxFolder.Info info = folder.getInfo()
-BoxSharedLink link = info.getSharedLink()
-String url = link.getUrl()
-```
-
-[get-shared-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.Info.html#getSharedLink--
-
-Update a Shared Link
---------------------
-
-A shared link for a folder can be updated by calling the same method as used when creating a shared link,
-[`createSharedLink(BoxSharedLinkRequest sharedLinkRequest)`][create-shared-link].
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-BoxSharedLinkRequest sharedLinkRequest = new BoxSharedLinkRequest()
- .access(OPEN)
- .permissions(true, true);
-
-BoxSharedLink sharedLink = folder.createSharedLink(sharedLinkRequest);
-```
-
-Remove a Shared Link
---------------------
-
-A shared link for a folder can be removed by calling [`removeSharedLink()`][remove-shared-link].
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "12345");
-BoxFolder.Info info = folder.getInfo();
-info.removeSharedLink();
-folder.updateInfo(info);
-```
-
-[remove-shared-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#removeSharedLink--
-
-Share a Folder
---------------
-
-You can invite another person to collaborate on a folder with the
-[`collaborate(String emailAddress, BoxCollaboration.Role role)`][collaborate] method.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-BoxCollaboration.Info collabInfo = folder.collaborate("gcurtis@box.com",
- BoxCollaboration.Role.EDITOR);
-```
-
-If you already know the user's ID, you can invite them directly without needing
-to know their email address with the
-[`collaborate(BoxCollaborator user, BoxCollaboration.Role role)`][collaborate2] method.
-
-```java
-BoxUser collaborator = new User(api, "user-id");
-BoxFolder folder = new BoxFolder(api, "folder-id");
-BoxCollaboration.Info collabInfo = folder.collaborate(collaborator,
- BoxCollaboration.Role.EDITOR);
-```
-
-You can also create a collaboration with all properties set at once by using the
-[`collaborate(BoxCollaborator user, BoxCollaboration.Role role, Boolean notify, Boolean canViewPath, Date expiresAt, Boolean isAccessOnly)`][collaborate3] method.
-
-The `notify` parameter will determine if the user or group will receive an
-email notification when being added as a collaborator. This option is only
-available to enterprise administrators.
-
-The `canViewPath` parameter allows the invitee to see the entire list of ancestor
-folders of the associated file. The user will not gain privileges in any ancestor
-folder, but will be able to see the whole path to that file in the owner's account.
-
-The `expiresAt` parameter allows the owner to set a date-time in the future when
-the collaboration should expire.
-
-The `isAccessOnly` parameter allows the owner to set the collaboration to be
-access only collaboration.
-
-The `notify`, `canViewPath`, `expiresAt` and `isAccessOnly` parameters can be left as `null`.
-
-[collaborate]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#collaborate-java.lang.String-com.box.sdk.BoxCollaboration.Role-
-[collaborate2]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#collaborate-com.box.sdk.BoxCollaborator-com.box.sdk.BoxCollaboration.Role-
-[collaborate3]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#collaborate-com.box.sdk.BoxCollaborator-com.box.sdk.BoxCollaboration.Role-java.lang.Boolean-java.lang.Boolean-java.util.Date-java.lang.Boolean-
-
-Get All Collaborations for a Folder
------------------------------------
-
-The [`getCollaborations()`][get-collaborations] method will return a collection
-of `BoxCollaboration.Info` objects for a folder.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-Collection collaborations = folder.getCollaborations();
-```
-
-[get-collaborations]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getCollaborations--
-
-Create Metadata
----------------
-
-Metadata can be created on a folder by calling
-[`createMetadata(Metadata metadata)`][create-metadata],
-[`createMetadata(String templateName, Metadata metadata)`][create-metadata-2], or
-[`createMetadata(String templateName, String scope, Metadata metadata)`][create-metadata-3]
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-folder.createMetadata(new Metadata().add("/foo", "bar"));
-```
-
-Note: This method will only succeed if the provided metadata template is not currently applied to the folder, otherwise
-it will fail with a Conflict error. To get to know how to edit existing metadata please
-go to [set metadata](#set-metadata) and [update metadata](#update-metadata) sections.
-
-[create-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#createMetadata-com.box.sdk.Metadata-
-[create-metadata-2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#createMetadata-java.lang.String-com.box.sdk.Metadata-
-[create-metadata-3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#createMetadata-java.lang.String-java.lang.String-com.box.sdk.Metadata-
-
-Set Metadata
-------------
-
-To set metadata on a folder, call [`setMetadata(String templateName, String scope, Metadata metadata)`][set-metadata].
-This method will try to create provided metadata on a folder. However, if metadata has already been applied to this folder,
-it will overwrite values of metadata keys specified in the `metadata` parameter. The metadata keys not specified in
-the `metadata` parameter will remain unchanged.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-folder.setMetadata("test_template", "enterprise", new Metadata().add("/foo", "bar"));
-```
-
-Note: If you want to set new metadata on a folder including hard reset of the current metadata
-(also removing keys not specified in the `metadata` param):
-first delete metadata as specified in [delete metadata](#delete-metadata) section and then set new metadata again.
-
-[set-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#setMetadata-java.lang.String-java.lang.String-com.box.sdk.Metadata-
-
-Get Metadata
-------------
-
-Retrieve a folder's metadata by calling [`getMetadata()`][get-metadata],
-[`getMetadata(String templateName)`][get-metadata-2], or
-[`getMetadata(String templateName, String scope)`][get-metadata-3].
-These methods return a [`Metadata`][metadata] object, which allows access to metadata values.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-Metadata metadata = folder.getMetadata();
-
-// Unknown type metadata field, you can test for type or try to get as any type
-JsonValue unknownValue = metadata.getValue("/someField");
-
-// String or Enum metadata fields
-String stringValue = metadata.getString("/author");
-
-// Float metadata fields can be interpreted as any numeric type
-float floatValue = metadata.getFloat("/price");
-
-// Date metadata fields
-Date dateValue = metadata.getDate("/deadline");
-```
-
-[metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/Metadata.html
-[get-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getMetadata--
-[get-metadata-2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getMetadata-java.lang.String-
-[get-metadata-3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getMetadata-java.lang.String-java.lang.String-
-
-Update Metadata
----------------
-
-Update a folder's metadata by calling [`updateMetadata(Metadata properties)`][update-metadata].
-
-Note: This method will only succeed if the provided metadata template has already been applied to the folder. If the folder
-does not have existing metadata, this method will fail with a Not Found error. This is useful in cases where you know
-the folder will already have metadata applied, since it will save an API call compared to `setMetadata()`.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-folder.updateMetadata(new Metadata().add("/foo", "bar"));
-```
-
-Also, it is possible to add multi-select fields for your folder metadata by calling
-[`updateMetadata(Metadata properties)`][update-metadata] with a list of values.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-List valueList = new ArrayList();
-valueList.add("bar");
-valueList.add("qux");
-folder.updateMetadata(new Metadata().add("/foo", valueList));
-```
-
-If you wanted to replace all selected fields for a specified key you can use the
-[`replace(String key, List values)`][replace-metadata].
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-List valueList = new ArrayList();
-valueList.add("bar");
-valueList.add("qux");
-folder.updateMetadata(new Metadata().replace("/foo", valueList));
-```
-
-[update-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#updateMetadata-com.box.sdk.Metadata-
-[replace-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/Metadata.html#replace-java.lang.String-java.util.List-
-
-Delete Metadata
----------------
-
-A folder's metadata can be deleted by calling
-[`deleteMetadata()`][delete-metadata],
-[`deleteMetadata(String templateName)`][delete-metadata-2], or
-[`deleteMetadata(String templateName, String scope)`][delete-metadata-3].
-
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-folder.deleteMetadata("myMetadataTemplate");
-```
-
-[delete-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#deleteMetadata--
-[delete-metadata-2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#deleteMetadata-java.lang.String-
-[delete-metadata-3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#deleteMetadata-java.lang.String-java.lang.String-
-
-Get All Metadata on Folder
--------------------------
-
-[`getAllMetadata()`][get-all-metadata] method will return an iterable that will page through all of the metadata associated with the folder.
-
-
-```java
-BoxFolder file = new BoxFolder(api, "id");
-Iterable metadataList = folder.getAllMetadata();
-for (Metadata metadata : metadataList) {
- // Do something with the metadata.
-}
-```
-
-[get-all-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getAllMetadata-java.lang.String...-
-
-Get Metadata for Multiple Files
--------------------------------
-
-When fetching a large number of items, for example the items in a folder, it would
-often be impractical to fetch the metadata for each of those items individually.
-Instead, you can get the metadata for all of the items in a single API call by
-requesting the `metadata` field on those items:
-
-> __Note:__ The field name should have the form `metadata..`
-
-```java
-BoxFolder root = BoxFolder.getRootFolder();
-Iterable itemsInFolder = root.getChildren("metadata.global.properties")
-for (BoxItem.Info itemInfo : itemsInFolder) {
- if (itemInfo instanceof BoxFile.Info) {
- BoxFile.Info fileInfo = (BoxFile.Info) itemInfo;
- Metadata itemMetadata = fileInfo.getMetadata("properties", "global");
- } else if (itemInfo instanceof BoxFolder.Info) {
- BoxFolder.Info folderInfo = (BoxFolder.Info) itemInfo;
- Metadata itemMetadata = folderInfo.getMetadata("properties", "global");
- }
-}
-```
-
-Set Classification on Folder
-----------------------------
-
-Calling the [`setClassification(String classificationType)`][set-classification] method on a folder will add a
-classification template on the folder. This method will return the classification type applied on the folder. The
-classification types include `Public`, `Internal`, and `Confidential`. `Public` being the most available permission,
-`Internal` which restricts the specified file to company and collaborators only, and finally, `Confidential`, which
-is for collaborators only.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-String classificationType = folder.setClassification("Public");
-```
-
-It is important to note that this call will attempt to create a classification on the folder first, if one already
-exists then it will do the update. If you already know that a classification exists on the folder and would like to save
-an API call, we encourage you to use the [`updateClassification(String classificationType)`][update-classification]
-method.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-String classificationType = folder.updateClassification("Public");
-```
-
-[set-classification]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#setClassification-java.lang.String...-
-[update-classification]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#updateClassification-java.lang.String...-
-
-Get Classification on Folder
-----------------------------
-
-To retrieve the classification assigned on the folder, use the [`getClassification()`][get-classification] method. This
-will return the classification type on the folder.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-String classificationType = folder.getClassification();
-```
-
-[get-classification]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getClassification-java.lang.String...-
-
-Remove Classification on Folder
--------------------------------
-
-To remove classification from the folder, use the [`deleteClassification()`][delete-classification] method.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-folder.deleteClassification();
-```
-
-[delete-classification]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#deleteClassification--
-
-Create Cascade Policy On Folder
--------------------------------
-
-To set a metadata policy, which applies metadata values on a folder to new items in the folder, call
-[`BoxFolder.addMetadataCascadePolicy(String scope, String template)`][create-cascade-policy-on-folder].
-
-```java
-String scope = "global";
-String templateKey = "template";
-String folderId = "12345";
-BoxFolder folder = new BoxFolder(api, folderId);
-BoxMetadataCascadePolicy.Info cascadePolicyInfo = folder.addMetadataCascadePolicy(scope, template);
-```
-
-[create-cascade-policy-on-folder]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#addMetadataCascadePolicy-java.lang.String-java.lang.String-
-
-Get a Cascade Policy's Information
-----------------------------------
-
-To retrieve information about a specific metadata cascade policy, call
-[`getInfo()`][get-info]
-
-
-```java
-String cascadePolicyID = "1234";
-BoxMetadataCascadePolicy metadataCascadePolicy = new BoxMetadataCascadePolicy(api, cascadePolicyID);
-BoxMetadataCascadePolicy.Info metadataCascadePolicyInfo = metadataCascadePolicy.getInfo();
-```
-
-[get-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxMetadataCascadePolicy.html#getInfo--
-
-Get All Cascade Policies on Folder
-----------------------------------
-
-To get a list of all cascade policies on a folder, which show the metadata templates that are being applied to all
-items in the folder, call [`getMetadataCascadePolicies()`][get-all] on that folder.
-
-
-```java
-String folderID = "2222";
-BoxFolder folder = new BoxFolder(api, folderID);
-Iterable metadataCascadePolicies = folder.getMetadataCascadePolicies();
-for (BoxMetadataCascadePolicy.Info policyInfo : metadataCascadePolicies) {
- // take action on policy here
-}
-```
-
-You can also call [`getMetadataCascadePolicies(String enterpriseID, int limit, String... fields)`][get-all-with-limit]
-and set the `enterpriseID` option to retrieve metadata cascade policies from another enterprise.
-
-```java
-String folderID = "2222";
-String enterpriseID = "3333";
-int limit = 50;
-BoxFolder folder = new BoxFolder(api, folderID);
-Iterable metadataCascadePolicies = folder.getMetadataCascadePolicies(enterpriseID, limit);
-for (BoxMetadataCascadePolicy.Info policyInfo : metadataCascadePolicies) {
- // take action on policy here
-}
-```
-
-[get-all]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getMetadataCascadePolicies--
-[get-all-with-limit]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getMetadataCascadePolicies-java.lang.String-int-
-
-Force Apply Cascade Policy on Folder
-------------------------------------
-
-To force apply a metadata template policy and apply metadata values to all existing items in an affected folder, call
-[`forceApply(String conflictResolution)`][force-apply] with the conflict resolution method for dealing with items that already have a metadata value that conflicts with the folder. Specifying a resolution value of `none` will preserve the existing values on items, and specifying `overwrite` will overwrite values on items in the folder with the metadata value from the folder.
-
-
-```java
-String cascadePolicyID = "e4392a41-7de5-4232-bdf7-15e0d6bba067";
-BoxMetadataCascadePolicy policy = new BoxMetadataCascadePolicy(api, cascadePolicyID);
-policy.forceApply("none");
-```
-
-[force-apply]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxMetadataCascadePolicy.html#forceApply-java.lang.String-
-
-Delete Cascade Policy
----------------------
-
-To remove a cascade policy and stop applying metadata from a folder to items in the folder,
-call [`delete()`][delete-cascade-policy].
-
-
-```java
-String cascadePolicyID = "e4392a41-7de5-4232-bdf7-15e0d6bba067";
-BoxMetadataCascadePolicy policyToDelete = new BoxMetadataCascadePolicy(api, cascadePolicyID);
-policyToDelete.delete();
-```
-
-[delete-cascade-policy]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxMetadataCascadePolicy.html#delete--
-
-Lock a Folder
------------------------------
-
-To lock a folder and prevent it from being moved and/or deleted, call [`lock()`][lock] on a folder.
-
-```java
-BoxFolder folder = new BoxFolder(api, "id");
-FolderLock.Info folderLock = folder.lock();
-```
-
-[lock]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#lock--
-
-Get All Locks on a Folder
------------------------------
-
-To get all locks on a folder, call [`getlock()`][get-locks] on folder.
-
-```java
-BoxFolder folder = new BoxFolder(this.api, "id");
-Iterable locks = folder.getLocks();
-for (BoxFolderLock.Info lockInfo : locks) {
- // Do something with each lockInfo here
-}
-```
-
-[get-locks]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getLocks--
-
-Delete a Lock on a Folder
------------------------------
-
-To delete a lock on a folder, call [`delete()`][delete-lock] on a BoxFolderLock object. This cannot be called on a BoxFolder object.
-
-```java
-BoxFolderLock folderLock = new BoxFolderLock(this.api, "folderLockID");
-folderLock.delete();
-```
-
-[delete-lock]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolderLock.html#delete--
diff --git a/doc/groups.md b/doc/groups.md
deleted file mode 100644
index 7d5113e20..000000000
--- a/doc/groups.md
+++ /dev/null
@@ -1,218 +0,0 @@
-Groups
-======
-
-Groups are sets of users that can be used in collaborations.
-
-
-
-
-
-- [Get All Groups](#get-all-groups)
-- [Create a Group](#create-a-group)
-- [Get Information About a Group](#get-information-about-a-group)
-- [Update a Group](#update-a-group)
-- [Delete a Group](#delete-a-group)
-- [Get first page of a Group's Collaborations](#get-a-groups-collaborations)
-- [Get all of a Group's Collaborations](#get-all-a-groups-collaborations)
-- [Create Membership](#create-membership)
-- [Get Membership](#get-membership)
-- [Update Membership](#update-membership)
-- [Delete Membership](#delete-membership)
-- [Get Memberships for Group](#get-memberships-for-group)
-- [Get Memberships for User](#get-memberships-for-user)
-
-
-
-Get All Groups
---------------
-
-Calling the static [`getAllGroups(BoxAPIConnection api)`][get-all-groups] will
-return an iterable that will page through all of the user's groups.
-
-
-```java
-Iterable groups = BoxGroup.getAllGroups(api);
-for (BoxGroup.Info groupInfo : groups) {
- // Do something with the group.
-}
-```
-
-[get-all-groups]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#getAllGroups-com.box.sdk.BoxAPIConnection-
-
-Create a Group
---------------
-
-The static [`createGroup(BoxAPIConnection api, String name)`][create-group] method will
-let you create a new group with a specified name.
-
-
-```java
-BoxGroup.Info groupInfo = BoxGroup.createGroup(api, "My Group");
-```
-
-[create-group]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#createGroup-com.box.sdk.BoxAPIConnection-java.lang.String-
-
-Get Information About a Group
------------------------------
-
-To look up the information about a group by the group's ID, instantiate the [`BoxGroup`][group-object]
-object with the group ID and then call [`getInfo()`][get-info-fields] on the group. You can optionally call
-[`getInfo(String... fields)`][get-info-fields] to specify the list of fields to retrieve for the group,
-which can result in reduced payload size.
-
-
-```java
-String groupID = "92875";
-BoxGroup.Info groupInfo = new BoxGroup(api, groupID).getInfo();
-```
-
-[group-object]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html
-[get-info-fields]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#getInfo-java.lang.String...-
-
-Update a Group
---------------
-
-To update a group, call [`updateInfo(BoxGroup.Info fieldsToUpdate)`][update-group] method.
-
-
-```java
-BoxGroup group = new BoxGroup(api, id);
-BoxGroup.Info groupInfo = group.getInfo();
-groupInfo.setName("New name for My Group");
-group.updateInfo(groupInfo);
-```
-
-[update-group]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#updateInfo-com.box.sdk.BoxGroup.Info-
-
-
-Delete a Group
---------------
-
-A group can be deleted by calling the [`delete()`][delete] method.
-
-
-```java
-BoxGroup group = new BoxGroup(api, "id");
-group.delete();
-```
-
-[delete]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#delete--
-
-Get first page of a Group's Collaborations
----------------------------
-
-The first page of a group's collaborations can be retrieved by calling the [`getCollaborations()`][get-collaborations] method.
-
-
-```java
-BoxGroup group = new BoxGroup(api, "id");
-Collection collaborations = group.getCollaborations();
-```
-
-[get-collaborations]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#getCollaborations--
-
-Get all of a Group's Collaborations
----------------------------
-
-All of a group's collaborations can be retrieved by calling the [`getAllCollaborations(String... fields)`][get-all-collaborations] method.
-An iterable is returned to allow a user to iterate until the last collaboration.
-
-```java
-BoxGroup group = new BoxGroup(api, "id");
-Iterable collaborations = group.getAllCollaborations();
-```
-
-[get-all-collaborations]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#getAllCollaborations--
-
-Create Membership
----------------
-
-Membership for the group can be created by calling the
-[`addMembership(BoxUser user)`][add-membership] and
-[`addMembership(BoxUser user, BoxGroupMembership.GroupRole role)`][add-membership2] methods.
-
-
-```java
-BoxGroup group = new BoxGroup(api, "groupID");
-BoxUser user = new BoxUser(api, "userID");
-BoxGroupMembership.Info groupMembershipInfo = group.addMembership(user);
-```
-
-[add-membership]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#addMembership-com.box.sdk.BoxUser-
-[add-membership2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#addMembership-com.box.sdk.BoxUser-com.box.sdk.BoxGroupMembership.GroupRole-
-
-Get Membership
----------------
-
-A groups membership can be retrieved by calling the [`BoxGroupMembership.getInfo()`][get-membership] method.
-
-
-```java
-BoxGroupMembership membership = new BoxGroupMembership(api, id);
-BoxGroupMembership.Info groupMembershipInfo = membership.getInfo();
-```
-
-[get-membership]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroupMembership.html#getInfo--
-
-Update Membership
----------------
-
-A groups membership can be updated by calling the
-[`BoxGroupMembership.updateInfo(BoxGroupMembership.Info fieldsToUpdate)`][update-membership] method.
-
-
-```java
-BoxGroupMembership membership = new BoxGroupMembership(api, id);
-BoxGroupMembership.Info info = membership.new Info();
-info.setGroupRole(BoxGroupMembership.GroupRole.MEMBER);
-membership.updateInfo(info);
-```
-
-[update-membership]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroupMembership.html#updateInfo-com.box.sdk.BoxGroupMembership.Info-
-
-Delete Membership
----------------
-
-A group can be deleted by calling the [`BoxGroupMembership.delete()`][delete-membership] method.
-
-
-```java
-BoxGroupMembership membership = new BoxGroupMembership(api, id);
-membership.delete();
-```
-
-[delete-membership]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroupMembership.html#delete--
-
-Get Memberships for Group
----------------
-
-Calling the [`getAllMemberships(String... fields)`][get-memberships-for-group] will return an iterable that will page through all of the group's memberships.
-Optional parameters can be used to retrieve specific fields of the Group Membership object.
-
-
-```java
-BoxGroup group = new BoxGroup(api, id);
-Iterable memberships = group.getAllMemberships();
-for (BoxGroupMembership.Info membershipInfo : memberships) {
- // Do something with the membership.
-}
-```
-
-[get-memberships-for-group]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxGroup.html#getAllMemberships-java.lang.String...-
-
-Get Memberships for User
----------------
-
-Calling the [`BoxUser.getAllMemberships(String... fields)`][get-memberships-for-user] will return an iterable that will page through all of the user's memberships.
-Optional parameters can be used to retrieve specific fields of the Group Membership object.
-
-
-```java
-BoxUser user = new BoxUser(api, id);
-Iterable memberships = user.getAllMemberships();
-for (BoxGroupMembership.Info membershipInfo : memberships) {
- // Do something with the membership.
-}
-```
-
-[get-memberships-for-user]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAllMemberships-java.lang.String...-
diff --git a/doc/legal_holds.md b/doc/legal_holds.md
deleted file mode 100644
index 189df8981..000000000
--- a/doc/legal_holds.md
+++ /dev/null
@@ -1,206 +0,0 @@
-Legal Holds Policy
-==================
-
-Legal Hold Policy information describes the basic characteristics of the Policy,
-such as name, description, and filter dates.
-
-
-
-
-
-- [Get Legal Hold Policy](#get-legal-hold-policy)
-- [Get List of Legal Hold Policies](#get-list-of-legal-hold-policies)
-- [Create New Legal Hold Policy](#create-new-legal-hold-policy)
-- [Update Existing Legal Hold Policy](#update-existing-legal-hold-policy)
-- [Delete Legal Hold Policy](#delete-legal-hold-policy)
-- [Get Assignment](#get-assignment)
-- [Get List of Assignments](#get-list-of-assignments)
-- [Create New Assignment](#create-new-assignment)
-- [Delete Assignment](#delete-assignment)
-- [Get File Version Legal Hold](#get-file-version-legal-hold)
-- [Get List of File Version Legal Holds](#get-list-of-file-version-legal-holds)
-
-
-
-Get Legal Hold Policy
----------------------
-
-Calling [`getInfo(String...)`][get-info] will return a BoxLegalHoldPolicy.Info object
-containing information about the legal hold policy. If necessary to retrieve
-limited set of fields, it is possible to specify them using param.
-
-
-```java
-BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, id);
-BoxLegalHoldPolicy.Info policyInfo = policy.getInfo();
-```
-
-[get-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#getInfo-java.lang.String...-
-
-Get List of Legal Hold Policies
--------------------------------
-
-Calling the static [`getAll(BoxAPIConnection)`][get-list-of-legal-hold-policies]
-will return an iterable that will page through all of the legal hold policies.
-It is possible to specify name of legal hold policy, maximum number of items per
-response and fields to retrieve by calling the static
-[`getAll(BoxAPIConnection, String, int, String...)`][get-list-of-legal-hold-policies-with-fields] method.
-
-
-```java
-Iterable policies = BoxLegalHoldPolicy.getAll(api);
-for (BoxLegalHoldPolicy.Info policyInfo : policies) {
- // Do something with the legal hold policy.
-}
-```
-
-[get-list-of-legal-hold-policies]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#getAll-com.box.sdk.BoxAPIConnection-
-[get-list-of-legal-hold-policies-with-fields]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#getAll-com.box.sdk.BoxAPIConnection-java.lang.String-int-java.lang.String...-
-
-Create New Legal Hold Policy
-----------------------------
-
-The static [`create(BoxAPIConnection api, String name, String description, Date startDate, Date endDate)`][create-new-legal-hold-policy-with-dates]
-method will let you create a new legal hold policy with a specified name, description, start and end dates.
-
-
-```java
-BoxLegalHoldPolicy.Info policyInfo = BoxLegalHoldPolicy.create(api, name, description, startedAt, endedAt);
-```
-
-If you wish to create an ongoing Legal Hold Policy with no end date and a description, call [`createOngoing(BoxAPIConnection api, String name, String description)`][create-ongoing].
-
-```java
-BoxLegalHoldPolicy.Info policyInfo = BoxLegalHoldPolicy.createOngoing(api, name, description);
-```
-
-[create-new-legal-hold-policy]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#create-com.box.sdk.BoxAPIConnection-java.lang.String-
-[create-new-legal-hold-policy-with-dates]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#create-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-java.util.Date-java.util.Date-
-[create-ongoing]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#createOngoing-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-
-
-Update Existing Legal Hold Policy
----------------------------------
-
-Updating a legal hold policy's information is done by calling
-[`updateInfo(BoxLegalHoldPolicy.Info fieldsToUpdate)`][update-info].
-
-
-```java
-BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, id);
-BoxLegalHoldPolicy.Info policyInfo = policy.new Info();
-info.setDescription("new description");
-info.setPolicyName("new policy name");
-policy.updateInfo(info);
-```
-
-[update-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#updateInfo-com.box.sdk.BoxLegalHoldPolicy.Info-
-
-Delete Legal Hold Policy
-------------------------
-
-A legal hold policy can be deleted by calling the [`delete()`][delete] method.
-
-
-```java
-BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, id);
-policy.delete();
-```
-
-[delete]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#delete--
-
-Get Assignment
---------------
-
-Calling [`getInfo(String... fields)`][get-assignment] will return a BoxLegalHoldAssignment.Info
-object containing information about the legal hold policy assignment.
-
-
-```java
-BoxLegalHoldAssignment assignment = new BoxLegalHoldAssignment(api, id);
-BoxLegalHoldAssignment.Info info = assignment.getInfo("assigned_by");
-```
-
-[get-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldAssignment.html#getInfo-java.lang.String...-
-
-Get List of Assignments
---------------
-
-Calling the static [`getAssignments(String... fields)`][get-list-of-assignments] will return
-an iterable that will page through all of the assignments of the legal hold policy.
-It is possible to specify filters for type and id, maximum number of items per single
-response and fields to retrieve by calling
-[`getAssignments(String type, String id, int limit, String... fields)`][get-list-of-assignments-with-params].
-
-
-```java
-BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, id);
-Iterable assignments = policy.getAssignments(BoxResource.getResourceType(BoxFolder.class), null, 50, "assigned_at");
-for (BoxLegalHoldAssignment.Info assignmentInfo : assignments) {
- // Do something with the legal hold policy assignment.
-}
-```
-
-[get-list-of-assignments]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#getAssignments-java.lang.String...-
-[get-list-of-assignments-with-params]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#getAssignments-java.lang.String-java.lang.String-int-java.lang.String...-
-
-Create New Assignment
----------------------
-
-To create new legal hold policy assignment call [`assignTo(BoxResource target)`][create-assignment] method.
-Currently only BoxFile, BoxFileVersion, BoxFolder and BoxUser objects are supported as a parameter.
-
-
-```java
-BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, policyID);
-BoxFolder folder = new BoxFolder(api, folderID);
-policy.assignTo(folder);
-```
-
-[create-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#assignTo-com.box.sdk.BoxResource-
-
-Delete Assignment
---------------
-
-A legal hold policy assignment can be deleted by calling the [`delete()`][delete-assignment] method
-of BoxLegalHoldAssignment object.
-
-
-```java
-BoxLegalHoldAssignment assignment = new BoxLegalHoldAssignment(api, id);
-assignment.delete();
-```
-
-[delete-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldAssignment.html#delete--
-
-Get File Version Legal Hold
---------------
-
-Calling [`getInfo(String... fields)`][get-file-version-legal-hold] will return
-a BoxFileVersionLegalHold.Info object containing information about the file version legal hold policy.
-
-
-```java
-BoxFileVersionLegalHold hold = new BoxFileVersionLegalHold(api, id);
-hold.getInfo("file");
-```
-
-[get-file-version-legal-hold]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersionLegalHold.html#getInfo-java.lang.String...-
-
-Get List of File Version Legal Holds
---------------
-To get an iterable with all non-deleted file version legal holds for current
-legal hold policy, call [`getFileVersionHolds(String... fields)`][get-lest-of-file-version-legal-holds].
-It is possible to specify maximum number of items per single response by calling
-[`getFileVersionHolds(int limit, String... fields)`][get-lest-of-file-version-legal-holds-with-limit].
-
-
-```java
-BoxLegalHoldPolicy policy = new BoxLegalHoldPolicy(api, id);
-Iterable fileVersionHolds = policy.getFileVersionHolds();
-for (BoxFileVersionLegalHold.Info fileVersionHold : fileVersionHolds) {
- // Do something with the file version legal hold.
-}
-```
-
-[get-lest-of-file-version-legal-holds]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#getFileVersionHolds-java.lang.String...-
-[get-lest-of-file-version-legal-holds-with-limit]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxLegalHoldPolicy.html#getFileVersionHolds-int-java.lang.String...-
diff --git a/doc/logging.md b/doc/logging.md
deleted file mode 100644
index 30f39a10f..000000000
--- a/doc/logging.md
+++ /dev/null
@@ -1,101 +0,0 @@
-# Logging in SDK
-
-We are using `Java Util Logging` within Box Java SDK. You can read about details of this
-approach [here](https://docs.oracle.com/javase/8/docs/technotes/guides/logging/overview.html).
-
-## Logging Levels
-
-We are using only few of the logging levels:
-
-- `FINE` - when logging debugging information, like success responses,
-- `WARNING` - when API returned 4xx response code,
-- `SEVERE` - when API returned 5XX response code.
-
-By default, the `Java Util Logging` prints to console output only messages that are logged at least at `INFO` level. You
-can limit what is being logged by setting desired level on `com.box.sdk` logger like this:
-
-```java
-import com.box.sdk.BoxLogger;
-
-BoxLogger.defaultLogger().setLevelToError();
-```
-
-Example above will limit printed logs to `SEVERE` level only.
-
-### Getting FINE (ALL) logs printed
-
-By default `FINE` level logs are not printed to the console. There are several ways to do that.
-One way is to define custom handler:
-
-```java
-import java.util.logging.ConsoleHandler;
-import java.util.logging.Handler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-Logger sdkLogger = BoxLogger.defaultLogger();
-Handler systemOut = new ConsoleHandler();
-// this handler will print any message to System.out
-systemOut.setLevel(Level.ALL);
-sdkLogger.addHandler(systemOut);
-// allow sdk logger to print FINE logs
-sdkLogger.setLevelToAll();
-// prevent logs from being processed by default Console handler
-sdkLogger.setUseParentHandlers(false);
-```
-
-you can do this in your aplication initialization.
-
-### Turn logging off
-
-To disable logging use `BoxLogger.defaultLogger().turnLoggingOff()`.
-
-### Reset to default logging level
-
-To reset to default logging level use `BoxLogger.defaultLogger().resetToDefaultLevel()`.
-
-
-## Putting SDK logs into application logs
-
-If you are using different logging solution like Log4J2 or Logstash you can use SLF4J and proper bridgge to get your
-logs into desired solution. Below is an example of adding SDK logs into Logstash. First you will need to add
-SLF4j and Logstash binaries:
-
-```groovy
-implementation 'org.slf4j:jul-to-slf4j:1.7.32' // bridge from Java Util Logging to SLF4J API
-implementation 'org.slf4j:slf4j-api:1.7.32' // define SLF4J API
-implementation 'ch.qos.logback:logback-core:1.2.7' // use the Logback logging framework
-implementation 'ch.qos.logback:logback-classic:1.2.7' // get bindings between SLF4J and Logback
-```
-
-Now when initializing application you will need to make Java Util Logging to use SLF4J. This sample is based on
-description provided [here](http://www.slf4j.org/api/org/slf4j/bridge/SLF4JBridgeHandler.html):
-
-```java
-import org.slf4j.bridge.SLF4JBridgeHandler;
-
-// Remove existing handlers attached to JUL root logger
-SLF4JBridgeHandler.removeHandlersForRootLogger();
-// add SLF4JBridgeHandler to JUL's root logger
-SLF4JBridgeHandler.install();
-```
-
-Now all logs generated by SDK will be captured by Logback. If you want to see debug logs from SDK you will need to add
-this configuration to your logback.xml file:
-
-```xml
-
-```
-
-Below is a list of log levels used by SDK and coresponding Logback levels:
-
-| SDK | Logback |
-:------:|:-------:
-| ALL | ALL |
-| OFF | OFF |
-| FINE | DEBUG |
-| INFO | INFO |
-| WARN | WARN |
-| SEVERE | ERROR |
-
-You can read more on java Util Logging to SLF4J bridge [here](http://www.slf4j.org/legacy.html#jul-to-slf4j).
diff --git a/doc/metadata_template.md b/doc/metadata_template.md
deleted file mode 100644
index 42d0d49b4..000000000
--- a/doc/metadata_template.md
+++ /dev/null
@@ -1,189 +0,0 @@
-Metadata Templates
-==================
-
-Metadata that belongs to a file is grouped by templates. Templates allow the metadata service to provide a multitude of services, such as pre-defining sets of key:value pairs or schema enforcement on specific fields.
-
-
-
-
-
-- [Create Metadata Template](#create-metadata-template)
-- [Update Metadata Template](#update-metadata-template)
-- [Get Metadata Template](#get-metadata-template)
- - [Get by scope and template key](#get-by-scope-and-template-key)
- - [Get by ID](#get-by-id)
-- [Get Enterprise Metadata Templates](#get-enterprise-metadata-templates)
-- [Delete a Metadata Template](#delete-a-metadata-template)
-- [Execute Metadata Query](#execute-metadata-query)
-
-
-
-Create Metadata Template
-------------------------
-
-The [`createMetadataTemplate(BoxAPIConnection api, String templateScope, String templateKey, String displayName, Boolean hidden, List fields)`][create-metadata-template]
-method will create a metadata template schema.
-
-You can create custom metadata fields that will be associated with the metadata template.
-
-
-```java
-MetadataTemplate.Field metadataField = new MetadataTemplate.Field();
-metadataField.setType("string");
-metadataField.setKey("text");
-metadataField.setDisplayName("Text");
-
-List fields = new ArrayList();
-fields.add(metadataField);
-
-MetadataTemplate template = MetadataTemplate.createMetadataTemplate(api, "enterprise", "CustomField", "Custom Field", false, fields);
-
-final JsonObject jsonObject = new JsonObject();
-jsonObject.add("text", "This is a test text");
-
-Metadata metadata = new Metadata(jsonObject);
-boxFile.createMetadata("CustomField", metadata);
-```
-
-[create-metadata-template]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#createMetadataTemplate-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-java.lang.String-boolean-java.util.List-
-
-Update Metadata Template
-------------------------
-
-To update an existing metadata template, call the
-[`updateMetadataTemplate(BoxAPIConnection api, String scope, String template, List fieldOperations)`][update-metadata-template]
-method with the scope and key of the template, and the list of field operations to perform:
-
-
-```java
-List updates = new ArrayList();
-
-String addCategoryFieldJSON = "{\"op\":\"addField\","\"data\":{"
- + "\"displayName\":\"Category\",\"key\":\"category\",\"hidden\":false,\"type\":\"string\"}}";
-updates.add(new MetadataTemplate.FieldOperation(addCategoryFieldJSON));
-
-String changeTemplateNameJSON = "{\"op\":\"editTemplate\",\"data\":{"
- + "\"displayName\":\"My Metadata\"}}";
-updates.add(new MetadataTemplate.FieldOperation(changeTemplateNameJSON));
-
-MetadataTemplate.updateMetadataTemplate(api, "enterprise", "myData", updates);
-```
-
-[update-metadata-template]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#updateMetadataTemplate-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-java.util.List-
-
-Get Metadata Template
----------------------
-
-### Get by scope and template key
-
-The [`getMetadataTemplate(BoxAPIConnection api)`][get-metadata-template-1]
-method will return information about default metadata schema. Also,
-[`getMetadataTemplate(BoxAPIConnection api, String templateKey)`][get-metadata-template-2] and
-[`getMetadataTemplate(BoxAPIConnection api, String templateKey, String templateScope, String... fields)`][get-metadata-template-3]
-can be used to set metadata template name, metadata scope and fields to retrieve.
-
-
-```java
-MetadataTemplate template = MetadataTemplate.getMetadataTemplate(api, "templateName");
-```
-
-[get-metadata-template-1]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#getMetadataTemplate-com.box.sdk.BoxAPIConnection-
-[get-metadata-template-2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#getMetadataTemplate-com.box.sdk.BoxAPIConnection-java.lang.String-
-[get-metadata-template-3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#getMetadataTemplate-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-java.lang.String...-
-
-### Get by ID
-
-The static [`MetadataTemplate.getMetadataTemplateByID(BoxAPIConnection api, String templateID)`][get-template-by-id]
-method will return a specific metadata template.
-
-
-```java
-MetadataTemplate template = MetadataTemplate.getMetadataTemplateByID(api, "37c0204b-3fe1-4a32-b9da-f28e88f4c4c6");
-```
-
-[get-template-by-id]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#getMetadataTemplateByID-com.box.sdk.BoxAPIConnection-java.lang.String-
-
-Get Enterprise Metadata Templates
----------------------------------
-
-Calling the static
-[`getEnterpriseMetadataTemplates(BoxAPIConnection api, String... fields)`][get-enterprise-metadata-1]
-will return an iterable that will page through all metadata templates within a user's enterprise.
-Also, [`getEnterpriseMetadataTemplates(String templateScope, BoxAPIConnection api, String... fields)`][get-enterprise-metadata-2] and
-[`getEnterpriseMetadataTemplates(String templateScope, int limit, BoxAPIConnection api, String... fields)`][get-enterprise-metadata-3]
-can be used to set metadata scope, limit of items per single response.
-
-
-```java
-Iterable templates = MetadataTemplate.getEnterpriseMetadataTemplates(api);
-for (MetadataTemplate templateInfo : templates) {
- // Do something with the metadata template.
-}
-```
-
-To return the metadata templates available to all enterprises pass in the
-`global` scope.
-
-
-```java
-Iterable templates = MetadataTemplate.getEnterpriseMetadataTemplates('global', api);
-for (MetadataTemplate templateInfo : templates) {
- // Do something with the metadata template.
-}
-```
-
-[get-enterprise-metadata-1]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#getEnterpriseMetadataTemplates-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[get-enterprise-metadata-2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#getEnterpriseMetadataTemplates-java.lang.String-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[get-enterprise-metadata-3]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#getEnterpriseMetadataTemplates-java.lang.String-int-com.box.sdk.BoxAPIConnection-java.lang.String...-
-
-Delete a Metadata Template
---------------------------
-
-The [`deleteMetadataTemplate(BoxAPIConnection api, String scope, String template)`][delete-metadata-template]
-method will remove a metadata template schema from an enterprise.
-
-
-```java
-MetadataTemplate.deleteMetadataTemplate(api, "enterprise", "templateName");
-```
-
-[delete-metadata-template]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#deleteMetadataTemplate-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-
-
-Execute Metadata Query
---------------------------
-
-The [`executeMetadataQuery(BoxAPIConnection api, MetadataQuery queryBody)`][execute-metadata-query] method queries files and folders based on their metadata.
-
-
-```java
-String from = "enterprise_341532.test";
-String query = "testfield = :arg";
-String ancestorFolderId = "0";
-MetadataQuery.OrderBy primaryOrderBy = MetadataQuery.OrderBy.ascending("primarySortKey");
-MetadataQuery.OrderBy secondaryOrderBy = MetadataQuery.OrderBy.ascending("secondarySortKey");
-
-MetadataQuery mQuery = new MetadataQuery(from);
-mQuery.setQuery(query);
-mQuery.setAncestorFolderId(ancestorFolderId);
-mQuery.setOrderBy(primaryOrderBy, secondaryOrderBy);
-mQuery.addParameter("arg", "test");
-mQuery.setFields("metadata.enterprise_341532.test.customField");
-BoxResourceIterable results = MetadataTemplate.executeMetadataQuery(api, mQuery);
-
-for (BoxItem.Info r: results) {
- if (r instanceof BoxFile.Info) {
- BoxFile.Info fileInfo = (BoxFile.Info) r;
- Metadata fileMetadata = fileInfo.getMetadata("test", "enterprise_341532");
- String customFieldValue = fileMetadata.getString("/customField");
- System.out.println(customFieldValue);
- } else if (r instanceof BoxFolder.Info) {
- BoxFolder.Info folderInfo = (BoxFolder.Info) r;
- Metadata folderMetadata = folderInfo.getMetadata("test", "enterprise_341532");
- String customFieldValue = folderMetadata.getString("/customField");
- System.out.println(customFieldValue);
- }
-}
-
-```
-
-[execute-metadata-query]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/MetadataTemplate.html#executeMetadataQuery-com.box.sdk.BoxAPIConnection-com.box.sdk.MetadataQuery-
diff --git a/doc/overview.md b/doc/overview.md
deleted file mode 100644
index 50c6e3518..000000000
--- a/doc/overview.md
+++ /dev/null
@@ -1,193 +0,0 @@
-SDK Overview
-============
-
-This guide covers the basics behind the various components of the Box Java SDK.
-It's also recommended that you take a look at [the
-documentation](https://developers.box.com/docs/) for the Box API.
-
-* [Authentication](#authentication)
-* [Resource Types](#resource-types)
-* [Requests and Responses](#requests-and-responses)
-* [Error Handling](#error-handling)
-* [As-User](#as-user)
-* [Suppressing Notifications](#suppressing-notifications)
-
-Authentication
---------------
-
-The first step in using the SDK is always authenticating and connecting to the
-API. The SDK does this through the [`BoxAPIConnection`][box-api-connection] class.
-This class represents an authenticated connection to a specific version of the Box
-API. It is responsible for things such as:
-
-* Storing authentication information.
-* Automatically refreshing tokens.
-* Configuring rate-limiting, number of retry attempts and other connection
- settings.
-
-You can also create more than one `BoxAPIConnection`. For example, you can have
-a connection for each user if your application supports multiple user accounts.
-
-See the [Authentication guide](authentication.md) for details on how to create
-and use `BoxAPIConnection`.
-
-[box-api-connection]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html
-
-Resource Types
---------------
-
-Resources types are the classes you'll use the most. Things like `BoxFile`,
-`BoxFolder`, `BoxUser`, etc. are all resource types. A resource always has an ID
-and an associated API connection. Instantiating and using a resource type is
-simple:
-
-```java
-// Print the name of the folder with ID "1234".
-BoxFolder folder = new BoxFolder(api, "1234")
-BoxFolder.Info info = folder.getInfo();
-System.out.println(info.getName());
-```
-
-A resource type will always have the same API connection as the type that
-instantiated it. For example, `creator` will have the same API connection that
-`folder` does.
-
-```java
-BoxFolder folder = new BoxFolder(api, "1234")
-BoxFolder.Info info = folder.getInfo();
-
-// This BoxUser has the same BoxAPIConnection as "folder".
-BoxUser creator = info.getCreatedBy();
-```
-
-Requests and Responses
-----------------------
-
-All communication with Box's API is done through `BoxAPIRequest` and
-`BoxAPIResponse` (or their subclasses). These classes handle all the dirty work
-of setting appropriate headers, handling errors, and sending/receiving data.
-
-You generally won't need to use these classes directly, as the resource types
-are easier and cover most use-cases. However, these classes are extremely
-flexible and can be used if you need to make custom API calls.
-
-Here's an example using `BoxAPIRequest` and `BoxJSONResponse` that gets a list
-of items with some custom fields:
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("token");
-URL url = new URL("https://api.box.com/2.0/folders/0/items?fields=name,created_at")
-BoxAPIRequest request = new BoxAPIRequest(api, url, "GET");
-BoxJSONResponse response = (BoxJSONResponse) request.send();
-String json = response.getJSON();
-```
-
-Error Handling
---------------
-
-Unless otherwise noted, the classes and methods in the SDK can throw an
-unchecked [`BoxAPIException`][api-exception] (unchecked meaning that the
-compiler won't force you to handle it) if an error occurs. This includes network
-errors or error statuses returned by the API.
-
-You should be aware of this when using the SDK so that your code can catch any
-errors that might happen when communicating with Box.
-
-If the error was due to a general networking error (for example, if the network
-connection was lost), the `BoxAPIException` will contain the underlying
-`IOException` as its cause.
-
-If the error was due to an API error, the `BoxAPIException` will contain the
-response code and body returned by the API.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("token");
-
-try {
- BoxFolder rootFolder = BoxFolder.getRootFolder(api);
-} catch (BoxAPIException e) {
- // Log the response code and the error message returned by the API.
- System.err.format("The API returned the error code: %d\n\n%s",
- e.getResponseCode(), e.getResponse());
-}
-```
-
-[api-exception]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIException.html
-
-As-User
--------
-
-As-User is used by enterprise administrators to make API calls for their managed
-users. It can also be used by a Service Account to make API calls for managed users
-or app users.
-
-As-User state is set on the [`BoxAPIConnection`][box-api-connection] instance with
-[`asUser(String userID)`][as-user] and will be used for all requests made from that
-API connection going forward, until the state is removed with [`asSelf()`][as-self].
-
-```java
-String userID = "12345";
-String fileID = "98765";
-
-BoxAPIConnection api = new BoxAPIConnection("ACCESS_TOKEN");
-
-BoxFile file = new BoxFile(api, fileID);
-
-// API call made as user associated with access token
-BoxFile.Info info = file.getInfo();
-
-api.asUser(userID);
-
-// API call made as user associated with userID
-info = file.getInfo();
-
-api.asSelf();
-
-// API call made as user associated with access token again
-BoxFile.Info info = file.getInfo();
-```
-
-[as-user]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#asUser-java.lang.String-
-[as-self]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#asSelf--
-
-Suppressing Notifications
--------------------------
-
-If you are making administrative API calls (that is, your application has “Manage an Enterprise”
-scope, and the user signing in is a co-admin with the correct "Edit settings for your company"
-permission) then you can suppress both email and webhook notifications. This can be used, for
-example, for a virus-scanning tool to download copies of everyone’s files in an enterprise,
-without every collaborator on the file getting an email. All actions will still appear in users'
-updates feed and audit logs.
-
-> __Note:__ This functionality is only available for approved applications.
-
-To turn on notification suppression for all calls made through a [`BoxAPIConnection`][box-api-connection]
-instance, call [`suppressNotifications()`][suppress-notifications]. To re-enable notifications on an API
-connection, call [`enableNotifications`][enable-notifications].
-
-```java
-String userID = "12345";
-String fileID = "98765";
-OutputStream downloadStream;
-
-BoxAPIConnection api = new BoxAPIConnection("ACCESS_TOKEN");
-
-BoxFile file = new BoxFile(api, fileID);
-
-// Notifications are sent by default
-downlaodStream = file.download();
-
-api.suppressNotifications();
-
-// Notifications are suppressed
-downlaodStream = file.download();
-
-api.enableNotifications();
-
-// Notifications are sent again
-downlaodStream = file.download();
-```
-
-[suppress-notifications]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#suppressNotifications--
-[enable-notifications]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIConnection.html#enableNotifications--
diff --git a/doc/recent_items.md b/doc/recent_items.md
deleted file mode 100644
index fd13016b8..000000000
--- a/doc/recent_items.md
+++ /dev/null
@@ -1,33 +0,0 @@
-Recent Items
-============
-
-Recent Items returns information about files that have been accessed by a user not long ago. It keeps track of items
-that were accessed either in the last 90 days or the last 1000 items accessed (both conditions must be met).
-
-
-
-
-
-- [Get a User's Recent Items](#get-a-users-recent-items)
-
-
-
-
-Get a User's Recent Items
--------------------------
-
-Get a list of all recent items the user has by calling
-[`BoxRecents.getRecentItems(BoxAPIConnection api, int limit, String... fields)`][get-recents].
-This returns an ordered iterable of the [`BoxRecentItem`][recent-item] records,
-which describe which item the user interacted with, when they interacted with it,
-and what type of interaction it was. Any `fields` specified relate to the items
-themselves (e.g. the recent files and folders).
-
-
-```java
-// Get the latest 100 items the user has interacted with
-Iterable recentItems = BoxRecents.getRecentItems(api, 100);
-```
-
-[get-recents]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRecents.html#getRecentItems-com.box.sdk.BoxAPIConnection-int-java.lang.String...-
-[recent-item]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRecentItem.html
diff --git a/doc/retention_policies.md b/doc/retention_policies.md
deleted file mode 100644
index 5c8801e64..000000000
--- a/doc/retention_policies.md
+++ /dev/null
@@ -1,320 +0,0 @@
-Retention Policies
-======
-
-A retention policy blocks permanent deletion of content for a specified amount of time. Admins can create retention policies and then later assign them to specific folders or their entire enterprise.
-
-
-
-
-- [Create Retention Policy](#create-retention-policy)
- - [Indefinite Retention Policies](#indefinite-policies)
- - [Finite Retention Policies](#finite-policies)
- - [Optional parameters](#optional-parameters)
-- [Get Retention Policy](#get-retention-policy)
-- [Update Retention Policy](#update-retention-policy)
-- [Get Retention Policies](#get-retention-policies)
-- [Get Retention Policy Assignments](#get-retention-policy-assignments)
-- [Create Retention Policy Assignment](#create-retention-policy-assignment)
-- [Get Retention Policy Assignment](#get-retention-policy-assignment)
-- [Delete Retention Policy Assignment](#delete-retention-policy-assignment)
-- [Get File Version Retention](#get-file-version-retention)
-- [Get File Version Retentions](#get-file-version-retentions)
-- [Get Files Under Retention For Assignment](#get-files-under-retention-for-assignment)
-- [Get File Versions Under Retention For Assignment](#get-file-versions-under-retention-for-assignment)
-- [Extend retention for a file](#extend-retention-for-a-file)
-
-
-
-
-## Create Retention Policy
-
-### Indefinite policies
-The static [`createIndefinitePolicy(BoxAPIConnection api, String name)`][create-indefinite-retention-policy]
-method will let you create a new indefinite retention policy with a specified name.
-
-
-```java
-BoxRetentionPolicy.createIndefinitePolicy(api, name);
-```
-
-### Finite policies
-The static [`BoxRetentionPolicy.createFinitePolicy(com.box.sdk.BoxAPIConnection, java.lang.String, int, com.box.sdk.BoxRetentionPolicy.BoxRetentionPolicyAction)`][create-finite-retention-policy]
-method will let you create a new finite retention policy with a specified name,
-amount of time to apply the retention policy (in days) and a disposition action.
-
-```java
-BoxRetentionPolicy.createFinitePolicy(api, name, length, PermanentlyDelete);
-```
-
-### Optional parameters
-Both finite and indefinite policies allow you to specify optional parameters using the [`RetentionPolicyParams`][policy-params]
-object.
-
-```java
-String notifiedUserID = "12345";
-String description = "Policy to retain all reports";
-RetentionPolicyParams optionalParams = new RetentionPolicyParams();
-optionalParams.setCanOwnerExtendRetention(true);
-optionalParams.setAreOwnersNotified(true);
-optionalParams.setDescription(description);
-optionalParams.addCustomNotificationRecipient(notifiedUserID);
-
-// Create indefinite policy with optional parameters
-BoxRetentionPolicy.createIndefinitePolicy(api, "Retain Stuff Forever", optionalParams);
-
-// Create finite policy with optional parameters
-BoxRetentionPolicy.createFinitePolicy(api, "Keep One Year", 365, BoxRetentionPolicyAction.RemoveRetention, optionalParams);
-```
-
-[create-indefinite-retention-policy]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#createIndefinitePolicy-com.box.sdk.BoxAPIConnection-java.lang.String-
-[create-finite-retention-policy]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#createFinitePolicy-com.box.sdk.BoxAPIConnection-java.lang.String-int-com.box.sdk.BoxRetentionPolicy.BoxRetentionPolicyAction-
-[policy-params]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/RetentionPolicyParams.html
-
-## Get Retention Policy
-
-Calling [`getInfo(String... fields)`][get-info] will return a
-[`BoxRetentionPolicy.Info'][retention-policy-info] object containing information
-about the retention policy. If necessary to retrieve limited set of fields, it
-is possible to specify them using the `fields` parameter.
-
-
-```java
-// Get the policy name and status for a given retention policy
-BoxRetentionPolicy policy = new BoxRetentionPolicy(api, id);
-policy.getInfo("policy_name", "status");
-```
-
-[get-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#getInfo-java.lang.String...-
-[retention-policy-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.Info.html
-
-## Update Retention Policy
-
-Updating a retention policy's information is done by calling
-[`updateInfo(BoxRetentionPolicy.Info fieldsToUpdate)`][update-info].
-
-
-```java
-BoxRetentionPolicy policy = new BoxRetentionPolicy(api, id);
-BoxRetentionPolicy.Info policyInfo = policy.new Info();
-policyInfo.setPolicyName("new policy name");
-policy.updateInfo(policyInfo);
-```
-
-[update-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#updateInfo-com.box.sdk.BoxRetentionPolicy.Info-
-
-## Get Retention Policies
-
-Calling the static [`getAll(BoxAPIConnection api, String... fields)`][get-retention-policies]
-will return an iterable that will page through all of the retention policies.
-It is possible to specify filter for the name of retention policy, filter for
-the type of the policy, filter for the id of user, limit of items per single
-response and fields to retrieve by calling the static
-[`getAll(String name, String type, String userID, int limit, BoxAPIConnection api, String... fields)`][get-retention-policies-with-fields]
-method.
-
-
-```java
-Iterable policies = BoxRetentionPolicy.getAll(api);
-for (BoxRetentionPolicy.Info policyInfo : policies) {
- // Do something with the retention policy.
-}
-```
-
-[get-retention-policies]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#getAll-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[get-retention-policies-with-fields]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#getAll-java.lang.String-java.lang.String-java.lang.String-int-com.box.sdk.BoxAPIConnection-java.lang.String...-
-
-## Get Retention Policy Assignments
-
-Calling [`getAllAssignments(String... fields)`][get-all-assignments] will return
-an iterable that will page through all of the assignments of the retention
-policy. It is possible to specify maximum number of items per single response
-and fields to retrieve by calling
-[`getAllAssignments(int limit, String... fields)`][get-all-assignments-with-params].
-If it is necessary to retrieve only assignments of certain type, you can call
-[`getFolderAssignments(int limit, String... fields)`][get-folder-assignments] or
-[`getEnterpriseAssignments(int limit, String... fields)`][get-enterprise-assignments].
-
-
-```java
-BoxRetentionPolicy policy = new BoxRetentionPolicy(api, id);
-Iterable allAssignments = policy.getAllAssignments("assigned_by");
-Iterable folderAssignments = policy.getFolderAssignments(50, "assigned_by");
-Iterable enterpriseAssignments = policy.getEnterpriseAssignments();
-for (BoxRetentionPolicyAssignments.Info assignmentInfo : allAssignments) {
- // Do something with the assignment.
-}
-for (BoxRetentionPolicyAssignments.Info assignmentInfo : folderAssignments) {
- // Do something with the assignment.
-}
-for (BoxRetentionPolicyAssignments.Info assignmentInfo : enterpriseAssignments) {
- // Do something with the assignment.
-}
-```
-
-[get-all-assignments]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#getAllAssignments-java.lang.String...-
-[get-all-assignments-with-params]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#getAllAssignments-int-java.lang.String...-
-[get-folder-assignments]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#getFolderAssignments-int-java.lang.String...-
-[get-enterprise-assignments]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#getEnterpriseAssignments-int-java.lang.String...-
-
-## Create Retention Policy Assignment
-
-To create new retention policy assignment call [`assignTo(BoxFolder target)`][create-assignment] method to assign the policy
-to a specific folder, [`assignToEnterprise()`][create-assignment-to-enterprise] to assign the retention policy to the
-entire enterprise, or [`assignToMetadataTemplate(String templateID, String startDateField, MetadataFieldFilter... filterFields)`][assign-to-metadata]
-to assign the policy to items with a specific metadata template.
-
-
-```java
-// Assign the policy to the entire enterprise
-BoxRetentionPolicy policy = new BoxRetentionPolicy(api, policyID);
-policy.assignToEnterprise();
-
-// Assign the policy to a single folder
-BoxFolder folder = new BoxFolder(api, folderID);
-policy.assignTo(folderID);
-
-// Assign the policy to all items with metadata template
-String metadataTemplateID = "f0dce190-8106-43ca-9d67-7dce9b10a55e";
-policy.assignToMetadataTemplate(metadataTemplateID);
-// You can also pass an optional `startDateField` parameter containing the ID of the metadata template's `date` field
-String dateFieldID = "fb523725-04b1-4502-b871-eac305274533";
-policy.assignToMetadataTemplate(metadataTemplateID, dateFieldID);
-```
-
-[create-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#assignTo-com.box.sdk.BoxFolder-
-[create-assignment-to-enterprise]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#assignToEnterprise--
-[assign-to-metadata]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicy.html#assignToMetadataTemplate-java.lang.String-com.box.sdk.MetadataFieldFilter-
-
-## Get Retention Policy Assignment
-
-Calling [`getInfo(String... fields)`][get-assignment] will return a
-[`BoxRetentionPolicyAssignment.Info`][policy-assignment-info] object containing
-information about the retention policy assignment.
-
-
-```java
-BoxRetentionPolicyAssignment assignment = new BoxRetentionPolicyAssignment(api, id);
-BoxRetentionPolicyAssignment.Info assignmentInfo = assignment.getInfo("assigned_to");
-```
-
-[get-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicyAssignment.html#getInfo-java.lang.String...-
-[policy-assignment-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicyAssignment.Info.html
-
-## Delete Retention Policy Assignment
-
-To delete Retention Policy Assignment call [`delete()`][delete-assignment] method.
-
-
-```java
-BoxRetentionPolicyAssignment assignment = new BoxRetentionPolicyAssignment(api, id);
-assignment.delete();
-```
-
-[delete-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicyAssignment.html#delete()
-
-
-## Get File Version Retention
-
-Calling [`getInfo(String... fields)`][get-file-version-retention] will return a
-[`BoxFileVersionRetention.Info`][version-retention-info] object containing
-information about the file version retention policy.
-
-
-```java
-BoxFileVersionRetention policy = new BoxFileVersionRetention(api, id);
-BoxFileVersionRetention.Info policyInfo = policy.getInfo();
-```
-
-[get-file-version-retention]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersionRetention.html#getInfo-java.lang.String...-
-[version-retention-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersionRetention.Info.html
-
-## Get File Version Retentions
-
-To get an iterable with all file version retentions for the current retention
-policy, call the static [`getAll(BoxAPIConnection api, String... fields)`][get-all-file-version-retentions]
-method. It is possible to add filters to query passing a
-[`BoxFileVersionRetention.QueryFilter`][query-filter] object as a parameter to
-[`getRetentions(BoxAPIConnection api, BoxFileVersionRetention.QueryFilter filter, String... fields)`][get-all-file-version-retentions-with-filter].
-
-
-```java
-BoxFileVersionRetention.QueryFilter filter = new BoxFileVersionRetention.QueryFilter()
- .addFileID("0")
- .addFileVersionID("1")
- .addPolicyID("2")
- .addDispositionAction(BoxRetentionPolicy.ACTION_PERMANENTLY_DELETE)
- .addDispositionBefore(BoxDateFormat.parse("2016-09-15T13:15:35+0000"))
- .addDispositionAfter(BoxDateFormat.parse("2014-09-15T13:15:35+0000"));
-Iterable retentions
- = BoxFileVersionRetention.getRetentions(api, filter, "file", "applied_at");
-for (BoxFileVersionRetention.Info retentionInfo : retentions) {
- // Do something with the file version retention.
-}
-```
-
-[get-all-file-version-retentions]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersionRetention.html#getAll-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[query-filter]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersionRetention.QueryFilter.html
-[get-all-file-version-retentions-with-filter]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersionRetention.html#getRetentions-com.box.sdk.BoxAPIConnection-com.box.sdk.BoxFileVersionRetention.QueryFilter-java.lang.String...-
-
-## Get Files Under Retention For Assignment
-
-To get an iterable with all files under retention for assignment
-policy, call the [`getFilesUnderRetention(BoxAPIConnection api, int limit, String... fields)`][get-files-under-retention-for-assignment]
-method. This will return an interable with [`BoxFile.Info`][file] objects containing information about the files.
-
-
-```java
-BoxRetentionPolicyAssignment policyAssignment = new BoxRetentionPolicyAssignment(api, id);
-Iterable filesUnderRetention = policyAssignment.getFilesUnderRetention();
-for (BoxFile.Info item : filesUnderRetention){
- // Do something with the files under retention.
-}
-```
-
-[get-files-under-retention-for-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicyAssignment.html#getFilesUnderRetention-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.Info.html
-
-Get File Versions Under Retention For Assignment
-------------------------------------------------
-
-To get an iterable with all file versions under retention for assignment
-policy, call the [`getFileVersionsUnderRetention(BoxAPIConnection api, int limit, String... fields)`][get-file-versions-under-retention-for-assignment]
-method. This will return an interable with [`BoxFile.Info`][file] objects containing information about the file.
-You can get version by calling [`BoxFile.Info#getVersion()`][file-version].
-
-
-```java
-BoxRetentionPolicyAssignment policyAssignment = new BoxRetentionPolicyAssignment(api, id);
-Iterable fileVersionsUnderRetention = policyAssignment.getFileVersionsUnderRetention();
-for (BoxFile.Info file : fileVersionsUnderRetention){
- BoxFileVersion version = file.getVersion();
- // Do something with the file version under retention.
-}
-```
-
-[get-file-versions-under-retention-for-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxRetentionPolicyAssignment.html#getFileVersionsUnderRetention-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[file-version]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFileVersion.html
-
-## Extend retention for a file
-
-Once you create retention policy and assign it to a folder all files and subfolders will have same policy applied.
-If you need to extend retention for some file you can change it's `dispositionAt` value:
-
-```java
-BoxFile.Info info = someFile.getInfo();
-// to read current disposition date coming from retention policy
-BoxFile.Info info = someFile.getInfo("disposition_at");
-Date currentDispositionDate = info.getDispositionAt();
-
-// calculate new disposition date
-Date dispositionAt = Date.from(
- LocalDateTime.ofInstant(currentDispositionDate.toInstant(), ZoneId.of("Z"))
- .plusDays(30)
- .toInstant(UTC)
-);
-
-// to change disposition date on a file you need to updateInfo
-info.setDispositionAt(dispositionAt);
-uploadedFile.updateInfo(info);
-
-```
diff --git a/doc/search.md b/doc/search.md
deleted file mode 100644
index 54bc3abac..000000000
--- a/doc/search.md
+++ /dev/null
@@ -1,52 +0,0 @@
-Search
-======
-
-Different examples of search which have been implemented in the example [SearchExamplesAsAppUser.java](https://github.com/box/box-java-sdk/blob/main/src/example/java/com/box/sdk/example/SearchExamplesAsAppUser.java)
-
-For more information refer to the
-[Search API documentation](https://developer.box.com/v2.0/reference#searching-for-content).
-
-
-
-
-
-- [Search](#search)
-
-
-
-Search
-------
-
-A search can be performed in your Box instance with specified starting position with
-[`searchRange(long offset, long limit, BoxSearchParameters queryParams)`][search]
-
-You can use the `limit` and `offset` parameters to page through the search results.
-
-
-```java
-// Find the first 10 files matching "taxes"
-long offsetValue = 0;
-long limitValue = 10;
-BoxSearch boxSearch = new BoxSearch(api);
-BoxSearchParameters searchParams = new BoxSearchParameters();
-searchParams.setQuery("taxes");
-searchParams.setType("file");
-PartialCollection searchResults = boxSearch.searchRange(offsetValue, limitValue, searchParams);
-```
-
-You can also sort the search results with the `sort` and `direction` flags passed into BoxSearch. This allows for the
-order of items returned to be maintained. The `sort` field can only be set to `modified_at` currently. For direction you
-can specify either `DESC` for descending order or `ASC` for ascending order to sort the results.
-
-```java
-long offsetValue = 0;
-long limitValue = 10;
-BoxSearch boxSearch = new BoxSearch(api);
-BoxSearchParameters searchParams = new BoxSearchParameters();
-searchParams.setQuery("taxes");
-searchParams.setSort("modified_at");
-searchParams.setDirection("DESC");
-PartialCollection searchResults = boxSearch.searchRange(offsetValue, limitValue, searchParams);
-```
-
-[search]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSearch.html#searchRange-long-long-com.box.sdk.BoxSearchParameters-
diff --git a/doc/shared-items.md b/doc/shared-items.md
deleted file mode 100644
index 33c580ac9..000000000
--- a/doc/shared-items.md
+++ /dev/null
@@ -1,32 +0,0 @@
-Shared Items
-============
-
-Shared Items represent files and folders on Box accessed via a shared link.
-
-* [Get a Shared Item](#get-a-shared-item)
-
-Get a Shared Item
------------------
-
-To get the file or folder information for a shared link, you can call
-[`BoxItem.getSharedItem(BoxAPIConnection api, String sharedLink)`][get-shared-item]
-with the shared link to get information about the item behind it.
-
-```java
-String sharedLink = "https://app.box.com/s/abcdefghijklmnopqrstuvwxyz123456";
-BoxItem.Info itemInfo = BoxItem.getSharedItem(api, sharedLink);
-```
-
-If the shared link is password-protected, call
-[`BoxItem.getSharedItem(BoxAPIConnection api, String sharedLink, String password)`][get-shared-item-password]
-with the shared link and password.
-
-
-```java
-String sharedLink = "https://app.box.com/s/abcdefghijklmnopqrstuvwxyz123456";
-String password = "foo";
-BoxItem.Info itemInfo = BoxItem.getSharedItem(api, sharedLink, password);
-```
-
-[get-shared-item]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.html#getSharedItem-com.box.sdk.BoxAPIConnection-java.lang.String-
-[get-shared-item-password]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxItem.html#getSharedItem-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-
diff --git a/doc/sign_requests.md b/doc/sign_requests.md
deleted file mode 100644
index 1469867d5..000000000
--- a/doc/sign_requests.md
+++ /dev/null
@@ -1,152 +0,0 @@
-Sign Requests
-==================
-
-Sign Requests are used to request e-signatures on documents from signers.
-A Sign Request can refer to one or more Box Files and can be sent to one or more Box Sign Request Signers.
-
-
-
-
-- [Create Sign Request](#create-sign-request)
-- [Get all Sign Requests](#get-all-sign-requests)
-- [Get Sign Request by ID](#get-sign-request-by-id)
-- [Cancel Sign Request](#cancel-sign-request)
-- [Resend Sign Request](#resend-sign-request)
-
-
-
-Create Sign Request
-------------------------
-
-The [`createSignRequest(BoxAPIConnection api, List signers, List files, String parentFolderId)`][create-sign-request]
-method will create a Sign Request.
-
-You need to provide 1 to 10 files (from which the signing document will be created) and at least one signer to receive the Sign Request. You can use [`BoxSignRequestFile`][box-sign-request-file]
-and [`BoxSignRequestSigner`][box-sign-request-signer] classes to provide the necessary data.
-
-
-```java
-List files = new ArrayList();
-BoxSignRequestFile file = new BoxSignRequestFile("12345");
-files.add(file);
-
-// you can also use specific version of the file
-BoxFile file = new BoxFile(api, "12345");
-List versions = file.getVersions();
-BoxFileVersion firstVersion = versions.get(0);
-BoxSignRequestFile file = new BoxSignRequestFile(firstVersion.getFileID(), firstVersion.getVersionID());
-
-List signers = new ArrayList();
-BoxSignRequestSigner newSigner = new BoxSignRequestSigner("signer@mail.com");
-signers.add(newSigner);
-
-String destinationParentFolderId = "55555";
-
-BoxSignRequest.Info signRequestInfo = BoxSignRequest.createSignRequest(api, files,
- signers, destinationParentFolderId);
-```
-
-[`createSignRequest`][create-sign-request] allows you to specify optional parameters using the [`BoxSignRequestCreateParams`][sign-request-create-params]
-object.
-
-```java
-List files = new ArrayList();
- BoxSignRequestFile file = new BoxSignRequestFile("12345");
- files.add(file);
-
-List signers = new ArrayList();
-BoxSignRequestSigner newSigner = new BoxSignRequestSigner("signer@mail.com");
-signers.add(newSigner);
-
-String destinationParentFolderId = "55555";
-
-BoxSignRequestCreateParams createParams = new BoxSignRequestCreateParams()
- .setIsDocumentPreparationNeeded(true);
-
-BoxSignRequest.Info signRequestInfo = BoxSignRequest.createSignRequest(api, files,
- signers, destinationParentFolderId, createParams);
-```
-
-If you set ```isDocumentPreparationNeeded``` flag to true, you need to visit ```prepareUrl``` before the Sign Request will be sent.
-For more information on ```isDocumentPreparationNeeded``` and the other ```BoxSignRequestCreateParams``` available, please refer to the [developer documentation](https://developer.box.com/guides/box-sign/).
-
-[sign-request-create-params]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequestCreateParams.html
-[create-sign-request]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequest.html#createSignRequest-com.box.sdk.BoxAPIConnection-java.util.List-java.util.List-java.lang.String-
-[box-sign-request-signer]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequestSigner.html
-[box-sign-request-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequestFile.html
-
-Get All Sign Requests
-------------------------
-
-Calling the static [`getAll(BoxAPIConnection api, String... fields)`][get-all-sign-requests]
-will return an iterable that will page through all the Sign Requests.
-
-The static
-[`getAll(int limit, BoxAPIConnection api, String... fields)`][get-all-sign-requests-with-fields]
-method offers `limit` and `fields` parameters. The `limit` parameter specifies the maximum number of items to be returned in a single response. The `fields` parameter is used to specify what additional properties should be returned on the `BoxSignRequest.Info` objects. For more information on what `fields` are available, please refer to the [developer documentation](https://developer.box.com/guides/box-sign/).
-
-
-```java
-Iterable signRequests = BoxSignRequest.getAll(api);
-for (BoxSignRequest.Info signRequestInfo : signRequests) {
- // Do something with each `signRequestInfo`.
-}
-```
-
-[get-all-sign-requests]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequest.html#getAll-com.box.sdk.BoxAPIConnection-java.lang.String...-
-[get-all-sign-requests-with-fields]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequest.html#getAll-int-com.box.sdk.BoxAPIConnection-java.lang.String...-
-
-Get Sign Request by ID
-------------------------
-
-Calling [`getInfo(String fields ...)`][get-sign-request-by-id] will return a [`BoxSignRequest.Info`][box-sign-request-info] object
-containing information about the Sign Request.
-The `fields` parameter is used to specify what additional properties should be returned on the `BoxSignRequest.Info` objects.
-
-
-```java
-BoxSignRequest signRequest = new BoxSignRequest(api, id);
-BoxSignRequest.Info signRequestInfo = signRequest.getInfo();
-
-//using `fields` parameter
-BoxSignRequest.Info signRequestInfoWithFields = signRequest.getInfo("status")
-
-```
-
-[get-sign-request-by-id]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequest.html#getInfo-java.lang.String...-
-[box-sign-request-info]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequest.Info.html
-
-
-Cancel Sign Request
-------------------------
-
-Calling [`cancel()`][cancel-sign-request] will cancel a created Sign Request.
-
-
-```java
-BoxSignRequest signRequest = new BoxSignRequest(api, id);
-BoxSignRequest.Info signRequestInfo = signRequest.getInfo();
-
-signRequestInfo.cancel();
-```
-
-[cancel-sign-request]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequest.html#cancel--
-
-
-Resend Sign Request
-------------------------
-
-Calling [`resend()`][resend-sign-request] will resend a Sign Request to all signers that have not signed it yet.
-There is an 10-minute cooling-off period between re-sending reminder emails. If this method is called during the
-cooling-off period, a [`BoxAPIException`][box-api-exception] will be thrown.
-
-
-```java
-BoxSignRequest signRequest = new BoxSignRequest(api, id);
-BoxSignRequest.Info signRequestInfo = signRequest.getInfo();
-
-signRequestInfo.resend();
-```
-
-[resend-sign-request]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignRequest.html#resend--
-[box-api-exception]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxAPIException.html
diff --git a/doc/sign_templates.md b/doc/sign_templates.md
deleted file mode 100644
index 9f2e5d192..000000000
--- a/doc/sign_templates.md
+++ /dev/null
@@ -1,51 +0,0 @@
-Sign Templates
-==================
-
-Box Sign enables you to create templates so you can automatically add the same fields and formatting to requests for signature. With templates, you don't need to repetitively add the same fields to each request every time you send a new document for signature.
-
-Making and testing a template takes a few minutes, but when done it makes working with Box Sign easier and faster.
-
-
-
-
-- [Get all Sign Templates](#get-all-sign-templates)
-- [Get Sign Template by ID](#get-sign-template-by-id)
-
-
-
-Get All Sign Templates
-------------------------
-
-Calling the static [`getAll(BoxAPIConnection api)`][get-all-sign-templates]
-will return an iterable that will page through all the Sign Templates.
-
-The static
-[`getAll(BoxAPIConnection api, int limit)`][get-all-sign-templates-with-limit]
-method offers `limit` parameter. The `limit` parameter specifies the maximum number of items to be returned in a single response.
-
-
-```java
-Iterable signTemplates = BoxSignTemplate.getAll(api);
-for (BoxSignTemplate.Info signTemplateInfo : signTemplates) {
- // Do something with each `signTemplateInfo`.
-}
-```
-
-[get-all-sign-templates]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignTemplate.html#getAll-com.box.sdk.BoxAPIConnection-
-[get-all-sign-templates-with-limit]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignTemplate.html#getAll-com.box.sdk.BoxAPIConnection-int-
-
-Get Sign Template by ID
-------------------------
-
-Calling [`getInfo()`][get-sign-template-by-id] will return a [`BoxSignTemplate.Info`][box-sign-template-info] object
-containing information about the Sign Template.
-
-
-
-```java
-BoxSignTemplate signTemplate = new BoxSignTemplate(api, id);
-BoxSignTemplate.Info signTemplateInfo = signTemplate.getInfo();
-```
-
-[get-sign-template-by-id]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignTemplate.html#getInfo-
-[box-sign-template-info]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxSignTemplate.Info.html
diff --git a/doc/storage_policy.md b/doc/storage_policy.md
deleted file mode 100644
index 1da7c9baf..000000000
--- a/doc/storage_policy.md
+++ /dev/null
@@ -1,132 +0,0 @@
-Storage Policy
-==============
-
-Allows the enterprise admin to manage the Storage Policies for users in their
-enterprise. Used for an enterprise to decide storage location for users based on
-where they work/reside.
-
-* [Get Storage Policy](#get-storage-policy)
-* [Get List of Storage Policies](#get-list-of-storage-policies)
-* [Create New Assignment](#create-new-assignment)
-* [Get Assignment](#get-assignment)
-* [Get Assignment For Target](#get-assignment-for-target)
-* [Update Existing Assignment](#update-existing-assignment)
-* [Assign Storage Policy](#assign-storage-policy)
-* [Delete Assignment](#delete-assignment)
-
-Get Storage Policy
-------------------
-
-Calling [`getInfo(String fields ...)`][get-info] will return BoxStoragePolicy.Info object
-containing information about the storage policy. If necessary to retrieve
-limited set of fields. It is possible to specify them using param.
-
-
-```java
-BoxStoragePolicy storagePolicy = new BoxStoragePolicy(api, id);
-BoxStoragePolicy.Info storagePolicyInfo = storagePolicy.getInfo();
-```
-
-[get-info]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicy.html#getInfo--
-
-Get List of Storage Policies
-----------------------------
-
-Calling the static [`getAll(BoxAPIConnection api)`][get-list-of-storage-policies]
-will return an iterable that will page through all of the storage policies.
-It is possible to specify maximum number of items per response and fields to retrieve by
-calling the static [`getAll(BoxAPIConnection api, int limit, String fields ...)`][get-list-of-storage-policies-with-fields] method.
-
-
-```java
-Iterable storagePolicies = BoxStoragePolicy.getAll(api);
-for (BoxStoragePolicy.Info storagePolicyInfo : storagePolicies) {
- //Do something with the storage policy.
-}
-```
-
-[get-list-of-storage-policies]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicy.html#getAll--
-[get-list-of-storage-policies-with-fields]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicy.html#getAll-java.lang.String...-
-
-Create New Assignment
----------------------
-
-To create new storage policy assignment call [`create(BoxAPIConnection api, String policyID, String userID)`][create] method.
-
-
-```java
-BoxStoragePolicyAssignment.Info assignmentInfo = BoxStoragePolicyAssignment.create(api, policyID, userID);
-```
-
-[create]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicyAssignment.html#create-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-
-
-Update Existing Assignment
---------------------------
-
-Updating a storage policy assignment information is done by calling
-[`updateInfo(BoxStoragePolicyAssignment.Info updatedInfo)`][update-info].
-
-
-```java
-BoxStoragePolicyAssignment storagePolicyAssignment = new BoxStoragePolicyAssignment(api, "ASSIGNMENT_ID");
-BoxStoragePolicyAssignment.Info assignmentInfo = storagePolicyAssignment.new Info();
-assignmentInfo.setStoragePolicyID("NEW_STORAGE_POLICY_ID");
-storagePolicyAssignment.updateInfo(assignmentInfo);
-```
-
-[update-info]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicyAssignment.html#updateInfo-com.box.sdk.BoxStoragePolicyAssignment.Info-
-
-Get Assignment
---------------
-
-Calling [`getInfo(String fields ...)`][get-assignment] will return a BoxStoragePolicyAssignment.Info object containing information
-about the storage policy assignment.
-
-
-```java
-BoxStoragePolicyAssignment storagePolicyAssignment = new BoxStoragePolicyAssignment(api, id);
-BoxStoragePolicyAssignment.Info assignmentInfo = storagePolicyAssignment.getInfo();
-```
-
-[get-assignment]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicyAssignment.html#getInfo--
-
-Get Assignment for Target
--------------------------
-
-Calling [`getAssignmentForTarget(BoxAPIConnection api, String resolvedForType, String resolvedForID)`][get-assignment-for-target] will return a BoxStorageAssignment.Info
-object containing information about the storage policy assignment.
-
-
-```java
-BoxStoragePolicyAssignment.Info assignmentInfo = BoxStoragePolicyAssignment.getAssignmentForTarget(api, "user", "1234")
-```
-
-[get-assignment-for-target]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicyAssignment.html#getAssignmentForTarget-com.box.BoxAPIConnection-java.lang.String-java.lang.String-
-
-Assign Storage Policy
----------------------
-
-Calling [`assign(BoxAPIConnection api, String storagePolicyID, String userID)`][assign] will check if this user already has storage policy assigned to them. If not then a new
-this user will be assigned the specified storage policy.
-
-
-```java
-BoxStoragePolicyAssignment.Info assignmentInfo = BoxStoragePolicyAssignment.assign(api, "1234", "5678");
-```
-
-[assign]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicyAssigbment.html#assign-com.box.BoxAPIConnection-java.lang.String-java.lang.String-
-
-Delete Assignment
------------------
-
-Calling [`delete()`][delete] will remove the storage policy assignment from the user.
-
-
-```java
-BoxStoragePolicyAssignment assignment = new BoxStoragePolicyAssignment(api, "dXNlcl8xMjM0");
-assignment.delete();
-```
-
-[delete]:http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxStoragePolicyAssignment.html#delete--
-
-
diff --git a/doc/tasks.md b/doc/tasks.md
deleted file mode 100644
index de1927f14..000000000
--- a/doc/tasks.md
+++ /dev/null
@@ -1,182 +0,0 @@
-Tasks
-=====
-
-Task objects represent a user-created task on a file.
-
-
-
-
-
-- [Get a Task's Information](#get-a-tasks-information)
-- [Get the Tasks on a File](#get-the-tasks-on-a-file)
-- [Add a Task to a File](#add-a-task-to-a-file)
-- [Update a Task's Information](#update-a-tasks-information)
-- [Delete a Task](#delete-a-task)
-- [Get a Task's Assignments](#get-a-tasks-assignments)
-- [Get Information About a Task Assignment](#get-information-about-a-task-assignment)
-- [Add a Task Assignment](#add-a-task-assignment)
-- [Delete a Task Assignment](#delete-a-task-assignment)
-- [Update a Task Assignment](#update-a-task-assignment)
-
-
-
-Get a Task's Information
-------------------------
-
-Calling [`getInfo()`][get-info] on a task returns a snapshot of the task's
-info.
-
-
-```java
-BoxTask task = new BoxTask(api, "id");
-BoxTask.Info info = task.getInfo();
-```
-
-[get-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTask.html#getInfo--
-
-Get the Tasks on a File
------------------------
-
-You can get all of the tasks on a file by calling the
-[`getTasks()`][get-tasks] method.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-List tasks = file.getTasks();
-```
-
-[get-tasks]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getTasks--
-
-Add a Task to a File
---------------------
-
-A task can be added to a file with the
-[`addTask(BoxTask.Action action, String message, Date dueAt)`][add-task] method.
-
-
-```java
-BoxFile file = new BoxFile(api, "id");
-Date dueAt = new Date();
-file.addTask(BoxTask.Action.REVIEW, "Please review this file.", dueAt);
-```
-
-[add-task]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#addTask-com.box.sdk.BoxTask.Action-java.lang.String-java.util.Date-
-
-Update a Task's Information
----------------------------
-
-The message of a task can be changed with the
-[`updateInfo(BoxTask.Info fieldsToUpdate)`][update-info] method.
-
-
-```java
-BoxTask task = new BoxTask(api, "id");
-BoxTask.Info info = task.new Info();
-info.setMessage("An edited message.");
-task.updateInfo(info);
-```
-
-[update-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTask.html#updateInfo-com.box.sdk.BoxTask.Info-
-
-Delete a Task
--------------
-
-A task can be deleted with the [`delete()`][delete] method.
-
-
-```java
-BoxTask task = new BoxTask(api, "id");
-task.delete();
-```
-
-[delete]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxTask.html#delete--
-
-Get a Task's Assignments
-------------------------
-
-Retreive a tasks assignments with the [`getAssignments()`][get-assignments] method.
-
-
-```java
-BoxTask task = new BoxTask(api, "id");
-task.getAssignments();
-```
-
-[get-assignments]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxTask.html#getAssignments--
-
-Get Information About a Task Assignment
----------------------------------------
-
-To look up information about a task assignment by its ID, instantiate the
-[`BoxTaskAssignment`][task-assignment-object] object with the ID, and call [`getInfo()`][get-assignment-info]
-on the assignment. To retrieve only specific fields on the task assignment, call
-[`getInfo(String... fields)`][get-assignment-fields] with the fields to retrieve.
-
-
-```java
-String assignmentID = "4256974";
-BoxTaskAssignment.Info assignmentInfo = new BoxTaskAssignment(api, assignmentID).getInfo();
-```
-
-[task-assignment-object]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTaskAssignment.html
-[get-assignment-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTaskAssignment.html#getInfo--
-[get-assignment-fields]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTaskAssignment.html#getInfo-java.lang.String...-
-
-Add a Task Assignment
----------------------
-
-An assignment can be added to a task with the
-[`addAssignment(BoxUser assignee)`][add-assignment] method.
-
-
-```java
-BoxUser user = new BoxUser(api, "user-id")
-BoxTask task = new BoxTask(api, "id");
-task.addAssignment(user);
-```
-
-[add-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTask.html#addAssignment-com.box.sdk.BoxUser-
-
-Delete a Task Assignment
-------------------------
-
-An assignment can be deleted from a task with the
-[`delete()`][delete-assignment] method on a [`BoxTaskAssignment`][task-assignment-object]
-instance.
-
-
-```java
-BoxTaskAssignment taskAssignment = new BoxTaskAssignment(api, "id");
-taskAssignment.delete();
-```
-
-[delete-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTaskAssignment.html#delete--
-
-Update a Task Assignment
-------------------------
-
-A task assignment can be updated with the
-[`updateInfo(BoxTask.Info fieldsToUpdate)`][update-assignment] method.
-
-Updating the resolution state:
-
-```java
-String assignmentID = "12345";
-BoxTaskAssignment taskAssignment = new BoxTaskAssignment(api, assignmentID);
-BoxTaskAssignment.Info info = taskAssignment.getInfo();
-info.setResolutionState(BoxTaskAssignment.ResolutionState.APPROVED);
-taskAssignment.updateInfo(info);
-```
-
-Updating the message:
-
-```java
-String assignmentID = "12345";
-BoxTaskAssignment taskAssignment = new BoxTaskAssignment(api, assignmentID);
-BoxTaskAssignment.Info info = taskAssignment.getInfo();
-info.setMessage("Please review the meeting notes");
-taskAssignment.updateInfo(info);
-```
-
-[update-assignment]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTaskAssignment.html#updateInfo-com.box.sdk.BoxTaskAssignment.Info-
diff --git a/doc/terms_of_service.md b/doc/terms_of_service.md
deleted file mode 100644
index 6ec68cc66..000000000
--- a/doc/terms_of_service.md
+++ /dev/null
@@ -1,154 +0,0 @@
-Terms of Service
-================
-
-Terms of Service allows Box Admins to configure a custom Terms of Service for end users to
-accept/re-accept/decline for platform applications
-
-
-
-
-
-- [Terms of Service](#terms-of-service)
- - [Create a Terms of Service](#create-a-terms-of-service)
- - [Edit a Terms of Service](#edit-a-terms-of-service)
- - [Get a Terms of Service](#get-a-terms-of-service)
- - [Get All Terms of Services](#get-all-terms-of-services)
- - [Accept or Decline a Terms of Service for New User](#accept-or-decline-a-terms-of-service-for-new-user)
- - [Accept or Decline a Terms of Service for Existing User](#accept-or-decline-a-terms-of-service-for-existing-user)
- - [Get User Status on a Terms of Service](#get-user-status-on-a-terms-of-service)
-
-
-
-Create a Terms of Service
--------------------------
-
-A terms of service can be created in an enterprise. Please note that only two can be created. One external
-and one managed. If a terms of service already exists please use the update call to change the current
-terms of service.
-
-You can create a custom terms of service by calling
-[`create(BoxAPIConnection api, BoxTermsOfService.TermsOfServiceStatus status, BoxTermsOfService.TermsOfServiceType type, String text)`][createTermsOfService].
-
-
-```java
-BoxTermsOfService.Info newTOS = BoxTermsOfService.create(
- api,
- BoxTermsOfService.TermsOfServiceStatus.ENABLED,
- BoxTermsOfService.TermsOfServiceType.EXTERNAL,
- "Terms of Service..."
-);
-```
-
-[createTermsOfService]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfService.html#create-com.box.sdk.BoxAPIConnection-com.box.sdk.BoxTermsOfService.TermsOfServiceStatus-com.box.sdk.BoxTermsOfService.TermsOfServiceType-java.lang.String-
-
-Edit a Terms of Service
------------------------
-
-You can update a terms of service status and text after you have created them by calling
-[`updateInfo(BoxTermsOfService.Info fieldsToUpdate)`][update-terms-of-service]
-
-
-```java
-BoxTermsOfService termsOfService = new BoxTermsOfService(api, "tos-id");
-BoxTermsOfService.Info termsOfServiceInfo = termsOfService.new Info();
-termsOfServiceInfo.setStatus(BoxTermsOfService.TermsOfServiceStatus.DISABLED);
-termsOfServiceInfo.setText("New Terms of Service Text");
-termsOfService.updateInfo(termsOfService);
-```
-
-[update-terms-of-service]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfService.html#updateInfo-com.box.sdk.BoxTermsOfService.Info-
-
-Get a Terms of Service
-----------------------
-
-You can retrieve a terms of service by providing the ID and calling
-[`getInfo()`][getTermsOfServiceInfo].
-
-
-```java
-BoxTermsOfService termsOfService = new BoxTermsOfService(api, "tos-id");
-BoxTermsOfService.Info tosInfo = termsOfService.getInfo();
-```
-
-[getTermsOfServiceInfo]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfService.html#getInfo--
-
-Get All Terms of Services
--------------------------
-
-You can also retrieve all terms of service in your enterprise by calling
-[`getAllTermsOfServices(BoxAPIConnection api)`][get-all-terms-of-services1].
-This will return an iterable that will page through all of the enterprises terms of services.
-
-
-```java
-List termsOfServices = BoxTermsOfService.getAllTermsOfServices(api);
-for(BoxTermsOfService.Info termsOfServiceInfo : termsOfServices){
- // Do something with the terms of service.
-}
-```
-
-You can also filter by managed or external terms of service by calling
-[`getAllTermsOfServices(BoxAPIConnection api, BoxTermsOfService.TermsOfServiceType type)`][get-all-terms-of-services2].
-
-[get-all-terms-of-services1]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfService.html#getAllTermsOfServices-com.box.sdk.BoxAPIConnection-
-[get-all-terms-of-services2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfService.html#getAllTermsOfServices-com.box.sdk.BoxAPIConnection-com.box.sdk.BoxTermsOfService.TermsOfServiceType-
-
-
-Accept or Decline a Terms of Service for New User
--------------------------------------------------
-
-For new users you can accept or decline a terms of service by calling
-[`create(BoxAPIConnection api, String tosID, Boolean accepted, String userID)`][create-user-status]
-
-
-```java
-BoxTermsOfService.Info newUserStatus = BoxTermsOfServiceUserStatus.create(api, "tos-id", true, "user-id");
-```
-
-You can only create a new user status on a terms of service if the user has never accepted/declined a terms of service.
-If they have then you will need to make the update call.
-
-[create-user-status]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfServiceUserStatus.html#create-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.Boolean-java.lang.String-
-
-Accept or Decline a Terms of Service for Existing User
-------------------------------------------------------
-
-For an existing user you can accept or decline a terms of service by calling
-[`updateInfo(BoxTermsOfService.Info fieldsToUpdate)`][update-user-status].
-
-
-```java
-BoxTermsOfServiceUserStatus tosUserStatus = new BoxTermsOfServiceUserStatus(api, "tos-user-status-id");
-BoxTermOfServiceUserStatus.Info tosUserStatusInfo = tosUserStatus.new Info();
-tosUserStatusInfo.setStatus(newStatus);
-tosUserStatus.updateInfo(tosUSerStatusInfo);
-```
-
-[update-user-status]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfServiceUserStatus.html#updateInfo-com.box.sdk.BoxTermsOfServiceUserStatus.Info-
-
-Get User Status on a Terms of Service
--------------------------------------
-
-You can retrieve the terms of service status for a user by calling
-[`getInfo(BoxAPIConnection api, String tosID, String userID)`][get-user-status1]
-
-
-```java
-List tosUserStatusInfo = BoxTermsOfServiceUserStatus.getInfo(api, "tos-id", "user-id");
-for(BoxTermsOfServiceUserStatus.Info info : toUserStatusInfo){
- // Do something with the user status on terms of service.
-}
-```
-
-Alternatively you can get the user status by the ID of the terms of service by
-calling [`getInfo(BoxAPIConnection api, String tosID)`][get-user-status2].
-
-```java
-List tosUserStatusInfo = BoxTermsOfServiceUserStatus.getInfo(api, "tos-id");
-for(BoxTermsOfServiceUserStatus.Info info : toUserStatusInfo){
- // Do something with the user status on terms of service.
-}
-```
-
-[get-user-status1]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfServiceUserStatus.html#getInfo-com.box.sdk.BoxAPIConnection-java.lang.String-
-[get-user-status2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTermsOfServiceUserStatus.html#getInfo-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-
diff --git a/doc/trash.md b/doc/trash.md
deleted file mode 100644
index ea4f83044..000000000
--- a/doc/trash.md
+++ /dev/null
@@ -1,189 +0,0 @@
-Trash
-=====
-
-Under normal circumstances, when an item in Box is deleted, it is not actually erased immediately. Instead, it is
-moved to the Trash. The Trash allows you to recover files and folders that have been deleted. By default, items in
-the Trash will be purged after 30 days.
-
-
-
-
-
-- [Get Trashed Items](#get-trashed-items)
-- [Get Trashed File Information](#get-trashed-file-information)
-- [Get Trashed Folder Information](#get-trashed-folder-information)
-- [Permanently Delete File From Trash](#permanently-delete-file-from-trash)
-- [Permanently Delete Folder From Trash](#permanently-delete-folder-from-trash)
-- [Restore a File from the Trash](#restore-a-file-from-the-trash)
-- [Restore a Folder from the Trash](#restore-a-folder-from-the-trash)
-
-
-
-Get Trashed Items
------------------
-
-The [`BoxTrash`][trash-object] implements `Iterable`, so to get
-the collection of items currently in the trash, simply iterate over it.
-
-
-```java
-BoxTrash trash = new BoxTrash(api);
-for (BoxItem.Info itemInfo : trash) {
- // Process the item
-}
-```
-
-Alternatively you can specify sort order, limit, use marker based pagination or specify which fields you want to extract with
-[`BoxTrash#items`][trash-items].
-
-To use sorting you have to use offset based pagination:
-```java
-BoxTrash trash = new BoxTrash(api);
-Iterable trashEntries = trash.items(
- SortParameters.ascending("name"),
- PagingParameters.offset(0, 500)
-);
-for (BoxItem.Info trashEntry : trashEntries) {
- // Process the item
-}
-```
-If you have a lot of items in trash and offset value is in tens of thousands it is better to use marker based pagination.
-However, marker based pagination cannot be used with sorting. To disable sorting use `SortParameters.none()`:
-```java
-BoxTrash trash = new BoxTrash(api);
-Iterable trashEntries = trash.items(
- SortParameters.none(),
- PagingParameters.marker(500)
-);
-for (BoxItem.Info trashEntry : trashEntries) {
- // Process the item
-}
-```
-
-[trash-object]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html
-[trash-items]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#items-com.box.sdk.SortParameters-com.box.sdk.PagingParameters-java.lang.String...-
-
-Get Trashed File Information
-----------------------------
-
-Ordinarily, trying to call [`getInfo()`][file-get-info] on a file that is in
-the trash will return a 404 error. To get the information of a file in the
-trash, you must instead call
-[`BoxTrash#getFileInfo(String fileID)`][get-trashed-file] with the ID of the trashed file. You can optionally
-pass a specific list of fields to retrieve to [`getFileInfo(String fileID, String... fields)`][get-trashed-file-fields],
-which will return only the specified fields to reduce payload size.
-
-
-```java
-String fileID = "9873459";
-BoxTrash trash = new BoxTrash(api);
-BoxFile.Info fileInfo = trash.getFileInfo(fileID);
-```
-[file-get-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getInfo-java.lang.String...-
-[get-trashed-file]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#getFileInfo-java.lang.String-
-[get-trashed-file-fields]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#getFileInfo-java.lang.String-java.lang.String...-
-
-Get Trashed Folder Information
-------------------------------
-
-Ordinarily, trying to call [`getInfo()`][folder-get-info] on a folder that is in the trash will return a 404 error.
-To get the information of a folder in the trash, you must instead call
-[`BoxTrash#getFolderInfo(String fileID)`][get-trashed-folder] with the ID of the trashed folder. You can optionally
-pass a specific list of fields to retrieve to
-[`getFileInfo(String folderID, String... fields)`][get-trashed-folder-fields], which will return only the specified
-fields to reduce payload size.
-
-
-```java
-String folderID = "2345343";
-BoxTrash trash = new BoxTrash(api);
-BoxFolder.Info folderInfo = trash.getFolderInfo(folderInfo);
-```
-[folders-get-info]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getInfo-java.lang.String...-
-[get-trashed-folder]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#getFolderInfo-java.lang.String-
-[get-trashed-folder-fields]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#getFolderInfo-java.lang.String-java.lang.String...-
-
-
-Permanently Delete File From Trash
-----------------------------------
-
-To delete a file from the trash, call [`BoxTrash#deleteFile(String fileID)`][delete-file] with the ID of the file to
-delete.
-
-> __Note:__ This will permanently delete the file, and cannot be undone.
-
-
-```java
-String fileID = "87398";
-BoxTrash trash = new BoxTrash(api);
-trash.deleteFile(fileID);
-```
-
-[delete-file]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#deleteFile-java.lang.String-
-
-
-Permanently Delete Folder From Trash
-----------------------------------
-
-To delete a folder from the trash, call [`BoxTrash#deleteFolder(String fileID)`][delete-folder] with the ID of the
-folder to delete.
-
-> __Note:__ This will permanently delete the folder, and cannot be undone.
-
-
-```java
-String folder = "123456";
-BoxTrash trash = new BoxTrash(api);
-trash.deleteFolder(folderID);
-```
-
-[delete-folder]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#deleteFolder-java.lang.String-
-
-Restore a File from the Trash
------------------------------
-
-To restore a file from the trash, effectively undeleting it, call [`BoxTrash#restoreFile(String fileID)`][restore-file]
-with the ID of the file. To avoid scenarios where the parent folder that previously contained the file is no longer available,
-the user does not have permission to create items in that folder, or that folder has an item with the same name as the one
-being restored; you can pass a new parent folder ID and/or file name to
-[`BoxTrash#restoreFile(String fileID, String newName, String newParentID)`][restore-file-safe]. The new name
-and parent will only be used if a conflict is encountered while trying to restore the file to its original location.
-
-
-```java
-String fileID = "125367";
-String newName = "Presentation 2018 ORIGINAL.pptx";
-String newParentID = "98765";
-
-BoxTrash trash = new BoxTrash(api);
-// Avoid conflicts at the original location
-trash.restoreFile(fileID, newName, newParentID);
-```
-
-[restore-file]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#restoreFile-java.lang.String-
-[restore-file-safe]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#restoreFile-java.lang.String-java.lang.String-java.lang.String-
-
-Restore a Folder from the Trash
--------------------------------
-
-To restore a folder from the trash, effectively undeleting it, call
-[`BoxTrash#restoreFolder(String folderID)`][restore-folder] with the ID of the folder. To avoid scenarios where the
-parent folder that previously contained the folder to be restored is no longer available, the user
-does not have permission to create items in that folder, or that folder has an item with the same name as the one
-being restored; you can pass a new parent folder ID and/or folder name to
-[`BoxTrash#restoreFolder(String folderID, String newName, String newParentID)`][restore-folder-safe]. The new name
-and parent will only be used if a conflict is encountered while trying to restore the folder to its original location.
-
-
-```java
-String folderID = "125367";
-String newName = "My Documents ORIGINAL";
-String newParentID = "98765";
-
-BoxTrash trash = new BoxTrash(api);
-// Avoid conflicts at the original location
-trash.restoreFolder(folderID, newName, newParentID);
-```
-
-[restore-folder]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#restoreFolder-java.lang.String-
-[restore-folder-safe]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxTrash.html#restoreFolder-java.lang.String-java.lang.String-java.lang.String-
diff --git a/doc/upgrades/3.x.x to 4.x.x.md b/doc/upgrades/3.x.x to 4.x.x.md
deleted file mode 100644
index 692d1167d..000000000
--- a/doc/upgrades/3.x.x to 4.x.x.md
+++ /dev/null
@@ -1,202 +0,0 @@
-# Migration guide for versions 3.x.x -> 4.x.x
-
-
-
-
-- [Configuration changes](#configuration-changes)
- - [BoxDeveloperEditionAPIConnection](#boxdevelopereditionapiconnection)
- - [MaxRequestAttempts](#maxrequestattempts)
-- [Removed deprecated methods and classes](#removed-deprecated-methods-and-classes)
-- [Replaced methods and classes](#replaced-methods-and-classes)
- - [Shared links](#shared-links)
- - [Retention Policies](#retention-policies)
- - [Enterprise Events](#enterprise-events)
- - [Search](#search)
- - [BoxGroup](#boxgroup)
- - [MetadataTemplate](#metadatatemplate)
- - [Others](#others)
-
-
-
-The most important change this release includes is the replacement of the HTTP library from a native one to
-OkHttp which allows SDK to:
-
- - Support the HTTP2 version of the HTTP protocol.
- - Support proxies that do not use only basic authentication method. For details on creating custom proxy authenticators and an example of
-NTLM proxy authentication, see [here](https://github.com/box/box-java-sdk/blob/kb/ok-http/doc/configuration.md#custom-proxy-authenticator).
-
-# Configuration changes
-
-## BoxDeveloperEditionAPIConnection
-Replaced `com.box.sdk.BoxDeveloperEditionAPIConnection#getAppUserConnection`with `com.box.sdk.BoxDeveloperEditionAPIConnection#getUserConnection`.
-
-### Example
-To create `com.box.sdk.BoxDeveloperEditionAPIConnection` configured for user access:
-```java
-Reader reader = new FileReader("some-config.json");
-BoxConfig boxConfig = BoxConfig.readFrom(reader);
-
-BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getUserConnection(boxConfig);
-```
-
-### Documentation
-You can read more on BoxDeveloperEditionAPIConnection [here](../../README.md#boxdevelopereditionapiconnectionasenterpriseuser).
-
-
-## MaxRequestAttempts
-The `MaxRequestAttempts` are removed from `com.box.sdk.BoxGlobalSettings` and replaced with `MaxRetryAttempts`.
-However, if you have API connection stored with the deprecated `MaxRequestAttempts` value it will be restored into `MaxRetryAttempts`.
-
-# Removed deprecated methods and classes
-1. `com.box.sdk.BoxAPIRequest.BoxAPIRequest(java.net.URL, java.lang.String)` - use constuctor that accepts `com.box.sdk.BoxAPIConnection`.
-2. `com.box.sdk.BoxUser.moveFolderToUser` - this method is removed as this operation is not allowed by API. You can only transfer root folder to another user using `com.box.sdk.BoxUser.transferContent`.
-
-# Replaced methods and classes
-
-## Getting thumbnail
-Method `com.box.sdk.BoxFile.getThumbnail` was removed. To get any file representation use `com.box.sdk.BoxFile.getRepresentationContent(java.lang.String, java.io.OutputStream)`
-or `com.box.sdk.BoxFile.getRepresentationContent(java.lang.String, java.lang.String, java.io.OutputStream)`.
-
-### Example
-To read the PDF representation of file with id `12345`:
-
-```java
-ByteArrayOutputStream output = new ByteArrayOutputStream();
-
-BoxFile file = new BoxFile(api, "12345");
-file.getRepresentationContent("[pdf]", output);
-```
-### Documentation
-
-For more details on getting representation content go [here](../files.md#get-representation-content).
-
-## Shared links
-Removed variant of methods that do not use `com.box.sdk.sharedlink.BoxSharedLinkRequest`:
-1. `com.box.sdk.BoxItem.createSharedLink`
-2. `com.box.sdk.BoxFile.createSharedLink`
-3. `com.box.sdk.BoxFolder.createSharedLink`
-4. `com.box.sdk.BoxWebLink.createSharedLink`
-
-### Example
-
-If you want to create a shared link, first create `com.box.sdk.sharedlink.BoxSharedLinkRequest`:
-```java
-Date unsharedDate = ...
-BoxFile file = new BoxFile(api, "id");
-BoxSharedLinkRequest sharedLinkRequest = new BoxSharedLinkRequest()
- .access(OPEN)
- .permissions(true, true)
- .unsharedDate(unsharedDate);
-
-BoxSharedLink sharedLink = file.createSharedLink(sharedLinkRequest);
-```
-
-### Documentation
-For details on shared links, see:
-1. [Create shared link for file](../files.md#create-a-shared-link)
-2. [Create shared link for folder](../folders.md#create-a-shared-link)
-3. [Create shared link for web link](../weblinks.md#create-shared-link)
-
-## Retention Policies
-Removed variant of methods that were not using `com.box.sdk.BoxRetentionPolicy.BoxRetentionPolicyAction`:
-1. `com.box.sdk.BoxRetentionPolicy.createFinitePolicy`
-
-### Example
-If you want to create a finite retention policy:
-```java
-BoxRetentionPolicy.createFinitePolicy(api, "My 30 days retention policy", 30, BoxRetentionPolicyAction.PermanentlyDelete);
-```
-
-### Documentation
-You can read more on creating retention policies [here](../retention_policies.md#create-retention-policy).
-
-## Enterprise Events
-Removed variant of methods that were not using `com.box.sdk.EnterpriseEventsRequest`:
-1. `com.box.sdk.EventLog.getEnterpriseEvents`
-### Example
-If you want to get historical enterprise events, first create `com.box.sdk.EnterpriseEventsRequest`:
-```java
-EnterpriseEventsRequest request = new EnterpriseEventsRequest().limit(20);
-EventLog.getEnterpriseEvents(api, request1);
-// process recieved events
-```
-### Documentation
-You can read more on getting enterprise events [here](../events.md#enterprise--admin--events).
-
-## Search
-Method `com.box.sdk.BoxFolder.search` is replaced with class `com.box.sdk.BoxSearch`.
-
-### Example
-If you would like to find the first 10 files matching "taxes":
-```java
-long offsetValue = 0;
-long limitValue = 10;
-BoxSearchParameters searchParams = new BoxSearchParameters();
-searchParams.setQuery("taxes");
-searchParams.setType("file");
-
-BoxSearch boxSearch = new BoxSearch(api);
-boxSearch.searchRange(offsetValue, limitValue, searchParams);
-```
-
-### Documentation
-You can read more on search [here](../search.md).
-
-## BoxGroup
-All methods that use `com.box.sdk.BoxGroupMembership.Role` were removed. Use ones that use `com.box.sdk.BoxGroupMembership.GroupRole`.
-Also `com.box.sdk.BoxGroupMembership.Role` was replaced with `com.box.sdk.BoxGroupMembership.GroupRole`.
-
-### Example
-To add a new member to a group with specific role:
-```java
-BoxUser user = ...
-BoxGroup boxGroup = new BoxGroup(api, "group_id");
-boxGroup.addMembership(user, BoxGroupMembership.GroupRole.ADMIN);
-```
-To get membership role use `com.box.sdk.BoxGroupMembership.Info.getGroupRole`:
-```java
-BoxGroupMembership membership = new BoxGroupMembership(api, "membership_id");
-membership.getInfo().getGroupRole();
-```
-
-To change membership role use `com.box.sdk.BoxGroupMembership.Info.setGroupRole`:
-```java
-BoxGroupMembership membership = new BoxGroupMembership(api, "membership_id");
-BoxGroupMembership.Info membershipInfo = membership.getInfo();
-membershipInfo.setGroupRole(BoxGroupMembership.GroupRole.MEMBER);
-membership.updateInfo(membershipInfo);
-```
-
-### Documentation
-You can read more on groups [here](../groups.md).
-
-## MetadataTemplate
-In `com.box.sdk.MetadataTemplate` methods that do not use `com.box.sdk.MetadataQuery` were removed.
-
-### Example
-To execute a metadata query first create `com.box.sdk.MetadataQuery` instance.
-```java
-MetadataQuery mQuery = new MetadataQuery("enterprise_341532.test");
-mQuery.setQuery("testfield = :arg");
-mQuery.setAncestorFolderId("0");
-mQuery.setOrderBy(
- MetadataQuery.OrderBy.ascending("primarySortKey"),
- MetadataQuery.OrderBy.ascending("secondarySortKey")
-);
-mQuery.addParameter("arg", "test");
-mQuery.setFields("metadata.enterprise_341532.test.customField");
-MetadataTemplate.executeMetadataQuery(api, mQuery);
-```
-
-### Documentation
-You can read more on how to execute metadata query [here](../metadata_template.md#execute-metadata-query).
-
-## Others
-| Old | New |
-|:-------------------------------------------------------|:--- |
- | `com.box.sdk.BoxEvent.getType` |`com.box.sdk.BoxEvent.getEventType` |
- | `com.box.sdk.BoxEvent.Type` | `com.box.sdk.BoxEvent.EventType` |
- | `com.box.sdk.BoxFile.uploadVersion` | `com.box.sdk.BoxFile.uploadNewVersion` |
- | `com.box.sdk.BoxGlobalSettings.getMaxRequestAttempts` | `com.box.sdk.BoxGlobalSettings.getMaxRetryAttempts` |
- | `com.box.sdk.BoxGlobalSettings.setMaxRequestAttempts` | `com.box.sdk.BoxGlobalSettings.setMaxRetryAttempts` |
- | `com.box.sdk.BoxTask.Info.getAction` | `com.box.sdk.BoxTask.Info.getTaskType` |
diff --git a/doc/upgrading.md b/doc/upgrading.md
deleted file mode 100644
index ed966930f..000000000
--- a/doc/upgrading.md
+++ /dev/null
@@ -1,116 +0,0 @@
-Upgrading to v4
-===============
-
-v4 of the Box Java SDK introduces a lot of new design changes. Since this is a
-major version bump, there will be breaking changes that will require you to
-update your application.
-
-What's New
-----------
-
-### Features
-
-* __Automatic rate-limiting and error retry.__ API requests will automatically
- be retried with exponential back off if a 500+ (server error) or 429 (too many
- requests) response code is returned.
-* __OAuth redesign.__ OAuth should now be easier to use, allowing you to
- authenticate with an access token, auth code, or developer token.
-* __New EventStream class.__ This class makes it easier to listen for API events
- by allowing you to specify listeners that will be notified when an event
- occurs.
-* __New classes for making custom API requests.__ The BoxAPIRequest and
- BoxAPIResponse classes make it easy to send custom requests to the API while
- still having OAuth, rate-limiting back off, error handling and response
- parsing automatically handled.
-
-### General Improvements
-
-* __Simpler and more intuitive design.__ We aimed to make the overall design of
- the SDK more intuitive and easier to learn.
-* __More documentation and examples.__ The Javadocs have been completely
- overhauled and there are new guides explaining how to accomplish common tasks
- with the SDK.
-* __SDK size has been dramatically decreased.__ Many of the SDK's dependencies
- have been removed and its overall size has been reduced - making it more
- suitable for mobile apps.
-* __Easier integration.__ With a single build process, it's easier and simpler
- to get the SDK building with other applications. It also follows the standard
- directory layout, making it easier to import into various IDEs or build
- systems.
-
-Authentication
---------------
-
-Authentication has been simplified by allowing you to provide tokens or auth
-codes directly. All authentication is now done by creating a `BoxAPIConnection`
-in order to establish an authenticated connection with the API.
-
-Connect to the API using a developer token:
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
-```
-
-Connect to the API using access and refresh tokens:
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("CLIENT-ID", "CLIENT-SECRET",
- "ACCESS-TOKEN", "REFRESH-TOKEN");
-```
-
-Connect to the API using an auth code:
-
-```java
-BoxAPIConnection api = new BoxAPIConnection("CLIENT-ID", "CLIENT-SECRET",
- "AUTH-CODE");
-```
-
-More information on authentication can be found [here](authentication.md).
-
-New Resource Types
-------------------
-
-Previously, interaction with the API was done through managers and request
-objects. For example:
-
-```java
-BoxClient client = new BoxClient(...);
-IBoxFilesManager filesManager = boxClient.getFilesManager();
-
-BoxDefaultRequestObject requestObj = new BoxDefaultRequestObject();
-requestObj.getRequestExtras().addField(BoxFile.FIELD_SHA1);
-requestObj.getRequestExtras().addField(BoxFile.FIELD_DESCRIPTION);
-
-BoxFile file = filesManager.getFile(fileId, requestObj);
-```
-
-These objects have been removed and interacting with the API has been
-simplified. Resources can now be manipulated directly without needing to use
-managers or build custom requests.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection(...);
-BoxFile file = new BoxFile(api, fileID);
-BoxFile.Info fileInfo = file.getInfo("sha1", "description");
-```
-
-More information on resource types can be found [here](resource-types.md).
-
-Custom Requests
----------------
-
-The SDK now provides request and response objects that allow you to easily make
-custom requests to the Box API. These objects will handle authentication,
-automatic retry, rate-limiting and errors out-of-the-box, giving you the
-flexibility to make your own API requests without having to worry about handling
-these things yourself.
-
-```java
-BoxAPIConnection api = new BoxAPIConnection(...);
-URL url = new URL("https://api.box.com/2.0/folders/0/items?fields=name,created_at")
-BoxJSONRequest request = new BoxJSONRequest(api, url, "GET");
-BoxJSONResponse response = (BoxJSONResponse) request.send();
-String json = response.getJSON();
-```
-
-More information on resource types can be found [here](overview.md).
diff --git a/doc/users.md b/doc/users.md
deleted file mode 100644
index 047dd478c..000000000
--- a/doc/users.md
+++ /dev/null
@@ -1,321 +0,0 @@
-# Users
-
-Users represent an individual's account on Box.
-
-
-
-
-
-- [Get the Current User's Information](#get-the-current-users-information)
-- [Get User Information](#get-user-information)
-- [Get Avatar for a User](#get-avatar-for-a-user)
-- [Add or update user avatar](#add-or-update-user-avatar)
-- [Delete user avatar](#delete-user-avatar)
-- [Create An Enterprise User](#create-an-enterprise-user)
-- [Create An App User](#create-an-app-user)
-- [Update User](#update-user)
-- [Delete User](#delete-user)
-- [Invite User](#invite-user)
-- [Get Email Aliases](#get-email-aliases)
-- [Add Email Alias](#add-email-alias)
-- [Delete Email Alias](#delete-email-alias)
-- [Get Enterprise Users](#get-enterprise-users)
-- [Get Enterprise Users (Marker Pagination)](#get-enterprise-users-marker-pagination)
-- [Get App Users By External App User ID](#get-app-users-by-external-app-user-id)
-- [Get App Users By External App User ID (Marker Pagination)](#get-app-users-by-external-app-user-id-marker-pagination)
-- [Move User's Folder](#move-users-folder)
-
-
-
-## Get the Current User's Information
-
-To get the current user, call the static
-[`getCurrentUser(BoxAPIConnection api)`][get-current-user] method.
-Then use [`getInfo(String... fields)`][get-info] to get information about the user.
-
-
-```java
-BoxUser user = BoxUser.getCurrentUser(api);
-BoxUser.Info info = user.getInfo();
-```
-
-[get-current-user]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getCurrentUser-com.box.sdk.BoxAPIConnection-
-[get-info]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getInfo-java.lang.String...-
-
-## Get User Information
-
-To get information about a user, call the [`getInfo()`][get-info] method on the user object.
-
-
-```java
-String userID = "33333";
-BoxUser user = new BoxUser(api, userID);
-BoxUser.Info userInfo = user.getInfo();
-```
-
-## Get Avatar for a User
-
-To retrieve the avatar for a User, call the [`downloadAvatar(OutputStream stream)`][download-avatar] method on the user object.
-
-
-```java
-String userID = "33333";
-// some stream do download avatar
-try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()){
- BoxUser user=new BoxUser(api,userID);
- user.downloadAvatar(outputStream);
-} catch (IOException e) {
- throw new RuntimeException(e);
-}
-```
-
-## Add or update user avatar
-
-To add or update the avatar for a User, call the [`uploadAvatar(File)`][upload-avatar-1] method on the user object.
-
-
-```java
-String userID = "33333";
-BoxUser user = new BoxUser(api, userID);
-AvatarUploadResponse response = user.uploadAvatar(new File("path_to_avatar_file"));
-```
-In return, you will get an object with links to several representations of an avatar within Box account.
-Your image file should have correct extension, it is used to determine image type used in upload.
-Supported formats are JPG and PNG. The image size cannot exceed 1024 * 1024 pixels or 1MB.
-
-You can upload avatart using `InputStream` with [`uploadAvatar(InputStream, String)`][upload-avatar-2]:
-
-```java
-String userID = "33333";
-BoxUser user = new BoxUser(api, userID);
-AvatarUploadResponse response = user.uploadAvatar(Files.newInputStream(Paths.get("path_to_avatar_file")), "file_name.jpeg");
-```
-
-Both upload methods supports [`ProgressListener`][progress-listener].
-
-## Delete user avatar
-
-To delete User avatar image use [`deleteAvatar()`][delete-avatar] method on the user object:
-
-
-```java
-String userID = "33333";
-BoxUser user = new BoxUser(api, userID);
-user.deleteAvatar();
-```
-
-[download-avatar]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#downloadAvatar-java.io.OutputStream-
-[upload-avatar-1]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#uploadAvatar-java.io.File-
-[upload-avatar-2]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#uploadAvatar-java.io.InputStream-java.lang.String-
-[delete-avatar]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#deleteAvatar--
-[progress-listener]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/ProgressListener.html
-
-## Create An Enterprise User
-
-To create an enterprise user, call the
-[`createEnterpriseUser(BoxAPIConnection api, String loginEmail, String userName, String... fields)`][create-enterprise-user].
-To pass additional optional parameters, use the
-[`createEnterpriseUser(BoxAPIConnection api, String loginEmail, String userName, CreateUserParams options, String... fields)`][create-enterprise-user-2]
-method.
-
-
-```java
-BoxUser.Info createdUserInfo = BoxUser.createEnterpriseUser(api, "user@example.com", "A User");
-```
-
-[create-enterprise-user]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#createEnterpriseUser-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String-java.lang.String...-
-[create-enterprise-user-2]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#createAppUser-com.box.sdk.BoxAPIConnection-java.lang.String-com.box.sdk.CreateUserParams-java.lang.String...-
-
-## Create An App User
-
-To create an app user, call the
-[`createAppUser(BoxAPIConnection api, String userName, String... fields)`][create-app-user] method.
-To pass additional optional parameters, use the
-[`createAppUser(BoxAPIConnection api, String userName, CreateUserParams options, String... fields)`][create-app-user-2] method.
-
-
-```java
-BoxUser.Info createdUserInfo = BoxUser.createAppUser(api, "A User");
-```
-
-```java
-CreateUserParams params = new CreateUserParams();
-params.setExternalAppUserId("An Identifier Like Login");
-BoxUser.Info createdUserInfo = BoxUser.createAppUser(api, "A User", params);
-```
-
-[create-app-user]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#createAppUser-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String...-
-[create-app-user-2]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#createAppUser-com.box.sdk.BoxAPIConnection-java.lang.String-com.box.sdk.CreateUserParams-java.lang.String...-
-
-
-## Update User
-
-To update a user call the [`updateInfo(BoxUser.Info fieldsToUpdate, String... fields)`][update-info] method.
-
-
-```java
-BoxUser user = new BoxUser(api, "0");
-BoxUser.Info info = user.new Info();
-info.setName(name);
-user.updateInfo(info);
-```
-
-[update-info]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#updateInfo-com.box.sdk.BoxUser.Info-java.lang.String...-
-
-## Delete User
-
-To delete a user call the [`delete(boolean notifyUser, boolean force)`][deleteWithParams] method or one that
-uses API default parameters [`delete()][delete]
-
-The `notifyUser` determines whether the user should receive an email about the deletion,
-and the `force` parameter will cause the user to be deleted even if they still have files
-in their account.
-
-
-```java
-BoxUser user = new BoxUser(api, "0");
-user.delete(false, false);
-```
-
-[deleteWithParams]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#delete-boolean-boolean-
-[delete]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#delete--
-
-## Invite User
-
-To invite an existing user to join an Enterprise call the
-[`inviteUser(String enterpriseID, String userEmail)`][invite] method.
-
-
-```java
-BoxUser user = new BoxUser(api, "0");
-user.invite("Enterprise ID", "Invited User Login");
-```
-
-[invite]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#inviteUser-java.lang.String-java.lang.String-
-
-## Get Email Aliases
-
-To get a user's email aliases call the [`getEmailAliases()`][get-email-aliases] method.
-
-
-```java
-BoxUser user = new BoxUser(api, "0");
-Collection emailAliases = user.getEmailAliases();
-```
-
-[get-email-aliases]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getEmailAliases--
-
-## Add Email Alias
-
-To add an email alias for a user, call the
-[`addEmailAlias(String emailAddress)`][add-email-alias] method.
-
-
-```java
-BoxUser user = new BoxUser(api, "0");
-user.addEmailAlias("user+alias@example.com");
-```
-
-Enterprise admins can automatically confirm the new email alias by calling the
-[`addEmailAlias(String emailAddress, boolean confirm)`][add-email-alias2] method:
-
-```java
-BoxUser user = new BoxUser(api, "0");
-user.addEmailAlias("user+alias@eexample.com", true);
-```
-
-[add-email-alias]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#addEmailAlias-java.lang.String-
-[add-email-alias2]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#addEmailAlias-java.lang.String-boolean-
-
-## Delete Email Alias
-
-To delete a users email alias call the
-[`deleteEmailAlias(String emailAliasID)`][delete-email-alias] method.
-
-
-```java
-BoxUser user = new BoxUser(api, "0");
-user.deleteEmailAlias("123");
-```
-
-[delete-email-alias]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#deleteEmailAlias-java.lang.String-
-
-## Get Enterprise Users
-
-To get an enterprise's users call the
-[`getAllEnterpriseUsers(BoxAPIConnection api)`][get-all-enterprise-users],
-[`getAllEnterpriseUsers(BoxAPIConnection api, String filterTerm, String... fields)`][get-all-enterprise-users-2], or
-[`getAllEnterpriseOrExternalUsers(BoxAPIConnection api, String filterTerm, String... fields)`][get-all-enterprise-users-3] method.
-
-
-```java
-Iterable users = BoxUser.getAllEnterpriseUsers(api);
-```
-
-[get-all-enterprise-users]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAllEnterpriseUsers-com.box.sdk.BoxAPIConnection-
-[get-all-enterprise-users-2]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAllEnterpriseUsers-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String...-
-[get-all-enterprise-users-3]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAllEnterpriseOrExternalUsers-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String...-
-
-## Get Enterprise Users (Marker Pagination)
-
-To get a list of all users in an enterprise, call the
-[`getAllEnterpriseUsers(BoxAPIConnection api, boolean usemarker, String marker)`][get-all-enterprise-users],
-[`getAllEnterpriseUsers(BoxAPIConnection api, String filterTerm, boolean usemarker, String marker, String... fields)`][get-all-enterprise-users-2], or
-[`getAllEnterpriseOrExternalUsers(BoxAPIConnection api, String filterTerm, boolean usemarker, String marker, String... fields)`][get-all-enterprise-users-3] method.
-To get a list of users starting from the first page of results, set the `usemarker` parameter as `true` and the `marker` parameter as `null`. If you would like to get the marker for the next page of results from the page the iterator is currently on, you must cast the iterable to `BoxResourseIterable` and call `getNextMarker()` on that iterable. For more information on marker pagination, look here: https://developer.box.com/en/guides/api-calls/pagination/marker-based/.
-
-
-```java
-Iterable users = BoxUser.getAllEnterpriseUsers(api, true, null);
-
-// Get marker
-String marker = ((BoxResourceIterable) users).getNextMarker();
-```
-
-[get-all-enterprise-users]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAllEnterpriseUsers-com.box.sdk.BoxAPIConnection-
-[get-all-enterprise-users-2]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAllEnterpriseUsers-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String...-
-[get-all-enterprise-users-3]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAllEnterpriseOrExternalUsers-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String...-
-
-## Get App Users By External App User ID
-
-To get app user using external app user ID, call the
-[`getAppUsersByExternalAppUserID(BoxAPIConnection api, String externalID, String... fields)`][get-app-users-by-external-app-user-id].
-This method allows you to easily associate Box app users with your application's
-identifiers for those users.
-
-```java
-Iterable users = BoxUser.getAppUsersByExternalAppUserID(api, "external_app_user_id");
-```
-
-[get-app-users-by-external-app-user-id]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAppUsersByExternalAppUserID-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String...-
-
-## Get App Users By External App User ID (Marker Pagination)
-
-To get app user using external app user ID, call the
-[`getAppUsersByExternalAppUserID(BoxAPIConnection api, String externalID, boolean usemarker, String marker, String... fields)`][get-app-users-by-external-app-user-id].
-This method allows you to easily associate Box app users with your application's
-identifiers for those users. To get a list of users starting from the first page of results, set the `usemarker` parameter as `true` and the `marker` parameter as `null`. If you would like to get the marker for the next page of results from the page the iterator is currently on, you must cast the iterable to `BoxResourseIterable` and call `getNextMarker()` on that iterable. For more information on marker pagination, look here: https://developer.box.com/en/guides/api-calls/pagination/marker-based/.
-
-```java
-Iterable users = BoxUser.getAppUsersByExternalAppUserID(api, "external_app_user_id");
-
-// Get marker
-String marker = ((BoxResourceIterable) users).getNextMarker();
-```
-
-[get-app-users-by-external-app-user-id]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#getAppUsersByExternalAppUserID-com.box.sdk.BoxAPIConnection-java.lang.String-java.lang.String...-
-
-## Move User's Folder
-
-To move all of a user's content to another user, call the
-[`transferContent(String destinationUserID)`][transfer-folder-to-new-user] method.
-
-
-```java
-String sourceUserID = "11111";
-String destinationUserID = "22222";
-BoxUser sourceUser = new BoxUser(api, sourceUserID);
-BoxFolder.Info transferredFolderInfo = sourceUser.transferContent(destinationUserID);
-```
-
-[transfer-folder-to-new-user]: https://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxUser.html#transferContent-java.lang.String-
diff --git a/doc/watermarking.md b/doc/watermarking.md
deleted file mode 100644
index 65d28f86d..000000000
--- a/doc/watermarking.md
+++ /dev/null
@@ -1,99 +0,0 @@
-Watermarking
-======
-
-The ability to watermark files and folders is represented as a sub-resource on the Files and Folders resources, respectively. You can think of the sub-resource as a "label" marking whether the file or folder is watermarked or not. If you apply a watermark label to a folder, then all files inside of it will be protected by the watermark (e.g. previews will be watermarked). However, those files' watermark sub-resource is independent from the folder that got watermarked. This allows you to watermark files and folders independently.
-
-
-
-
-
-- [Get Watermark on File](#get-watermark-on-file)
-- [Apply Watermark on File](#apply-watermark-on-file)
-- [Remove Watermark on File](#remove-watermark-on-file)
-- [Get Watermark on Folder](#get-watermark-on-folder)
-- [Apply Watermark on Folder](#apply-watermark-on-folder)
-- [Remove Watermark on Folder](#remove-watermark-on-folder)
-
-
-
-Get Watermark on File
---------------
-
-Calling [`getWatermark(String... fields)`][get-watermark-on-file] will return a BoxWatermark object containing information about the watermark associated for this file. If the file does not have a watermark applied on it, a 404 Not Found will be returned.
-
-
-```java
-BoxFile file = new BoxFile(api, id);
-BoxWatermark watermark = file.getWatermark();
-```
-
-[get-watermark-on-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#getWatermark-java.lang.String...-
-
-Apply Watermark on File
---------------
-
-To apply watermark on file, call [`applyWatermark()`][apply-watermark-on-file] method. While the endpoint accepts a JSON body describing the watermark to apply, custom watermarks are not supported yet.
-The method will return a BoxWatermark object containing information about the watermark applied on this file.
-
-
-```java
-BoxFile file = new BoxFile(api, id);
-file.applyWatermark();
-```
-
-[apply-watermark-on-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#applyWatermark--
-
-Remove Watermark on File
---------------
-
-A watermark can be removed by calling the [`removeWatermark()`][remove-watermark-on-file] method.
-If the file did not have a watermark applied on it, a 404 Not Found will be returned by API.
-
-
-```java
-BoxFile file = new BoxFile(api, id);
-file.removeWatermark();
-```
-
-[remove-watermark-on-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFile.html#removeWatermark--
-
-Get Watermark on Folder
---------------
-
-Calling [`getWatermark(String... fields)`][get-watermark-on-folder] will return a BoxWatermark object containing information about the watermark associated for this folder. If the folder does not have a watermark applied on it, a 404 Not Found will be returned.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, id);
-BoxWatermark watermark = folder.getWatermark();
-```
-
-[get-watermark-on-folder]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#getWatermark-java.lang.String...-
-
-Apply Watermark on Folder
---------------
-
-To apply watermark on folder, call [`applyWatermark()`][apply-watermark-on-folder] method.
-The method will return a BoxWatermark object containing information about the watermark applied on this folder.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, id);
-fodler.applyWatermark();
-```
-
-[apply-watermark-on-folder]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#applyWatermark--
-
-Remove Watermark on Folder
---------------
-
-A watermark can be removed by calling the [`removeWatermark()`][remove-watermark-on-folder] method.
-If the folder did not have a watermark applied on it, a 404 Not Found will be returned by API.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, id);
-folder.removeWatermark();
-```
-
-[remove-watermark-on-folder]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#removeWatermark--
diff --git a/doc/webhooks.md b/doc/webhooks.md
deleted file mode 100644
index 1597e4f6a..000000000
--- a/doc/webhooks.md
+++ /dev/null
@@ -1,156 +0,0 @@
-Webhooks
-======
-
-Webhooks enable you to attach event triggers to Box files and folders. Event triggers monitor events on Box objects and notify your application when they occur. A webhook notifies your application by sending HTTP requests to a URL of your choosing.
-
-
-
-
-
-- [Get a Webhook](#get-a-webhook)
-- [Get All Webhooks](#get-all-webhooks)
-- [Create a Webhook](#create-a-webhook)
-- [Delete a Webhook](#delete-a-webhook)
-- [Update a Webhook](#update-a-webhook)
-- [Verify a Webhook Message](#verify-a-webhook-message)
-
-
-
-Get a Webhook
--------------
-
-A webhook infocan be retrieved by calling the [`getInfo(String... fields)`][get-info] method.
-
-
-```java
-BoxWebHook webhook = new BoxWebHook(api, id);
-BoxWebHook.Info info = webhook.getInfo();
-```
-
-[get-info]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebHook.html#getInfo-java.lang.String...-
-
-Get All Webhooks
-----------------
-
-Calling the static [`all(BoxAPIConnection api, String... fields)`][all] will
-return an iterable that will page through all defined webhooks for the
-requesting application and user.
-
-
-```java
-Iterable webhooks = BoxWebHook.all(api);
-for (BoxWebHook.Info webhookInfo: webhooks) {
- // Do something with the webhook.
-}
-```
-
-[all]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebHook.html#all-com.box.sdk.BoxAPIConnection-java.lang.String...-
-
-Create a Webhook
-----------------
-
-The static [`create(BoxResource targetItem, URL callbackURL, BoxWebHook.Trigger... triggerEvents)`][create-webhook]
-method will let you create a new webhook for a specified target object.
-
-
-```java
-// Listen for preview events for a file
-BoxFile file = new BoxFile(api, id);
-BoxWebHook.Info webhookInfo = BoxWebHook.create(file, url, BoxWebHook.Trigger.FILE.PREVIEWED);
-```
-
-
-```java
-// Listen for file upload events in the specified folder
-BoxFolder folder = new BoxFolder(api, id);
-BoxWebHook.Info webhookInfo = BoxWebHook.create(folder, url, BoxWebHook.Trigger.FILE_UPLOADED);
-```
-
-[create-webhook]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebHook.html#create-com.box.sdk.BoxResource-java.net.URL-com.box.sdk.BoxWebHook.Trigger...-
-
-Delete a Webhook
-----------------
-
-A webhook can be deleted by calling the [`delete()`][delete] method.
-
-
-```java
-BoxWebHook webhook = new BoxWebHook(api, id);
-webhook.delete();
-```
-
-[delete]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebHook.html#delete--
-
-Update a Webhook
-----------------
-
-A webhook can be updated by calling the [`update(BoxWebHook.Info fieldsToUpdate)`][update] method.
-
-
-```java
-BoxWebHook webhook = new BoxWebHook(api, id);
-BoxWebHook.Info info = webhook.new Info();
-info.setAddress(url);
-webhook.update(info);
-```
-
-[update]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebHook.html#updateInfo-com.box.sdk.BoxWebHook.Info-
-
-Verify a Webhook Message
-------------------------
-
-When you receive a webhook message from Box, you should validate that it actually came from Box by calling
-[`BoxWebHookSignatureVerifier#verify(String sigVersion, String sigAlgorithm, String primarySignature, String secondarySignature, String payload, String deliveryTimestamp)`][verify]
-
-> __Note:__ It is recommended to ensure that your application and verifier use both a primary and secondary key
-> to ensure that these keys can be safely rotated.
-
-
-```java
-// Webhook message contents are shown for demonstration purposes
-// Normally these would come from your HTTP handler
-
-// Webhook message HTTP body
-String messagePayload = "{"
- + "\"type\":\"webhook_event","
- + "\"webhook\":{"
- + "\"id\":\"1234567890\""
- + "},"
- + "\"trigger\":\"FILE.UPLOADED\","
- + "\"source\":{"
- + "\"id\":\"1234567890\","
- + "\"type\":\"file\","
- + "\"name\":\"Test.txt\""
- + "}}";
-
-// Webhook message HTTP headers
-Map messageHeaders = new HashMap();
-headers.put("BOX-DELIVERY-ID", "f96bb54b-ee16-4fc5-aa65-8c2d9e5b546f");
-headers.put("BOX-DELIVERY-TIMESTAMP", "2020-01-01T00:00:00-07:00");
-headers.put("BOX-SIGNATURE-ALGORITHM", "HmacSHA256");
-headers.put("BOX-SIGNATURE-PRIMARY", "6TfeAW3A1PASkgboxxA5yqHNKOwFyMWuEXny/FPD5hI=");
-headers.put("BOX-SIGNATURE-SECONDARY", "v+1CD1Jdo3muIcbpv5lxxgPglOqMfsNHPV899xWYydo=");
-headers.put("BOX-SIGNATURE-VERSION", "1");
-
-// Your application's webhook keys, obtained from the Box Developer Console
-String primaryKey = "4py2I9eSFb0ezXH5iPeQRcFK1LRLCdip";
-String secondaryKey = "Aq5EEEjAu4ssbz8n9UMu7EerI0LKj2TL";
-
-BoxWebHookSignatureVerifier verifier = new BoxWebHookSignatureVerifier(primaryKey, secondaryKey);
-boolean isValidMessage = verifier.verify(
- headers.get("BOX-SIGNATURE-VERSION"),
- headers.get("BOX-SIGNATURE-ALGORITHM"),
- headers.get("BOX-SIGNATURE-PRIMARY"),
- headers.get("BOX-SIGNATURE-SECONDARY"),
- messagePayload,
- headers.get("BOX-DELIVERY-TIMESTAMP")
-);
-
-if (isValidMessage) {
- // Message is valid, handle it
-} else {
- // Message is invalid, reject it
-}
-```
-
-[verify]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebHookSignatureVerifier.html#verify-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-
diff --git a/doc/weblinks.md b/doc/weblinks.md
deleted file mode 100644
index 8fa09b4de..000000000
--- a/doc/weblinks.md
+++ /dev/null
@@ -1,126 +0,0 @@
-Web Links
-======
-
-Web links are objects that point to URLs. These objects are also known as
-bookmarks within the Box web application. Web link objects are treated
-similarly to file objects.
-
-
-
-
-
-- [Create Web Link](#create-web-link)
-- [Get Web Link](#get-web-link)
-- [Update Web Link](#update-web-link)
-- [Delete Web Link](#delete-web-link)
-- [Create Shared Link](#create-shared-link)
-- [Remove Shared Link](#remove-shared-link)
-
-
-
-Create Web Link
----------------
-
-Calling [`BoxFolder.createWebLink(String name, URL url, String description)`][create-web-link] will let you create a new web link with a specified name and description.
-
-
-```java
-BoxFolder folder = new BoxFolder(api, id);
-URL url = new URL("https://www.example.com");
-folder.createWebLink("Link to Example", url, "This goes to an example page");
-```
-
-Name and description params are optional, so it is possible to create web link
-with only one of them or with URL only:
-[`BoxFolder.createWebLink(URL url)`][create-web-link2]
-
-```java
-BoxFolder folder = new BoxFolder(api, id);
-URL url = new URL("https://www.example.com");
-BoxWebLink.Info webLinkInfo = folder.createWebLink(url);
-```
-
-[create-web-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#createWebLink-java.lang.String-java.net.URL-java.lang.String-
-[create-web-link2]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxFolder.html#createWebLink-java.net.URL-
-
-Get Web Link
-------------
-
-A web link info can be retrieved by calling the [`getInfo(String... fields)`][get-web-link] method.
-Optional parameters can be used to retrieve specific fields of the Device Pin object.
-
-
-```java
-BoxWebLink webLink = new BoxWebLink(api, id);
-BoxWebLink.Info webLinkInfo = webLink.getInfo();
-```
-
-[get-web-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebLink.html#getInfo-java.lang.String...-
-
-Update Web Link
----------------
-
-A web link can be updated by calling the
-[`updateInfo(BoxWebLink.Info fieldsToUpdate)`][update-web-link] method.
-
-
-```java
-BoxWebLink webLink = new BoxWebLink(api, id);
-BoxWebLink.Info webLinkInfo = webLink.new Info();
-webLinkInfo.setName("new name for weblink");
-webLink.updateInfo(webLinkInfo);
-```
-
-[update-web-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebLink.html#updateInfo-com.box.sdk.BoxWebLink.Info-
-
-Delete Web Link
----------------
-
-A web link can be deleted by calling the [`delete()`][delete] method.
-
-
-```java
-BoxWebLink webLink = new BoxWebLink(api, id);
-webLink.delete();
-```
-
-[delete]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebLink.html#delete--
-
-Create Shared Link
---------------------
-
-You can create a shared link for a web link by calling the
-[`createSharedLink(BoxSharedLinkWithoutPermissionsRequest sharedLinkRequest)`][create-shared-link]
-method.
-
-
-```java
-// Optionally we can calculate and set the date when shared link will automatically be disabled
-final long ONE_WEEK_MILLIS = 1000 * 60 * 60 * 24 * 7;
-long unsharedTimestamp = System.currentTimeMillis() + ONE_WEEK_MILLIS;
-Date unsharedDate = new Date(unsharedTimestamp);
-
-BoxWebLink webLink = new BoxWebLink(api, "id");
-BoxSharedLinkWithoutPermissionsRequest sharedLinkRequest = new BoxSharedLinkWithoutPermissionsRequest()
- .access(OPEN)
- .unsharedDate(unsharedDate);
-BoxSharedLink sharedLink = webLink.createSharedLink(sharedLinkRequest);
-```
-
-[create-shared-link]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxWebLink.html#createSharedLink-com.box.sdk.sharedlink.BoxSharedLinkWithoutPermissionsRequest-
-
-Remove Shared Link
---------------------
-
-You can remove a shared link for a web link by calling the [`removeSharedLink`](remove-shared-link) method.
-
-
-```java
-BoxWebLink webLink = new BoxWebLink(api, "12345");
-BoxWebLink.Info webLinkInfo = webLink.getInfo();
-info.removeSharedLink()
-webLink.updateInfo(info)
-```
-
-[remove-shared-link]: https://box.github.io/box-java-sdk/javadoc/com/box/sdk/BoxWebLink.html#removeSharedLink--
-
diff --git a/doc/zip_download.md b/doc/zip_download.md
deleted file mode 100644
index 32262f155..000000000
--- a/doc/zip_download.md
+++ /dev/null
@@ -1,58 +0,0 @@
-Zip Download
-======
-
-Allows you to create a temporary zip file of Box files and folders and download them.
-
-
-
-
-
-- [Create a Zip File](#create-a-zip-file)
-- [Download a Zip File](#download-a-zip-file)
-
-
-
-Create a Zip File
----------------
-
-Calling [`BoxZip.create(String name, List items)`][create-a-zip-file] will let you create a new zip file with the specified name and
-with the specified items and will return a `BoxZipInfo` object with the download link. This file does not show up in your Box account, but will be temporarily
-available for download.
-
-
-```java
-ArrayList items = new ArrayList();
-BoxZipItem file = new BoxZipItem("file", "12345");
-BoxZipItem folder = new BoxZipItem("folder", "156472");
-items.add(file);
-items.add(folder);
-BoxZip zip = new BoxZip(api);
-BoxZipInfo zipInfo = zip.create("Awesome Zip File", items);
-```
-
-[create-a-zip-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxZip.html
-
-Download a Zip File
-------------
-
-Calling [`BoxZip.download(String name, List items, OutputStream output)`][download-a-zip-file] will let you create a new zip file
-with the specified name and with the specified items and download it to the stream that is passed in. The return object is a `BoxZipDownloadStatus`
-object that contains information about the download, including whether it was successful. The created zip file does not show up in your Box account.
-
-
-```java
-ArrayList items = new ArrayList();
-BoxZipItem file = new BoxZipItem("file", "12345");
-BoxZipItem folder = new BoxZipItem("folder", "156472");
-items.add(file);
-items.add(folder);
-BoxZip zip = new BoxZip(api);
-FileOutputStream stream = new FileOutputStream();
-BoxZipDownloadStatus zipDownloadStatus = zip.download("Another Awesome Zip File", items, stream);
-stream.close();
-if (zipDownloadStatus.getState() == BoxZipDownloadStatus.State.SUCCEEDED) {
- System.out.println("Zip downloaded successfully");
-}
-```
-
-[download-a-zip-file]: http://opensource.box.com/box-java-sdk/javadoc/com/box/sdk/BoxZip.html
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 000000000..c41719199
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,101 @@
+# Documentation
+
+## Configuration
+
+This section covers the documentation required to get up and running with the SDK, including configuration, authentication, and client initialization for making API calls.
+
+* [Configuration](configuration.md)
+* [Authentication](authentication.md)
+* [Client](client.md)
+
+## Box API Usage
+
+General explanations of the available functionality and examples of how to use
+the SDK are available by topic:
+
+* [Ai](ai.md)
+* [Aistudio](aistudio.md)
+* [Appitemassociations](appitemassociations.md)
+* [Archives](archives.md)
+* [Authorization](authorization.md)
+* [Automateworkflows](automateworkflows.md)
+* [Avatars](avatars.md)
+* [Chunkeduploads](chunkeduploads.md)
+* [Classifications](classifications.md)
+* [Collaborationallowlistentries](collaborationallowlistentries.md)
+* [Collaborationallowlistexempttargets](collaborationallowlistexempttargets.md)
+* [Collections](collections.md)
+* [Comments](comments.md)
+* [Devicepinners](devicepinners.md)
+* [Docgen](docgen.md)
+* [Docgentemplate](docgentemplate.md)
+* [Downloads](downloads.md)
+* [Emailaliases](emailaliases.md)
+* [Enterpriseconfigurations](enterpriseconfigurations.md)
+* [Events](events.md)
+* [Externalusers](externalusers.md)
+* [Fileclassifications](fileclassifications.md)
+* [Filemetadata](filemetadata.md)
+* [Filerequests](filerequests.md)
+* [Files](files.md)
+* [Fileversionlegalholds](fileversionlegalholds.md)
+* [Fileversionretentions](fileversionretentions.md)
+* [Fileversions](fileversions.md)
+* [Filewatermarks](filewatermarks.md)
+* [Folderclassifications](folderclassifications.md)
+* [Folderlocks](folderlocks.md)
+* [Foldermetadata](foldermetadata.md)
+* [Folders](folders.md)
+* [Folderwatermarks](folderwatermarks.md)
+* [Groups](groups.md)
+* [Hubcollaborations](hubcollaborations.md)
+* [Hubdocument](hubdocument.md)
+* [Hubitems](hubitems.md)
+* [Hubs](hubs.md)
+* [Integrationmappings](integrationmappings.md)
+* [Invites](invites.md)
+* [Legalholdpolicies](legalholdpolicies.md)
+* [Legalholdpolicyassignments](legalholdpolicyassignments.md)
+* [Listcollaborations](listcollaborations.md)
+* [Memberships](memberships.md)
+* [Metadatacascadepolicies](metadatacascadepolicies.md)
+* [Metadatataxonomies](metadatataxonomies.md)
+* [Metadatatemplates](metadatatemplates.md)
+* [Notes](notes.md)
+* [Query](query.md)
+* [Recentitems](recentitems.md)
+* [Retentionpolicies](retentionpolicies.md)
+* [Retentionpolicyassignments](retentionpolicyassignments.md)
+* [Search](search.md)
+* [Sessiontermination](sessiontermination.md)
+* [Sharedlinksappitems](sharedlinksappitems.md)
+* [Sharedlinksfiles](sharedlinksfiles.md)
+* [Sharedlinksfolders](sharedlinksfolders.md)
+* [Sharedlinksweblinks](sharedlinksweblinks.md)
+* [Shieldinformationbarrierreports](shieldinformationbarrierreports.md)
+* [Shieldinformationbarriers](shieldinformationbarriers.md)
+* [Shieldinformationbarriersegmentmembers](shieldinformationbarriersegmentmembers.md)
+* [Shieldinformationbarriersegmentrestrictions](shieldinformationbarriersegmentrestrictions.md)
+* [Shieldinformationbarriersegments](shieldinformationbarriersegments.md)
+* [Shieldlists](shieldlists.md)
+* [Signrequests](signrequests.md)
+* [Signtemplates](signtemplates.md)
+* [Skills](skills.md)
+* [Storagepolicies](storagepolicies.md)
+* [Storagepolicyassignments](storagepolicyassignments.md)
+* [Taskassignments](taskassignments.md)
+* [Tasks](tasks.md)
+* [Termsofservices](termsofservices.md)
+* [Termsofserviceuserstatuses](termsofserviceuserstatuses.md)
+* [Transfer](transfer.md)
+* [Trashedfiles](trashedfiles.md)
+* [Trashedfolders](trashedfolders.md)
+* [Trasheditems](trasheditems.md)
+* [Trashedweblinks](trashedweblinks.md)
+* [Uploads](uploads.md)
+* [Usercollaborations](usercollaborations.md)
+* [Users](users.md)
+* [Webhooks](webhooks.md)
+* [Weblinks](weblinks.md)
+* [Workflows](workflows.md)
+* [Zipdownloads](zipdownloads.md)
diff --git a/docs/ai.md b/docs/ai.md
new file mode 100644
index 000000000..d324a5962
--- /dev/null
+++ b/docs/ai.md
@@ -0,0 +1,173 @@
+# AiManager
+
+
+- [Ask question](#ask-question)
+- [Generate text](#generate-text)
+- [Get AI agent default configuration](#get-ai-agent-default-configuration)
+- [Extract metadata (freeform)](#extract-metadata-freeform)
+- [Extract metadata (structured)](#extract-metadata-structured)
+
+## Ask question
+
+Sends an AI request to supported LLMs and returns an answer specifically focused on the user's question given the provided context.
+
+You can ask a question about a single file, several files, or the entire contents of a Box Hub. To search across and ask questions about everything in a Box Hub, send a single item with `type` set to `hubs` and the Hub's ID as the `id`. Box AI answers the question using the indexed content of all files in that Hub.
+
+Asking questions about a Box Hub requires Box AI for Hubs to be enabled in the Admin Console before the Hub is created, so that its content is indexed.
+
+This operation is performed by calling function `createAiAsk`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-ai-ask/).
+
+
+```
+client.getAi().createAiAsk(new AiAsk.Builder(AiAskModeField.SINGLE_ITEM_QA, "Which direction does the Sun rise?", Arrays.asList(new AiItemAsk.Builder(fileToAsk.getId(), AiItemAskTypeField.FILE).content("The Sun rises in the east").build())).aiAgent(aiAskAgentBasicTextConfig).build())
+```
+
+### Arguments
+
+- requestBody `AiAsk`
+ - Request body of createAiAsk method
+- headers `CreateAiAskHeaders`
+ - Headers of createAiAsk method
+
+
+### Returns
+
+This function returns a value of type `AiResponseFull`.
+
+A successful response including the answer from the LLM.No content is available to answer the question. This is returned when the request item is a hub, but content in the hubs is not indexed. To ensure content in the hub is indexed, make sure Box AI for Hubs in the Admin Console was enabled before hub creation.
+
+
+## Generate text
+
+Sends an AI request to supported Large Language Models (LLMs) and returns generated text based on the provided prompt.
+
+This operation is performed by calling function `createAiTextGen`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-ai-text-gen/).
+
+
+```
+client.getAi().createAiTextGen(new AiTextGen.Builder("Paraphrase the documents", Arrays.asList(new AiTextGenItemsField.Builder(fileToAsk.getId()).type(AiTextGenItemsTypeField.FILE).content("The Earth goes around the Sun. The Sun rises in the east in the morning.").build())).dialogueHistory(Arrays.asList(new AiDialogueHistory.Builder().prompt("What does the earth go around?").answer("The Sun").createdAt(dateTimeFromString("2021-01-01T00:00:00Z")).build(), new AiDialogueHistory.Builder().prompt("On Earth, where does the Sun rise?").answer("east").createdAt(dateTimeFromString("2021-01-01T00:00:00Z")).build())).build())
+```
+
+### Arguments
+
+- requestBody `AiTextGen`
+ - Request body of createAiTextGen method
+- headers `CreateAiTextGenHeaders`
+ - Headers of createAiTextGen method
+
+
+### Returns
+
+This function returns a value of type `AiResponse`.
+
+A successful response including the answer from the LLM.
+
+
+## Get AI agent default configuration
+
+Get the AI agent default config.
+
+This operation is performed by calling function `getAiAgentDefaultConfig`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-ai-agent-default/).
+
+
+```
+client.getAi().getAiAgentDefaultConfig(new GetAiAgentDefaultConfigQueryParams.Builder(GetAiAgentDefaultConfigQueryParamsModeField.ASK).language("en-US").build())
+```
+
+### Arguments
+
+- queryParams `GetAiAgentDefaultConfigQueryParams`
+ - Query parameters of getAiAgentDefaultConfig method
+- headers `GetAiAgentDefaultConfigHeaders`
+ - Headers of getAiAgentDefaultConfig method
+
+
+### Returns
+
+This function returns a value of type `AiAgent`.
+
+A successful response including the default agent configuration.
+This response can be one of the following four objects:
+* AI agent for questions
+* AI agent for text generation
+* AI agent for freeform metadata extraction
+* AI agent for structured metadata extraction.
+The response depends on the agent configuration requested in this endpoint.
+
+
+## Extract metadata (freeform)
+
+Sends an AI request to supported Large Language Models (LLMs) and extracts metadata in form of key-value pairs.
+In this request, both the prompt and the output can be freeform.
+Metadata template setup before sending the request is not required.
+
+This operation is performed by calling function `createAiExtract`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-ai-extract/).
+
+
+```
+client.getAi().createAiExtract(new AiExtract.Builder("firstName, lastName, location, yearOfBirth, company", Arrays.asList(new AiItemBase(file.getId()))).aiAgent(aiExtractAgentBasicTextConfig).build())
+```
+
+### Arguments
+
+- requestBody `AiExtract`
+ - Request body of createAiExtract method
+- headers `CreateAiExtractHeaders`
+ - Headers of createAiExtract method
+
+
+### Returns
+
+This function returns a value of type `AiResponse`.
+
+A response including the answer from the LLM.
+
+
+## Extract metadata (structured)
+
+Sends an AI request to supported Large Language Models (LLMs) and returns extracted metadata as a set of key-value pairs.
+
+To define the extraction structure, provide either a metadata template or a list of fields. To learn more about creating templates, see [Creating metadata templates in the Admin Console](https://support.box.com/hc/en-us/articles/360044194033-Customizing-Metadata-Templates)
+or use the [metadata template API](https://developer.box.com/guides/metadata/templates/create).
+
+This endpoint also supports [Enhanced Extract Agent](https://developer.box.com/guides/box-ai/ai-tutorials/extract-metadata-structured#enhanced-extract-agent).
+
+For information about supported file formats and languages, see the [Extract metadata from file (structured)](https://developer.box.com/guides/box-ai/ai-tutorials/extract-metadata-structured) API guide.
+
+This operation is performed by calling function `createAiExtractStructured`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-ai-extract-structured/).
+
+
+```
+client.getAi().createAiExtractStructured(new AiExtractStructured.Builder(Arrays.asList(new AiItemBase(file.getId()))).fields(Arrays.asList(new AiExtractStructuredFieldsField.Builder("firstName").description("Person first name").displayName("First name").prompt("What is the your first name?").type("string").build(), new AiExtractStructuredFieldsField.Builder("lastName").description("Person last name").displayName("Last name").prompt("What is the your last name?").type("string").build(), new AiExtractStructuredFieldsField.Builder("dateOfBirth").description("Person date of birth").displayName("Birth date").prompt("What is the date of your birth?").type("date").build(), new AiExtractStructuredFieldsField.Builder("age").description("Person age").displayName("Age").prompt("How old are you?").type("float").build(), new AiExtractStructuredFieldsField.Builder("hobby").description("Person hobby").displayName("Hobby").prompt("What is your hobby?").type("multiSelect").options(Arrays.asList(new AiExtractStructuredFieldsOptionsField("guitar"), new AiExtractStructuredFieldsOptionsField("books"))).build(), new AiExtractStructuredFieldsField.Builder("address").description("Person address").displayName("Address").prompt("Extract the full mailing address.").type("struct").fields(Arrays.asList(new AiExtractSubField.Builder("street").displayName("Street").type("string").build(), new AiExtractSubField.Builder("city").displayName("City").type("string").build(), new AiExtractSubField.Builder("state").displayName("State").type("string").build(), new AiExtractSubField.Builder("zip").displayName("Zip").type("string").build(), new AiExtractSubField.Builder("country").displayName("Country").type("string").build())).build(), new AiExtractStructuredFieldsField.Builder("work_history").description("Person work history").displayName("Work history").prompt("Extract each job as a row.").type("table").fields(Arrays.asList(new AiExtractSubField.Builder("job_title").displayName("Job title").type("string").build(), new AiExtractSubField.Builder("company").displayName("Company").type("string").build(), new AiExtractSubField.Builder("start_year").displayName("Start year").type("string").build(), new AiExtractSubField.Builder("end_year").displayName("End year").type("string").build())).build())).aiAgent(aiExtractStructuredAgentBasicTextConfig).includeConfidenceScore(true).includeReference(true).build())
+```
+
+### Arguments
+
+- requestBody `AiExtractStructured`
+ - Request body of createAiExtractStructured method
+- headers `CreateAiExtractStructuredHeaders`
+ - Headers of createAiExtractStructured method
+
+
+### Returns
+
+This function returns a value of type `AiExtractStructuredResponse`.
+
+A successful response including the answer from the LLM.
+
+
diff --git a/docs/aistudio.md b/docs/aistudio.md
new file mode 100644
index 000000000..2313462ff
--- /dev/null
+++ b/docs/aistudio.md
@@ -0,0 +1,158 @@
+# AiStudioManager
+
+
+- [List AI agents](#list-ai-agents)
+- [Create AI agent](#create-ai-agent)
+- [Update AI agent](#update-ai-agent)
+- [Get AI agent by agent ID](#get-ai-agent-by-agent-id)
+- [Delete AI agent](#delete-ai-agent)
+
+## List AI agents
+
+Lists AI agents based on the provided parameters.
+
+This operation is performed by calling function `getAiAgents`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-ai-agents/).
+
+
+```
+client.getAiStudio().getAiAgents()
+```
+
+### Arguments
+
+- queryParams `GetAiAgentsQueryParams`
+ - Query parameters of getAiAgents method
+- headers `GetAiAgentsHeaders`
+ - Headers of getAiAgents method
+
+
+### Returns
+
+This function returns a value of type `AiMultipleAgentResponse`.
+
+A successful response including the agents list.
+
+
+## Create AI agent
+
+Creates an AI agent. At least one of the following capabilities must be provided: `ask`, `text_gen`, `extract`.
+
+This operation is performed by calling function `createAiAgent`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-ai-agents/).
+
+
+```
+client.getAiStudio().createAiAgent(new CreateAiAgent.Builder(agentName, "enabled").ask(new AiStudioAgentAsk("enabled", "desc1")).build())
+```
+
+### Arguments
+
+- requestBody `CreateAiAgent`
+ - Request body of createAiAgent method
+- headers `CreateAiAgentHeaders`
+ - Headers of createAiAgent method
+
+
+### Returns
+
+This function returns a value of type `AiSingleAgentResponseFull`.
+
+Definition of created AI agent.
+
+
+## Update AI agent
+
+Updates an AI agent.
+
+This operation is performed by calling function `updateAiAgentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-ai-agents-id/).
+
+
+```
+client.getAiStudio().updateAiAgentById(createdAgent.getId(), new CreateAiAgent.Builder(agentName, "enabled").ask(new AiStudioAgentAsk("disabled", "desc2")).build())
+```
+
+### Arguments
+
+- agentId `String`
+ - The ID of the agent to update. Example: "1234"
+- requestBody `CreateAiAgent`
+ - Request body of updateAiAgentById method
+- headers `UpdateAiAgentByIdHeaders`
+ - Headers of updateAiAgentById method
+
+
+### Returns
+
+This function returns a value of type `AiSingleAgentResponseFull`.
+
+Definition of created AI agent.
+
+
+## Get AI agent by agent ID
+
+Gets an AI Agent using the `agent_id` parameter.
+
+This operation is performed by calling function `getAiAgentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-ai-agents-id/).
+
+
+```
+client.getAiStudio().getAiAgentById(createdAgent.getId(), new GetAiAgentByIdQueryParams.Builder().fields(Arrays.asList("ask")).build())
+```
+
+### Arguments
+
+- agentId `String`
+ - The agent id to get. Example: "1234"
+- queryParams `GetAiAgentByIdQueryParams`
+ - Query parameters of getAiAgentById method
+- headers `GetAiAgentByIdHeaders`
+ - Headers of getAiAgentById method
+
+
+### Returns
+
+This function returns a value of type `AiSingleAgentResponseFull`.
+
+A successful response including the agent.
+
+
+## Delete AI agent
+
+Deletes an AI agent using the provided parameters.
+
+This operation is performed by calling function `deleteAiAgentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-ai-agents-id/).
+
+
+```
+client.getAiStudio().deleteAiAgentById(createdAgent.getId())
+```
+
+### Arguments
+
+- agentId `String`
+ - The ID of the agent to delete. Example: "1234"
+- headers `DeleteAiAgentByIdHeaders`
+ - Headers of deleteAiAgentById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A successful response with no content.
+
+
diff --git a/docs/appitemassociations.md b/docs/appitemassociations.md
new file mode 100644
index 000000000..cc8a99bc2
--- /dev/null
+++ b/docs/appitemassociations.md
@@ -0,0 +1,80 @@
+# AppItemAssociationsManager
+
+
+- [List file app item associations](#list-file-app-item-associations)
+- [List folder app item associations](#list-folder-app-item-associations)
+
+## List file app item associations
+
+**This is a beta feature, which means that its availability might be limited.**
+Returns all app items the file is associated with. This includes app items
+associated with ancestors of the file. Assuming the context user has access
+to the file, the type/ids are revealed even if the context user does not
+have **View** permission on the app item.
+
+This operation is performed by calling function `getFileAppItemAssociations`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-app-item-associations/).
+
+
+```
+client.getAppItemAssociations().getFileAppItemAssociations(fileId)
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetFileAppItemAssociationsQueryParams`
+ - Query parameters of getFileAppItemAssociations method
+- headers `GetFileAppItemAssociationsHeaders`
+ - Headers of getFileAppItemAssociations method
+
+
+### Returns
+
+This function returns a value of type `AppItemAssociations`.
+
+Returns a collection of app item objects. If there are no
+app items on this file, an empty collection will be returned.
+This list includes app items on ancestors of this File.
+
+
+## List folder app item associations
+
+**This is a beta feature, which means that its availability might be limited.**
+Returns all app items the folder is associated with. This includes app items
+associated with ancestors of the folder. Assuming the context user has access
+to the folder, the type/ids are revealed even if the context user does not
+have **View** permission on the app item.
+
+This operation is performed by calling function `getFolderAppItemAssociations`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id-app-item-associations/).
+
+
+```
+client.getAppItemAssociations().getFolderAppItemAssociations(folderId)
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- queryParams `GetFolderAppItemAssociationsQueryParams`
+ - Query parameters of getFolderAppItemAssociations method
+- headers `GetFolderAppItemAssociationsHeaders`
+ - Headers of getFolderAppItemAssociations method
+
+
+### Returns
+
+This function returns a value of type `AppItemAssociations`.
+
+Returns a collection of app item objects. If there are no
+app items on this folder an empty collection will be returned.
+This list includes app items on ancestors of this folder.
+
+
diff --git a/docs/archives.md b/docs/archives.md
new file mode 100644
index 000000000..38be510cd
--- /dev/null
+++ b/docs/archives.md
@@ -0,0 +1,138 @@
+# ArchivesManager
+
+
+- [List archives](#list-archives)
+- [Create archive](#create-archive)
+- [Delete archive](#delete-archive)
+- [Update archive](#update-archive)
+
+## List archives
+
+Retrieves archives for an enterprise.
+
+To learn more about the archive APIs, see the [Archive API Guide](https://developer.box.com/guides/archives).
+
+This operation is performed by calling function `getArchivesV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-archives/).
+
+
+```
+client.getArchives().getArchivesV2025R0(new GetArchivesV2025R0QueryParams.Builder().limit(100L).build())
+```
+
+### Arguments
+
+- queryParams `GetArchivesV2025R0QueryParams`
+ - Query parameters of getArchivesV2025R0 method
+- headers `GetArchivesV2025R0Headers`
+ - Headers of getArchivesV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `ArchivesV2025R0`.
+
+Returns a list of archives in the enterprise.
+
+
+## Create archive
+
+Creates an archive.
+
+To learn more about the archive APIs, see the [Archive API Guide](https://developer.box.com/guides/archives).
+
+This operation is performed by calling function `createArchiveV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-archives/).
+
+
+```
+client.getArchives().createArchiveV2025R0(new CreateArchiveV2025R0RequestBody.Builder(archiveName).description(archiveDescription).build())
+```
+
+### Arguments
+
+- requestBody `CreateArchiveV2025R0RequestBody`
+ - Request body of createArchiveV2025R0 method
+- headers `CreateArchiveV2025R0Headers`
+ - Headers of createArchiveV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `ArchiveV2025R0`.
+
+Returns a new archive object.
+
+
+## Delete archive
+
+Permanently deletes an archive.
+
+To learn more about the archive APIs, see the [Archive API Guide](https://developer.box.com/guides/archives).
+
+
+This endpoint is currently unavailable. Please contact support for assistance.
+
+
+This operation is performed by calling function `deleteArchiveByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/delete-archives-id/).
+
+
+```
+client.getArchives().deleteArchiveByIdV2025R0(archive.getId())
+```
+
+### Arguments
+
+- archiveId `String`
+ - The ID of the archive. Example: "982312"
+- headers `DeleteArchiveByIdV2025R0Headers`
+ - Headers of deleteArchiveByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the archive has been deleted.
+
+
+## Update archive
+
+Updates an archive.
+
+To learn more about the archive APIs, see the [Archive API Guide](https://developer.box.com/guides/archives).
+
+This operation is performed by calling function `updateArchiveByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/put-archives-id/).
+
+
+```
+client.getArchives().updateArchiveByIdV2025R0(archive.getId(), new UpdateArchiveByIdV2025R0RequestBody.Builder().name(newArchiveName).description(newArchiveDescription).build())
+```
+
+### Arguments
+
+- archiveId `String`
+ - The ID of the archive. Example: "982312"
+- requestBody `UpdateArchiveByIdV2025R0RequestBody`
+ - Request body of updateArchiveByIdV2025R0 method
+- headers `UpdateArchiveByIdV2025R0Headers`
+ - Headers of updateArchiveByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `ArchiveV2025R0`.
+
+Returns the updated archive object.
+
+
diff --git a/docs/authentication.md b/docs/authentication.md
new file mode 100644
index 000000000..b76335410
--- /dev/null
+++ b/docs/authentication.md
@@ -0,0 +1,366 @@
+# Authentication
+
+
+
+
+- [Authentication](#authentication)
+- [Authentication methods](#authentication-methods)
+ - [Developer Token](#developer-token)
+ - [JWT Auth](#jwt-auth)
+ - [Authenticate Enterprise](#authenticate-enterprise)
+ - [Authenticate user](#authenticate-user)
+ - [Client Credentials Grant](#client-credentials-grant)
+ - [Obtaining Service Account token](#obtaining-service-account-token)
+ - [Obtaining User token](#obtaining-user-token)
+ - [Switching between Service Account and User](#switching-between-service-account-and-user)
+ - [OAuth 2.0 Auth](#oauth-20-auth)
+ - [Authentication with OAuth2](#authentication-with-oauth2)
+ - [Injecting existing token into BoxOAuth](#injecting-existing-token-into-boxoauth)
+- [Retrieve current access token](#retrieve-current-access-token)
+- [Refresh access token](#refresh-access-token)
+- [Revoke token](#revoke-token)
+- [Downscope token](#downscope-token)
+- [Token storage](#token-storage)
+ - [In-memory token storage](#in-memory-token-storage)
+ - [Custom storage](#custom-storage)
+
+
+
+# Authentication methods
+
+## Developer Token
+
+The fastest way to get started using the API is with developer token. A
+developer token is simply a short-lived access token that cannot be refreshed
+and can only be used with your own account. Therefore, they're only useful for
+testing an app and aren't suitable for production. You can obtain a developer
+token from your application's [developer console][dev_console] page.
+
+To create a `BoxClient` with a developer token, construct an `BoxDeveloperTokenAuth`
+object with the `token` set to the developer token and construct the client with that.
+
+
+
+```java
+BoxDeveloperTokenAuth auth = new BoxDeveloperTokenAuth("YOUR-DEVELOPER-TOKEN");
+BoxClient client = new BoxClient(auth);
+```
+
+[dev_console]: https://app.box.com/developers/console
+
+## JWT Auth
+
+Before using JWT Auth make sure you set up correctly your Box platform app.
+The guide with all required steps can be found here: [Setup with JWT][jwt_guide]
+
+### Authenticate Enterprise
+
+JWT auth allows your application to authenticate itself with the Box API
+for a given enterprise. By default, your application has a [Service Account][service_account]
+that represents it and can perform API calls. The Service Account is separate
+from the Box accounts of the application developer and the enterprise admin of
+any enterprise that has authorized the app — files stored in that account are
+not accessible in any other account by default, and vice versa.
+
+If you generated your public and private keys automatically through the
+[Box Developer Console][dev_console], you can use the JSON file created there
+to configure your SDK instance and create a client to make calls as the
+Service Account. Call one of static `BoxJwtAuth` method:
+`JWTConfig.fromConfigFile("PATH_TO_CONFIG_FILE")` and pass JSON file local path
+or `JWTConfig.fromConfigJsonString(CONFIG_JSON_STRING)` and pass JSON config file content as string.
+
+```java
+JWTConfig config = JWTConfig.fromConfigFile("src/example/config/config.json");
+BoxJWTAuth auth = new BoxJWTAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+Otherwise, you'll need to provide the necessary configuration fields directly to the `JWTConfig` constructor:
+
+```java
+JWTConfig config = new JWTConfig.Builder("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "JWT_KEY_ID", "PRIVATE_KEY", "PRIVATE_KEY_PASSWORD")
+ .enterpriseId("123456")
+ .build();
+BoxJWTAuth auth = new BoxJWTAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+### Authenticate user
+
+App auth applications also often have associated [App Users][app_user], which are
+created and managed directly by the application — they do not have normal login credentials,
+and can only be accessed through the Box API by the application that created them.
+You may authenticate as the Service Account to provision and manage users, or as an individual app user to
+make calls as that user. See the [API documentation](https://developer.box.com/)
+for detailed instructions on how to use app auth.
+
+Clients for making calls as an App User can be created with the same JSON JWT config file generated through the
+[Box Developer Console][dev_console]. Calling `jwtAuth.withUserSubject('USER_ID')` method will return a new auth object,
+which is authenticated as the user with provided id, leaving the original object unchanged.
+
+```java
+JWTConfig config = JWTConfig.fromConfigFile("src/example/config/config.json");
+BoxJWTAuth auth = new BoxJWTAuth(config);
+BoxJWTAuth userAuth = auth.withUserSubject("USER_ID");
+BoxClient userClient = new BoxClient(userAuth);
+```
+
+Alternatively, clients for making calls as an App User can be created with the same `JWTConfig`
+constructor as in the above examples, similarly to creating a Service Account client. Simply pass the
+`userId` instead of `enterpriseId` when constructing the auth config instance:
+
+```java
+JWTConfig config = new JWTConfig.Builder("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "JWT_KEY_ID", "PRIVATE_KEY", "PRIVATE_KEY_PASSWORD")
+ .userId("123456")
+ .build();
+BoxJWTAuth auth = new BoxJWTAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+[jwt_guide]: https://developer.box.com/guides/authentication/jwt/jwt-setup/
+[service_account]: https://developer.box.com/guides/getting-started/user-types/service-account/
+[app_user]: https://developer.box.com/guides/getting-started/user-types/app-users/
+
+## Client Credentials Grant
+
+Before using Client Credentials Grant Auth make sure you set up correctly your Box platform app.
+The guide with all required steps can be found here: [Setup with Client Credentials Grant][ccg_guide]
+
+Client Credentials Grant Auth method allows you to obtain an access token by having client credentials
+and secret with enterprise or user ID, which allows you to work using service or user account.
+
+You can use `CCGAuth` to initialize a client object the same way as for other authentication types:
+
+```java
+CCGConfig config = new CCGConfig.Builder("YOUR_CLIENT", "YOUR_CLIENT_SECRET")
+ .userId("USER_ID")
+ .build();
+BoxCCGAuth auth = new BoxCCGAuth(config);
+BoxClient client = new BoxClient(auth);
+
+UserFull user = client.users.getUserMe();
+System.out.println(user.getName());
+```
+
+Obtained token is valid for specified amount of time, it will be refreshed automatically by default.
+
+### Obtaining Service Account token
+
+The [Service Account](https://developer.box.com/guides/getting-started/user-types/service-account//)
+is separate from the Box accounts of the application developer and the
+enterprise admin of any enterprise that has authorized the app — files stored in that account
+are not accessible in any other account by default, and vice versa.
+To obtain service account you will have to provide enterprise ID with client id and secret:
+
+```java
+CCGConfig config = new CCGConfig.Builder("YOUR_CLIENT", "YOUR_CLIENT_SECRET")
+ .enterpriseId("ENTERPRISE_ID")
+ .build();
+BoxCCGAuth auth = new BoxCCGAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+### Obtaining User token
+
+In order to enable obtaining user token you have to go to your application configuration that can be found
+[here][dev_console]. In `Configuration` tab, in section `Advanced Features`
+select `Generate user access tokens`. Do not forget to re-authorize application if it was already authorized.
+
+To obtain user account you will have to provide user ID with client id and secret.
+
+```java
+CCGConfig config = new CCGConfig.Builder("YOUR_CLIENT", "YOUR_CLIENT_SECRET")
+ .userId("USER_ID")
+ .build();
+BoxCCGAuth auth = new BoxCCGAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+### Switching between Service Account and User
+
+You can easily switch to be authenticated as a Service Account or as a User.
+To create a new auth object authenticated as Service Account you can call:
+
+```java
+BoxCCGAuth enterpriseAuth = auth.withEnterpriseSubject("ENTERPRISE_ID");
+BoxClient enterpriseClient = new BoxClient(enterpriseAuth);
+```
+
+To authenticate with user subject call:
+
+```java
+BoxCCGAuth userAuth = auth.withUserSubject("USER_ID");
+BoxClient userClient = new BoxClient(userAuth);
+```
+
+The new token will be automatically fetched with a next API call.
+
+[ccg_guide]: https://developer.box.com/guides/authentication/client-credentials/client-credentials-setup/
+
+## OAuth 2.0 Auth
+
+### Authentication with OAuth2
+
+If your application needs to integrate with existing Box users who will provide
+their login credentials to grant your application access to their account, you
+will need to go through the standard OAuth2 login flow. A detailed guide for
+this process is available in the
+[Authentication with OAuth API documentation](https://developer.box.com/en/guides/authentication/oauth2/).
+
+Using an auth code is the most common way of authenticating with the Box API for
+existing Box users, to integrate with their accounts.
+Your application must provide a way for the user to login to Box (usually with a
+browser or web view) in order to obtain an auth code.
+
+
+
+```java
+OAuthConfig oauthConfig = new OAuthConfig("CLIENT_ID", "CLIENT_SECRET");
+BoxOAuth oauth = new BoxOAuth(oauthConfig);
+String authorizationUrl = oauth.getAuthorizeUrl();
+```
+
+After a user logs in and grants your application access to their Box account,
+they will be redirected to your application's `redirect_uri` which will contain
+an auth code. This auth code can then be used along with your client ID and
+client secret to establish an API connection.
+You need to provide the auth code to the SDK to obtain an access token.
+Calling `oauth.getTokensAuthorizationCodeGrant('code')` will exchange the auth code for an access token
+and save it in the `BoxOAuth` token storage. The SDK will automatically refresh the token when needed.
+All you need to do is create a client object with the `BoxOAuth` object and start making API calls.
+
+
+
+```java
+auth.getTokensAuthorizationCodeGrant("AUTHORIZATION_CODE");
+BoxClient client = new BoxClient(auth);
+```
+
+### Injecting existing token into BoxOAuth
+
+If you already have an access token and refresh token, you can inject them into the `BoxOAuth` token storage
+to avoid repeating the authentication process. This can be useful when you want to reuse the token
+between runs of your application.
+
+```java
+AccessToken accessToken = new AccessToken.Builder()
+ .accessToken("ACCESS_TOKEN")
+ .refreshToken("REFRESH_TOKEN")
+ .build();
+auth.getTokenStorage().store(accessToken);
+BoxClient client = new BoxClient(auth);
+```
+
+Alternatively, you can create a custom implementation of `TokenStorage` interface and pass it to the `BoxOAuth` object.
+See the [Custom storage](#custom-storage) section for more information.
+
+# Retrieve current access token
+
+After initializing the authentication object, the SDK will be able to retrieve the access token.
+To retrieve the current access token you can use the following code:
+
+
+
+```java
+auth.retrieveToken();
+```
+
+# Refresh access token
+
+Access tokens are short-lived and need to be refreshed periodically. The SDK will automatically refresh the token when needed.
+If you want to manually refresh the token, you can use the following code:
+
+
+
+```java
+auth.refreshToken();
+```
+
+# Revoke token
+
+Access tokens for a client can be revoked when needed. This call invalidates old token.
+For BoxCcgAuth and BoxJwtAuth you can still reuse the `auth` object to retrieve a new token.
+If you make any new call after revoking the token, a new token will be automatically retrieved.
+For BoxOAuth it would be necessary to manually go through the authentication process again.
+For BoxDeveloperTokenAuth, it is necessary to provide a DeveloperTokenConfig during initialization,
+containing the client ID and client secret.
+
+To revoke current client's tokens in the storage use the following code:
+
+
+
+```java
+auth.revokeToken();
+// client's tokens have been revoked
+```
+
+# Downscope token
+
+You can exchange a client's access token for one with a lower scope, in order
+to restrict the permissions for a child client or to pass to a less secure
+location (e.g. a browser-based app).
+
+A downscoped token does not include a refresh token.
+In such a scenario, to obtain a new downscoped token, refresh the original token
+and utilize the newly acquired token to obtain the downscoped token.
+
+More information about downscoping tokens can be found [here](https://developer.box.com/guides/authentication/tokens/downscope/).
+If you want to learn more about available scopes please go [here](https://developer.box.com/guides/api-calls/permissions-and-errors/scopes/#scopes-for-downscoping).
+
+For example to get a new token with only `item_preview` scope, restricted to a single file, suitable for the
+[Content Preview UI Element](https://developer.box.com/en/guides/embed/ui-elements/preview/) you can use the following code.
+You can also initialize `BoxDeveloperTokenAuth` with the retrieved access token and use it to create a new Client.
+
+
+
+```java
+String resource = "https://api.box.com/2.0/files/123456789";
+List scopes = List.of("item_preview");
+AccessToken downscopedToken = auth.downscopeToken(scopes, resource, null, null);
+BoxDeveloperTokenAuth downscopedAuth = new BoxDeveloperTokenAuth(downscopedToken.getAccessToken());
+BoxClient downscopedClient = new BoxClient(downscopedAuth);
+```
+
+# Token storage
+
+## In-memory token storage
+
+By default, the SDK stores the access token in volatile memory. When rerunning your application,
+the access token won't be reused from the previous run; a new token has to be obtained again.
+To use in-memory token storage, you don't need to do anything more than
+create an Auth class using AuthConfig, for example, for OAuth:
+
+```java
+OAuthConfig config = new OAuthConfig("CLIENT_ID", "CLIENT_SECRET");
+BoxOAuth auth = new BoxOAuth(config);
+```
+
+## Custom storage
+
+You can also provide a custom token storage class. All you need to do is create a class that implements `TokenStorage`
+interface and pass an instance of your class to the AuthConfig constructor.
+
+```java
+TokenStorage customTokenStorage = new TokenStorage() {
+ @Override
+ public void store(AccessToken accessToken) {
+ // Store the access token
+ }
+
+ @Override
+ public AccessToken get() {
+ // Retrieve the access token
+ return null;
+ }
+
+ @Override
+ public void clear() {
+ // Clear the access token
+ }
+};
+
+OAuthConfig config = new OAuthConfig.Builder("CLIENT_ID", "CLIENT_SECRET")
+ .tokenStorage(customTokenStorage)
+ .build();
+BoxOAuth auth = new BoxOAuth(config);
+```
diff --git a/docs/authorization.md b/docs/authorization.md
new file mode 100644
index 000000000..5356772c0
--- /dev/null
+++ b/docs/authorization.md
@@ -0,0 +1,134 @@
+# AuthorizationManager
+
+
+- [Authorize user](#authorize-user)
+- [Request access token](#request-access-token)
+- [Refresh access token](#refresh-access-token)
+- [Revoke access token](#revoke-access-token)
+
+## Authorize user
+
+Authorize a user by sending them through the [Box](https://box.com)
+website and request their permission to act on their behalf.
+
+This is the first step when authenticating a user using
+OAuth 2.0. To request a user's authorization to use the Box APIs
+on their behalf you will need to send a user to the URL with this
+format.
+
+This operation is performed by calling function `authorizeUser`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-authorize/).
+
+*Currently we don't have an example for calling `authorizeUser` in integration tests*
+
+### Arguments
+
+- queryParams `AuthorizeUserQueryParams`
+ - Query parameters of authorizeUser method
+- headers `AuthorizeUserHeaders`
+ - Headers of authorizeUser method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Does not return any data, but rather should be used in the browser.
+
+
+## Request access token
+
+Request an Access Token using either a client-side obtained OAuth 2.0
+authorization code or a server-side JWT assertion.
+
+An Access Token is a string that enables Box to verify that a
+request belongs to an authorized session. In the normal order of
+operations you will begin by requesting authentication from the
+[authorize](https://developer.box.com/reference/get-authorize) endpoint and Box will send you an
+authorization code.
+
+You will then send this code to this endpoint to exchange it for
+an Access Token. The returned Access Token can then be used to to make
+Box API calls.
+
+This operation is performed by calling function `requestAccessToken`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-oauth2-token/).
+
+*Currently we don't have an example for calling `requestAccessToken` in integration tests*
+
+### Arguments
+
+- requestBody `PostOAuth2Token`
+ - Request body of requestAccessToken method
+- headers `RequestAccessTokenHeaders`
+ - Headers of requestAccessToken method
+
+
+### Returns
+
+This function returns a value of type `AccessToken`.
+
+Returns a new Access Token that can be used to make authenticated
+API calls by passing along the token in a authorization header as
+follows `Authorization: Bearer `.
+
+
+## Refresh access token
+
+Refresh an Access Token using its client ID, secret, and refresh token.
+
+This operation is performed by calling function `refreshAccessToken`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-oauth2-token--refresh/).
+
+*Currently we don't have an example for calling `refreshAccessToken` in integration tests*
+
+### Arguments
+
+- requestBody `PostOAuth2TokenRefreshAccessToken`
+ - Request body of refreshAccessToken method
+- headers `RefreshAccessTokenHeaders`
+ - Headers of refreshAccessToken method
+
+
+### Returns
+
+This function returns a value of type `AccessToken`.
+
+Returns a new Access Token that can be used to make authenticated
+API calls by passing along the token in a authorization header as
+follows `Authorization: Bearer `.
+
+
+## Revoke access token
+
+Revoke an active Access Token, effectively logging a user out
+that has been previously authenticated.
+
+This operation is performed by calling function `revokeAccessToken`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-oauth2-revoke/).
+
+*Currently we don't have an example for calling `revokeAccessToken` in integration tests*
+
+### Arguments
+
+- requestBody `PostOAuth2Revoke`
+ - Request body of revokeAccessToken method
+- headers `RevokeAccessTokenHeaders`
+ - Headers of revokeAccessToken method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the token was successfully revoked.
+
+
diff --git a/docs/automateworkflows.md b/docs/automateworkflows.md
new file mode 100644
index 000000000..a42abed96
--- /dev/null
+++ b/docs/automateworkflows.md
@@ -0,0 +1,67 @@
+# AutomateWorkflowsManager
+
+
+- [List Automate workflows defined as callable actions](#list-automate-workflows-defined-as-callable-actions)
+- [Start Automate workflow](#start-automate-workflow)
+
+## List Automate workflows defined as callable actions
+
+Returns workflow actions from Automate for a folder, using the
+`WORKFLOW` action category.
+
+This operation is performed by calling function `getAutomateWorkflowsV2026R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2026.0/get-automate-workflows/).
+
+
+```
+adminClient.getAutomateWorkflows().getAutomateWorkflowsV2026R0(new GetAutomateWorkflowsV2026R0QueryParams(workflowFolderId))
+```
+
+### Arguments
+
+- queryParams `GetAutomateWorkflowsV2026R0QueryParams`
+ - Query parameters of getAutomateWorkflowsV2026R0 method
+- headers `GetAutomateWorkflowsV2026R0Headers`
+ - Headers of getAutomateWorkflowsV2026R0 method
+
+
+### Returns
+
+This function returns a value of type `AutomateWorkflowsV2026R0`.
+
+Returns workflow actions that can be manually started.
+
+
+## Start Automate workflow
+
+Starts an Automate workflow manually by using a workflow action ID and file IDs.
+
+This operation is performed by calling function `createAutomateWorkflowStartV2026R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2026.0/post-automate-workflows-id-start/).
+
+
+```
+adminClient.getAutomateWorkflows().createAutomateWorkflowStartV2026R0(workflowAction.getWorkflow().getId(), new AutomateWorkflowStartRequestV2026R0(workflowAction.getId(), Arrays.asList(workflowFileId)))
+```
+
+### Arguments
+
+- workflowId `String`
+ - The ID of the workflow. Example: "12345"
+- requestBody `AutomateWorkflowStartRequestV2026R0`
+ - Request body of createAutomateWorkflowStartV2026R0 method
+- headers `CreateAutomateWorkflowStartV2026R0Headers`
+ - Headers of createAutomateWorkflowStartV2026R0 method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Starts the workflow.
+
+
diff --git a/docs/avatars.md b/docs/avatars.md
new file mode 100644
index 000000000..902fffd58
--- /dev/null
+++ b/docs/avatars.md
@@ -0,0 +1,101 @@
+# AvatarsManager
+
+
+- [Get user avatar](#get-user-avatar)
+- [Add or update user avatar](#add-or-update-user-avatar)
+- [Delete user avatar](#delete-user-avatar)
+
+## Get user avatar
+
+Retrieves an image of a the user's avatar.
+
+This operation is performed by calling function `getUserAvatar`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-users-id-avatar/).
+
+
+```
+client.getAvatars().getUserAvatar(user.getId())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- headers `GetUserAvatarHeaders`
+ - Headers of getUserAvatar method
+
+
+### Returns
+
+This function returns a value of type `InputStream`.
+
+When an avatar can be found for the user the
+image data will be returned in the body of the
+response.
+
+
+## Add or update user avatar
+
+Adds or updates a user avatar.
+
+This operation is performed by calling function `createUserAvatar`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-users-id-avatar/).
+
+
+```
+client.getAvatars().createUserAvatar(user.getId(), new CreateUserAvatarRequestBody.Builder(decodeBase64ByteStream("iVBORw0KGgoAAAANSUhEUgAAAQAAAAEAAQMAAABmvDolAAAAA1BMVEW10NBjBBbqAAAAH0lEQVRoge3BAQ0AAADCoPdPbQ43oAAAAAAAAAAAvg0hAAABmmDh1QAAAABJRU5ErkJggg==")).picFileName("avatar.png").picContentType("image/png").build())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- requestBody `CreateUserAvatarRequestBody`
+ - Request body of createUserAvatar method
+- headers `CreateUserAvatarHeaders`
+ - Headers of createUserAvatar method
+
+
+### Returns
+
+This function returns a value of type `UserAvatar`.
+
+`ok`: Returns the `pic_urls` object with URLs to existing
+user avatars that were updated.`created`: Returns the `pic_urls` object with URLS to user avatars
+uploaded to Box with the request.
+
+
+## Delete user avatar
+
+Removes an existing user avatar.
+You cannot reverse this operation.
+
+This operation is performed by calling function `deleteUserAvatar`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-users-id-avatar/).
+
+
+```
+client.getAvatars().deleteUserAvatar(user.getId())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- headers `DeleteUserAvatarHeaders`
+ - Headers of deleteUserAvatar method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+`no_content`: Removes the avatar and returns an empty response.
+
+
diff --git a/docs/chunkeduploads.md b/docs/chunkeduploads.md
new file mode 100644
index 000000000..715868fb4
--- /dev/null
+++ b/docs/chunkeduploads.md
@@ -0,0 +1,450 @@
+# ChunkedUploadsManager
+
+This is a manager for chunked uploads (allowed for files at least 20MB).
+
+- [Create upload session](#create-upload-session)
+- [Create upload session for existing file](#create-upload-session-for-existing-file)
+- [Get upload session by URL](#get-upload-session-by-url)
+- [Get upload session](#get-upload-session)
+- [Upload part of file by URL](#upload-part-of-file-by-url)
+- [Upload part of file](#upload-part-of-file)
+- [Remove upload session by URL](#remove-upload-session-by-url)
+- [Remove upload session](#remove-upload-session)
+- [List parts by URL](#list-parts-by-url)
+- [List parts](#list-parts)
+- [Commit upload session by URL](#commit-upload-session-by-url)
+- [Commit upload session](#commit-upload-session)
+- [Upload big file](#upload-big-file)
+
+## Create upload session
+
+Creates an upload session for a new file.
+
+This operation is performed by calling function `createFileUploadSession`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-upload-sessions/).
+
+
+```
+client.getChunkedUploads().createFileUploadSession(new CreateFileUploadSessionRequestBody(parentFolderId, fileSize, fileName))
+```
+
+### Arguments
+
+- requestBody `CreateFileUploadSessionRequestBody`
+ - Request body of createFileUploadSession method
+- headers `CreateFileUploadSessionHeaders`
+ - Headers of createFileUploadSession method
+
+
+### Returns
+
+This function returns a value of type `UploadSession`.
+
+Returns a new upload session.
+
+
+## Create upload session for existing file
+
+Creates an upload session for an existing file.
+
+This operation is performed by calling function `createFileUploadSessionForExistingFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-id-upload-sessions/).
+
+*Currently we don't have an example for calling `createFileUploadSessionForExistingFile` in integration tests*
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `CreateFileUploadSessionForExistingFileRequestBody`
+ - Request body of createFileUploadSessionForExistingFile method
+- headers `CreateFileUploadSessionForExistingFileHeaders`
+ - Headers of createFileUploadSessionForExistingFile method
+
+
+### Returns
+
+This function returns a value of type `UploadSession`.
+
+Returns a new upload session.
+
+
+## Get upload session by URL
+
+Return information about an upload session.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions) endpoint.
+
+This operation is performed by calling function `getFileUploadSessionByUrl`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-upload-sessions-id/).
+
+
+```
+client.getChunkedUploads().getFileUploadSessionByUrl(statusUrl)
+```
+
+### Arguments
+
+- url `String`
+ - URL of getFileUploadSessionById method
+- headers `GetFileUploadSessionByUrlHeaders`
+ - Headers of getFileUploadSessionById method
+
+
+### Returns
+
+This function returns a value of type `UploadSession`.
+
+Returns an upload session object.
+
+
+## Get upload session
+
+Return information about an upload session.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions) endpoint.
+
+This operation is performed by calling function `getFileUploadSessionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-upload-sessions-id/).
+
+
+```
+client.getChunkedUploads().getFileUploadSessionById(uploadSessionId)
+```
+
+### Arguments
+
+- uploadSessionId `String`
+ - The ID of the upload session. Example: "D5E3F7A"
+- headers `GetFileUploadSessionByIdHeaders`
+ - Headers of getFileUploadSessionById method
+
+
+### Returns
+
+This function returns a value of type `UploadSession`.
+
+Returns an upload session object.
+
+
+## Upload part of file by URL
+
+Uploads a chunk of a file for an upload session.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions)
+and [`Get upload session`](https://developer.box.com/reference/get-files-upload-sessions-id) endpoints.
+
+This operation is performed by calling function `uploadFilePartByUrl`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-upload-sessions-id/).
+
+
+```
+client.getChunkedUploads().uploadFilePartByUrl(acc.getUploadPartUrl(), generateByteStreamFromBuffer(chunkBuffer), new UploadFilePartByUrlHeaders(digest, contentRange))
+```
+
+### Arguments
+
+- url `String`
+ - URL of uploadFilePart method
+- requestBody `InputStream`
+ - Request body of uploadFilePart method
+- headers `UploadFilePartByUrlHeaders`
+ - Headers of uploadFilePart method
+
+
+### Returns
+
+This function returns a value of type `UploadedPart`.
+
+Chunk has been uploaded successfully.
+
+
+## Upload part of file
+
+Uploads a chunk of a file for an upload session.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions)
+and [`Get upload session`](https://developer.box.com/reference/get-files-upload-sessions-id) endpoints.
+
+This operation is performed by calling function `uploadFilePart`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-upload-sessions-id/).
+
+
+```
+client.getChunkedUploads().uploadFilePart(acc.getUploadSessionId(), generateByteStreamFromBuffer(chunkBuffer), new UploadFilePartHeaders(digest, contentRange))
+```
+
+### Arguments
+
+- uploadSessionId `String`
+ - The ID of the upload session. Example: "D5E3F7A"
+- requestBody `InputStream`
+ - Request body of uploadFilePart method
+- headers `UploadFilePartHeaders`
+ - Headers of uploadFilePart method
+
+
+### Returns
+
+This function returns a value of type `UploadedPart`.
+
+Chunk has been uploaded successfully.
+
+
+## Remove upload session by URL
+
+Abort an upload session and discard all data uploaded.
+
+This cannot be reversed.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions)
+and [`Get upload session`](https://developer.box.com/reference/get-files-upload-sessions-id) endpoints.
+
+This operation is performed by calling function `deleteFileUploadSessionByUrl`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-upload-sessions-id/).
+
+
+```
+client.getChunkedUploads().deleteFileUploadSessionByUrl(abortUrl)
+```
+
+### Arguments
+
+- url `String`
+ - URL of deleteFileUploadSessionById method
+- headers `DeleteFileUploadSessionByUrlHeaders`
+ - Headers of deleteFileUploadSessionById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the session was
+successfully aborted.
+
+
+## Remove upload session
+
+Abort an upload session and discard all data uploaded.
+
+This cannot be reversed.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions)
+and [`Get upload session`](https://developer.box.com/reference/get-files-upload-sessions-id) endpoints.
+
+This operation is performed by calling function `deleteFileUploadSessionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-upload-sessions-id/).
+
+
+```
+client.getChunkedUploads().deleteFileUploadSessionById(uploadSessionId)
+```
+
+### Arguments
+
+- uploadSessionId `String`
+ - The ID of the upload session. Example: "D5E3F7A"
+- headers `DeleteFileUploadSessionByIdHeaders`
+ - Headers of deleteFileUploadSessionById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the session was
+successfully aborted.
+
+
+## List parts by URL
+
+Return a list of the chunks uploaded to the upload session so far.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions)
+and [`Get upload session`](https://developer.box.com/reference/get-files-upload-sessions-id) endpoints.
+
+This operation is performed by calling function `getFileUploadSessionPartsByUrl`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-upload-sessions-id-parts/).
+
+
+```
+client.getChunkedUploads().getFileUploadSessionPartsByUrl(listPartsUrl)
+```
+
+### Arguments
+
+- url `String`
+ - URL of getFileUploadSessionParts method
+- queryParams `GetFileUploadSessionPartsByUrlQueryParams`
+ - Query parameters of getFileUploadSessionParts method
+- headers `GetFileUploadSessionPartsByUrlHeaders`
+ - Headers of getFileUploadSessionParts method
+
+
+### Returns
+
+This function returns a value of type `UploadParts`.
+
+Returns a list of parts that have been uploaded.
+
+
+## List parts
+
+Return a list of the chunks uploaded to the upload session so far.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions)
+and [`Get upload session`](https://developer.box.com/reference/get-files-upload-sessions-id) endpoints.
+
+This operation is performed by calling function `getFileUploadSessionParts`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-upload-sessions-id-parts/).
+
+
+```
+client.getChunkedUploads().getFileUploadSessionParts(uploadSessionId)
+```
+
+### Arguments
+
+- uploadSessionId `String`
+ - The ID of the upload session. Example: "D5E3F7A"
+- queryParams `GetFileUploadSessionPartsQueryParams`
+ - Query parameters of getFileUploadSessionParts method
+- headers `GetFileUploadSessionPartsHeaders`
+ - Headers of getFileUploadSessionParts method
+
+
+### Returns
+
+This function returns a value of type `UploadParts`.
+
+Returns a list of parts that have been uploaded.
+
+
+## Commit upload session by URL
+
+Close an upload session and create a file from the uploaded chunks.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions)
+and [`Get upload session`](https://developer.box.com/reference/get-files-upload-sessions-id) endpoints.
+
+This operation is performed by calling function `createFileUploadSessionCommitByUrl`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-upload-sessions-id-commit/).
+
+
+```
+client.getChunkedUploads().createFileUploadSessionCommitByUrl(commitUrl, new CreateFileUploadSessionCommitByUrlRequestBody(parts), new CreateFileUploadSessionCommitByUrlHeaders(digest))
+```
+
+### Arguments
+
+- url `String`
+ - URL of createFileUploadSessionCommit method
+- requestBody `CreateFileUploadSessionCommitByUrlRequestBody`
+ - Request body of createFileUploadSessionCommit method
+- headers `CreateFileUploadSessionCommitByUrlHeaders`
+ - Headers of createFileUploadSessionCommit method
+
+
+### Returns
+
+This function returns a value of type `Files`.
+
+Returns the file object in a list.Returns when all chunks have been uploaded but not yet processed.
+
+Inspect the upload session to get more information about the
+progress of processing the chunks, then retry committing the file
+when all chunks have processed.
+
+
+## Commit upload session
+
+Close an upload session and create a file from the uploaded chunks.
+
+The actual endpoint URL is returned by the [`Create upload session`](https://developer.box.com/reference/post-files-upload-sessions)
+and [`Get upload session`](https://developer.box.com/reference/get-files-upload-sessions-id) endpoints.
+
+This operation is performed by calling function `createFileUploadSessionCommit`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-upload-sessions-id-commit/).
+
+
+```
+client.getChunkedUploads().createFileUploadSessionCommit(uploadSessionId, new CreateFileUploadSessionCommitRequestBody(parts), new CreateFileUploadSessionCommitHeaders(digest))
+```
+
+### Arguments
+
+- uploadSessionId `String`
+ - The ID of the upload session. Example: "D5E3F7A"
+- requestBody `CreateFileUploadSessionCommitRequestBody`
+ - Request body of createFileUploadSessionCommit method
+- headers `CreateFileUploadSessionCommitHeaders`
+ - Headers of createFileUploadSessionCommit method
+
+
+### Returns
+
+This function returns a value of type `Files`.
+
+Returns the file object in a list.Returns when all chunks have been uploaded but not yet processed.
+
+Inspect the upload session to get more information about the
+progress of processing the chunks, then retry committing the file
+when all chunks have processed.
+
+
+## Upload big file
+
+Starts the process of chunk uploading a big file. Should return a File object representing uploaded file.
+
+This operation is performed by calling function `uploadBigFile`.
+
+
+
+```
+client.getChunkedUploads().uploadBigFile(fileByteStream, fileName, fileSize, parentFolderId)
+```
+
+### Arguments
+
+- file `InputStream`
+ - The stream of the file to upload.
+- fileName `String`
+ - The name of the file, which will be used for storage in Box.
+- fileSize `long`
+ - The total size of the file for the chunked upload in bytes.
+- parentFolderId `String`
+ - The ID of the folder where the file should be uploaded.
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+
+
+
diff --git a/docs/classifications.md b/docs/classifications.md
new file mode 100644
index 000000000..6f3139fbe
--- /dev/null
+++ b/docs/classifications.md
@@ -0,0 +1,148 @@
+# ClassificationsManager
+
+
+- [List all classifications](#list-all-classifications)
+- [Add classification](#add-classification)
+- [Update classification](#update-classification)
+- [Add initial classifications](#add-initial-classifications)
+
+## List all classifications
+
+Retrieves the classification metadata template and lists all the
+classifications available to this enterprise.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/metadata_templates/enterprise_12345/securityClassification-6VMVochwUWo/schema`.
+
+This operation is performed by calling function `getClassificationTemplate`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-templates-enterprise-securityClassification-6VMVochwUWo-schema/).
+
+
+```
+client.getClassifications().getClassificationTemplate()
+```
+
+### Arguments
+
+- headers `GetClassificationTemplateHeaders`
+ - Headers of getClassificationTemplate method
+
+
+### Returns
+
+This function returns a value of type `ClassificationTemplate`.
+
+Returns the `securityClassification` metadata template, which contains
+a `Box__Security__Classification__Key` field that lists all the
+classifications available to this enterprise.
+
+
+## Add classification
+
+Adds one or more new classifications to the list of classifications
+available to the enterprise.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/metadata_templates/enterprise_12345/securityClassification-6VMVochwUWo/schema`.
+
+This operation is performed by calling function `addClassification`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-metadata-templates-enterprise-securityClassification-6VMVochwUWo-schema--add/).
+
+
+```
+client.getClassifications().addClassification(Arrays.asList(new AddClassificationRequestBody(new AddClassificationRequestBodyDataField.Builder(getUuid()).staticConfig(new AddClassificationRequestBodyDataStaticConfigField.Builder().classification(new AddClassificationRequestBodyDataStaticConfigClassificationField.Builder().classificationDefinition("Other description").colorId(4L).build()).build()).build())))
+```
+
+### Arguments
+
+- requestBody `List`
+ - Request body of addClassification method
+- headers `AddClassificationHeaders`
+ - Headers of addClassification method
+
+
+### Returns
+
+This function returns a value of type `ClassificationTemplate`.
+
+Returns the updated `securityClassification` metadata template, which
+contains a `Box__Security__Classification__Key` field that lists all
+the classifications available to this enterprise.
+
+
+## Update classification
+
+Updates the labels and descriptions of one or more classifications
+available to the enterprise.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/metadata_templates/enterprise_12345/securityClassification-6VMVochwUWo/schema`.
+
+This operation is performed by calling function `updateClassification`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-metadata-templates-enterprise-securityClassification-6VMVochwUWo-schema--update/).
+
+
+```
+client.getClassifications().updateClassification(Arrays.asList(new UpdateClassificationRequestBody(classification.getKey(), new UpdateClassificationRequestBodyDataField.Builder(updatedClassificationName).staticConfig(new UpdateClassificationRequestBodyDataStaticConfigField.Builder().classification(new UpdateClassificationRequestBodyDataStaticConfigClassificationField.Builder().classificationDefinition(updatedClassificationDescription).colorId(2L).build()).build()).build())))
+```
+
+### Arguments
+
+- requestBody `List`
+ - Request body of updateClassification method
+- headers `UpdateClassificationHeaders`
+ - Headers of updateClassification method
+
+
+### Returns
+
+This function returns a value of type `ClassificationTemplate`.
+
+Returns the updated `securityClassification` metadata template, which
+contains a `Box__Security__Classification__Key` field that lists all
+the classifications available to this enterprise.
+
+
+## Add initial classifications
+
+When an enterprise does not yet have any classifications, this API call
+initializes the classification template with an initial set of
+classifications.
+
+If an enterprise already has a classification, the template will already
+exist and instead an API call should be made to add additional
+classifications.
+
+This operation is performed by calling function `createClassificationTemplate`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-templates-schema--classifications/).
+
+*Currently we don't have an example for calling `createClassificationTemplate` in integration tests*
+
+### Arguments
+
+- requestBody `CreateClassificationTemplateRequestBody`
+ - Request body of createClassificationTemplate method
+- headers `CreateClassificationTemplateHeaders`
+ - Headers of createClassificationTemplate method
+
+
+### Returns
+
+This function returns a value of type `ClassificationTemplate`.
+
+Returns a new `securityClassification` metadata template, which
+contains a `Box__Security__Classification__Key` field that lists all
+the classifications available to this enterprise.
+
+
diff --git a/docs/client.md b/docs/client.md
new file mode 100644
index 000000000..c78e51b7e
--- /dev/null
+++ b/docs/client.md
@@ -0,0 +1,210 @@
+# Client
+
+This is the central entrypoint for all SDK interaction. The BoxClient houses all the API endpoints
+divided across resource managers.
+
+
+
+
+- [Client](#client)
+- [Make custom HTTP request](#make-custom-http-request)
+ - [JSON request](#json-request)
+ - [Multi-part request](#multi-part-request)
+ - [Binary response](#binary-response)
+- [Additional headers](#additional-headers)
+ - [As-User header](#as-user-header)
+ - [Suppress notifications](#suppress-notifications)
+ - [Custom headers](#custom-headers)
+- [Custom Base URLs](#custom-base-urls)
+- [Interceptors](#interceptors)
+- [Use Timeouts for API calls](#use-timeouts-for-api-calls)
+- [Use Proxy for API calls](#use-proxy-for-api-calls)
+
+
+
+# Make custom HTTP request
+
+You can make custom HTTP requests using the `client.makeRequest()` method.
+This method allows you to make any HTTP request to the Box API. It will automatically use authentication and
+network configuration settings from the client.
+The method accepts a `FetchOptions` object as an argument and returns a `FetchResponse` object.
+
+## JSON request
+
+The following example demonstrates how to make a custom POST request to create a new folder in the root folder.
+
+```java
+FetchOptions fetchOptions = new FetchOptions.Builder("https://api.box.com/2.0/users/me", "GET")
+ .params(new HashMap<>() {{
+ put("fields", "name");
+ }})
+ .build();
+FetchResponse response = client.makeRequest(fetchOptions);
+System.out.println("Status code: " + response.getStatus());
+System.out.println("Response body: " + response.getContent());
+```
+
+## Multi-part request
+
+The following example demonstrates how to make a custom multipart request that uploads a file to a folder.
+
+```java
+List multipartItems = List.of(
+ new MultipartItem.Builder("attributes")
+ .data(JsonManager.serialize("{\"name\": \"newFileName\", \"parent\": { \"id\": \"0\" }}"))
+ .build(),
+ new MultipartItem.Builder("file")
+ .fileStream(new FileInputStream(new File("file.txt")))
+ .build()
+);
+FetchOptions fetchOptions = new FetchOptions.Builder("https://upload.box.com/api/2.0/files/content", "POST")
+ .contentType("multipart/form-data")
+ .multipartData(multipartItems)
+ .build();
+
+FetchResponse response = client.makeRequest(fetchOptions);
+System.out.println("Status code: " + response.getStatus());
+System.out.println("Response body: " + response.getContent());
+```
+
+## Binary response
+
+The following example demonstrates how to make a custom request that expects a binary response.
+It is required to specify the `responseFormat` parameter in the `FetchOptions` object to "binary".
+
+```java
+FetchOptions fetchOptions = new FetchOptions.Builder("https://upload.box.com/api/2.0/files/12345/content", "GET")
+ .responseFormat(ResponseFormat.BINARY)
+ .build();
+FetchResponse response = client.makeRequest(fetchOptions);
+System.out.println("Status code: " + response.getStatus());
+System.out.println("Response body: " + response.getContent());
+```
+
+# Additional headers
+
+BoxClient provides a convenient methods, which allow passing additional headers, which will be included
+in every API call made by the client.
+
+## As-User header
+
+The As-User header is used by enterprise admins to make API calls on behalf of their enterprise's users.
+This requires the API request to pass an As-User: USER-ID header. For more details see the [documentation on As-User](https://developer.box.com/en/guides/authentication/oauth2/as-user/).
+
+The following example assume that the client has been instantiated with an access token belonging to an admin-level user
+or Service Account with appropriate privileges to make As-User calls.
+
+Calling the `client.withAsUserHeader()` method creates a new client to impersonate user with the provided ID.
+All calls made with the new client will be made in context of the impersonated user, leaving the original client unmodified.
+
+
+
+```java
+BoxClient userClient = client.withAsUserHeader('1234567');
+```
+
+## Suppress notifications
+
+If you are making administrative API calls (that is, your application has “Manage an Enterprise”
+scope, and the user signing in is a co-admin with the correct "Edit settings for your company"
+permission) then you can suppress both email and webhook notifications. This can be used, for
+example, for a virus-scanning tool to download copies of everyone’s files in an enterprise,
+without every collaborator on the file getting an email. All actions will still appear in users'
+updates feed and audit logs.
+
+> **Note:** This functionality is only available for approved applications.
+
+Calling the `client.withSuppressedNotifications()` method creates a new client.
+For all calls made with the new client the notifications will be suppressed.
+
+```java
+BoxClient newClient = client.withSuppressedNotifications();
+```
+
+## Custom headers
+
+You can also specify the custom set of headers, which will be included in every API call made by client.
+Calling the `client.withExtraHeaders()` method creates a new client, leaving the original client unmodified.
+
+```java
+BoxClient newClient = client.withExtraHeaders(new HashMap<>() {{
+ put("X-My-Header", "124");
+}});
+```
+
+# Custom Base URLs
+
+You can also specify the custom base URLs, which will be used for API calls made by client.
+Calling the `client.withCustomBaseUrls()` method creates a new client, leaving the original client unmodified.
+
+```java
+BaseUrls baseUrls = new BaseUrls.Builder()
+ .baseUrl("https://new-base-url.com")
+ .uploadUrl("https://my-company-upload-url.com")
+ .oauth2Url("https://my-company.com/oauth2")
+ .build();
+BoxClient clientWithCustomBaseUrl = client.withCustomBaseUrls(baseUrls);
+```
+
+# Interceptors
+
+You can specify custom interceptors - methods that will be called just before making a request and right after
+receiving a response from the server. Using these function allows you to modify the request payload and response.
+Interceptor interface accepts two methods with the following signatures:
+
+```java
+FetchOptions beforeRequest(FetchOptions fetchOptions)
+FetchResponse afterRequest(FetchResponse fetchResponse)
+```
+
+You can apply more than one interceptor to the client by passing a list of interceptors to apply.
+Calling the `client.withInterceptors()` method creates a new client, leaving the original client unmodified.
+
+```java
+List interceptors = new ArrayList<>() {
+ {
+ add(new Interceptor() {
+ @Override
+ public FetchOptions beforeRequest(FetchOptions fetchOptions) {
+ return fetchOptions;
+ }
+
+ @Override
+ public FetchResponse afterRequest(FetchResponse fetchResponse) {
+ return fetchResponse;
+ }
+ });
+ }
+};
+BoxClient clientWithInterceptor = client.withInterceptors(interceptors);
+```
+
+# Use Timeouts for API calls
+
+In order to configure timeout for API calls, calling the `client.withTimeouts(config)` method creates a new client with timeout settings, leaving the original client unmodified.
+
+All timeout values are in milliseconds.
+
+```java
+TimeoutConfig timeoutConfig = new TimeoutConfig.Builder()
+ .connectionTimeoutMs(5000L)
+ .readTimeoutMs(30000L)
+ .requestTimeoutMs(60000L)
+ .build();
+BoxClient newClient = client.withTimeouts(timeoutConfig);
+```
+
+# Use Proxy for API calls
+
+In order to use a proxy for API calls, calling the `client.withProxy(proxyConfig)` method creates a new client, leaving the original client unmodified, with the username and password being optional. We only support adding proxy for BoxNetworkClient. If you are using your own implementation of NetworkClient, you would need to configure proxy on your own.
+
+**Note:** We are only supporting http/s proxies with basic authentication. NTLM and other authentication methods are not supported.
+
+```java
+ProxyConfig proxyConfig = new ProxyConfig("http://127.0.0.1:3128");
+newClient = client.withProxy(proxyConfig);
+
+//Using Basic Auth with username and password
+ProxyConfig proxyConfig = new ProxyConfig.Builder("http://127.0.0.1:3128").username("username").password("password").build();
+newClient = client.withProxy(proxyConfig);
+```
diff --git a/docs/collaborationallowlistentries.md b/docs/collaborationallowlistentries.md
new file mode 100644
index 000000000..20aa3c70b
--- /dev/null
+++ b/docs/collaborationallowlistentries.md
@@ -0,0 +1,129 @@
+# CollaborationAllowlistEntriesManager
+
+
+- [List allowed collaboration domains](#list-allowed-collaboration-domains)
+- [Add domain to list of allowed collaboration domains](#add-domain-to-list-of-allowed-collaboration-domains)
+- [Get allowed collaboration domain](#get-allowed-collaboration-domain)
+- [Remove domain from list of allowed collaboration domains](#remove-domain-from-list-of-allowed-collaboration-domains)
+
+## List allowed collaboration domains
+
+Returns the list domains that have been deemed safe to create collaborations
+for within the current enterprise.
+
+This operation is performed by calling function `getCollaborationWhitelistEntries`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collaboration-whitelist-entries/).
+
+
+```
+client.getCollaborationAllowlistEntries().getCollaborationWhitelistEntries()
+```
+
+### Arguments
+
+- queryParams `GetCollaborationWhitelistEntriesQueryParams`
+ - Query parameters of getCollaborationWhitelistEntries method
+- headers `GetCollaborationWhitelistEntriesHeaders`
+ - Headers of getCollaborationWhitelistEntries method
+
+
+### Returns
+
+This function returns a value of type `CollaborationAllowlistEntries`.
+
+Returns a collection of domains that are allowed for collaboration.
+
+
+## Add domain to list of allowed collaboration domains
+
+Creates a new entry in the list of allowed domains to allow
+collaboration for.
+
+This operation is performed by calling function `createCollaborationWhitelistEntry`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-collaboration-whitelist-entries/).
+
+
+```
+client.getCollaborationAllowlistEntries().createCollaborationWhitelistEntry(new CreateCollaborationWhitelistEntryRequestBody(domain, CreateCollaborationWhitelistEntryRequestBodyDirectionField.INBOUND))
+```
+
+### Arguments
+
+- requestBody `CreateCollaborationWhitelistEntryRequestBody`
+ - Request body of createCollaborationWhitelistEntry method
+- headers `CreateCollaborationWhitelistEntryHeaders`
+ - Headers of createCollaborationWhitelistEntry method
+
+
+### Returns
+
+This function returns a value of type `CollaborationAllowlistEntry`.
+
+Returns a new entry on the list of allowed domains.
+
+
+## Get allowed collaboration domain
+
+Returns a domain that has been deemed safe to create collaborations
+for within the current enterprise.
+
+This operation is performed by calling function `getCollaborationWhitelistEntryById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collaboration-whitelist-entries-id/).
+
+
+```
+client.getCollaborationAllowlistEntries().getCollaborationWhitelistEntryById(newEntry.getId())
+```
+
+### Arguments
+
+- collaborationWhitelistEntryId `String`
+ - The ID of the entry in the list. Example: "213123"
+- headers `GetCollaborationWhitelistEntryByIdHeaders`
+ - Headers of getCollaborationWhitelistEntryById method
+
+
+### Returns
+
+This function returns a value of type `CollaborationAllowlistEntry`.
+
+Returns an entry on the list of allowed domains.
+
+
+## Remove domain from list of allowed collaboration domains
+
+Removes a domain from the list of domains that have been deemed safe to create
+collaborations for within the current enterprise.
+
+This operation is performed by calling function `deleteCollaborationWhitelistEntryById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-collaboration-whitelist-entries-id/).
+
+
+```
+client.getCollaborationAllowlistEntries().deleteCollaborationWhitelistEntryById(entry.getId())
+```
+
+### Arguments
+
+- collaborationWhitelistEntryId `String`
+ - The ID of the entry in the list. Example: "213123"
+- headers `DeleteCollaborationWhitelistEntryByIdHeaders`
+ - Headers of deleteCollaborationWhitelistEntryById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the entry was
+successfully deleted.
+
+
diff --git a/docs/collaborationallowlistexempttargets.md b/docs/collaborationallowlistexempttargets.md
new file mode 100644
index 000000000..a96a3790c
--- /dev/null
+++ b/docs/collaborationallowlistexempttargets.md
@@ -0,0 +1,129 @@
+# CollaborationAllowlistExemptTargetsManager
+
+
+- [List users exempt from collaboration domain restrictions](#list-users-exempt-from-collaboration-domain-restrictions)
+- [Create user exemption from collaboration domain restrictions](#create-user-exemption-from-collaboration-domain-restrictions)
+- [Get user exempt from collaboration domain restrictions](#get-user-exempt-from-collaboration-domain-restrictions)
+- [Remove user from list of users exempt from domain restrictions](#remove-user-from-list-of-users-exempt-from-domain-restrictions)
+
+## List users exempt from collaboration domain restrictions
+
+Returns a list of users who have been exempt from the collaboration
+domain restrictions.
+
+This operation is performed by calling function `getCollaborationWhitelistExemptTargets`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collaboration-whitelist-exempt-targets/).
+
+
+```
+client.getCollaborationAllowlistExemptTargets().getCollaborationWhitelistExemptTargets()
+```
+
+### Arguments
+
+- queryParams `GetCollaborationWhitelistExemptTargetsQueryParams`
+ - Query parameters of getCollaborationWhitelistExemptTargets method
+- headers `GetCollaborationWhitelistExemptTargetsHeaders`
+ - Headers of getCollaborationWhitelistExemptTargets method
+
+
+### Returns
+
+This function returns a value of type `CollaborationAllowlistExemptTargets`.
+
+Returns a collection of user exemptions.
+
+
+## Create user exemption from collaboration domain restrictions
+
+Exempts a user from the restrictions set out by the allowed list of domains
+for collaborations.
+
+This operation is performed by calling function `createCollaborationWhitelistExemptTarget`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-collaboration-whitelist-exempt-targets/).
+
+
+```
+client.getCollaborationAllowlistExemptTargets().createCollaborationWhitelistExemptTarget(new CreateCollaborationWhitelistExemptTargetRequestBody(new CreateCollaborationWhitelistExemptTargetRequestBodyUserField(user.getId())))
+```
+
+### Arguments
+
+- requestBody `CreateCollaborationWhitelistExemptTargetRequestBody`
+ - Request body of createCollaborationWhitelistExemptTarget method
+- headers `CreateCollaborationWhitelistExemptTargetHeaders`
+ - Headers of createCollaborationWhitelistExemptTarget method
+
+
+### Returns
+
+This function returns a value of type `CollaborationAllowlistExemptTarget`.
+
+Returns a new exemption entry.
+
+
+## Get user exempt from collaboration domain restrictions
+
+Returns a users who has been exempt from the collaboration
+domain restrictions.
+
+This operation is performed by calling function `getCollaborationWhitelistExemptTargetById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collaboration-whitelist-exempt-targets-id/).
+
+
+```
+client.getCollaborationAllowlistExemptTargets().getCollaborationWhitelistExemptTargetById(newExemptTarget.getId())
+```
+
+### Arguments
+
+- collaborationWhitelistExemptTargetId `String`
+ - The ID of the exemption to the list. Example: "984923"
+- headers `GetCollaborationWhitelistExemptTargetByIdHeaders`
+ - Headers of getCollaborationWhitelistExemptTargetById method
+
+
+### Returns
+
+This function returns a value of type `CollaborationAllowlistExemptTarget`.
+
+Returns the user's exempted from the list of collaboration domains.
+
+
+## Remove user from list of users exempt from domain restrictions
+
+Removes a user's exemption from the restrictions set out by the allowed list
+of domains for collaborations.
+
+This operation is performed by calling function `deleteCollaborationWhitelistExemptTargetById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-collaboration-whitelist-exempt-targets-id/).
+
+
+```
+client.getCollaborationAllowlistExemptTargets().deleteCollaborationWhitelistExemptTargetById(exemptTarget.getId())
+```
+
+### Arguments
+
+- collaborationWhitelistExemptTargetId `String`
+ - The ID of the exemption to the list. Example: "984923"
+- headers `DeleteCollaborationWhitelistExemptTargetByIdHeaders`
+ - Headers of deleteCollaborationWhitelistExemptTargetById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the exemption was
+successfully deleted.
+
+
diff --git a/docs/collections.md b/docs/collections.md
new file mode 100644
index 000000000..dabe7ba5d
--- /dev/null
+++ b/docs/collections.md
@@ -0,0 +1,91 @@
+# CollectionsManager
+
+
+- [List all collections](#list-all-collections)
+- [List collection items](#list-collection-items)
+- [Get collection by ID](#get-collection-by-id)
+
+## List all collections
+
+Retrieves all collections for a given user.
+
+Currently, only the `favorites` collection
+is supported.
+
+This operation is performed by calling function `getCollections`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collections/).
+
+*Currently we don't have an example for calling `getCollections` in integration tests*
+
+### Arguments
+
+- queryParams `GetCollectionsQueryParams`
+ - Query parameters of getCollections method
+- headers `GetCollectionsHeaders`
+ - Headers of getCollections method
+
+
+### Returns
+
+This function returns a value of type `Collections`.
+
+Returns all collections for the given user.
+
+
+## List collection items
+
+Retrieves the files and/or folders contained within
+this collection.
+
+This operation is performed by calling function `getCollectionItems`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collections-id-items/).
+
+*Currently we don't have an example for calling `getCollectionItems` in integration tests*
+
+### Arguments
+
+- collectionId `String`
+ - The ID of the collection. Example: "926489"
+- queryParams `GetCollectionItemsQueryParams`
+ - Query parameters of getCollectionItems method
+- headers `GetCollectionItemsHeaders`
+ - Headers of getCollectionItems method
+
+
+### Returns
+
+This function returns a value of type `ItemsOffsetPaginated`.
+
+Returns an array of items in the collection.
+
+
+## Get collection by ID
+
+Retrieves a collection by its ID.
+
+This operation is performed by calling function `getCollectionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collections-id/).
+
+*Currently we don't have an example for calling `getCollectionById` in integration tests*
+
+### Arguments
+
+- collectionId `String`
+ - The ID of the collection. Example: "926489"
+- headers `GetCollectionByIdHeaders`
+ - Headers of getCollectionById method
+
+
+### Returns
+
+This function returns a value of type `Collection`.
+
+Returns an array of items in the collection.
+
+
diff --git a/docs/comments.md b/docs/comments.md
new file mode 100644
index 000000000..4572fa92d
--- /dev/null
+++ b/docs/comments.md
@@ -0,0 +1,171 @@
+# CommentsManager
+
+
+- [List file comments](#list-file-comments)
+- [Get comment](#get-comment)
+- [Update comment](#update-comment)
+- [Remove comment](#remove-comment)
+- [Create comment](#create-comment)
+
+## List file comments
+
+Retrieves a list of comments for a file.
+
+This operation is performed by calling function `getFileComments`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-comments/).
+
+
+```
+client.getComments().getFileComments(fileId)
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetFileCommentsQueryParams`
+ - Query parameters of getFileComments method
+- headers `GetFileCommentsHeaders`
+ - Headers of getFileComments method
+
+
+### Returns
+
+This function returns a value of type `Comments`.
+
+Returns a collection of comment objects. If there are no
+comments on this file an empty collection will be returned.
+
+
+## Get comment
+
+Retrieves the message and metadata for a specific comment, as well
+as information on the user who created the comment.
+
+This operation is performed by calling function `getCommentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-comments-id/).
+
+
+```
+client.getComments().getCommentById(newComment.getId())
+```
+
+### Arguments
+
+- commentId `String`
+ - The ID of the comment. Example: "12345"
+- queryParams `GetCommentByIdQueryParams`
+ - Query parameters of getCommentById method
+- headers `GetCommentByIdHeaders`
+ - Headers of getCommentById method
+
+
+### Returns
+
+This function returns a value of type `CommentFull`.
+
+Returns a full comment object.
+
+
+## Update comment
+
+Update the message of a comment.
+
+This operation is performed by calling function `updateCommentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-comments-id/).
+
+
+```
+client.getComments().updateCommentById(newReplyComment.getId(), new UpdateCommentByIdRequestBody.Builder().message(newMessage).build())
+```
+
+### Arguments
+
+- commentId `String`
+ - The ID of the comment. Example: "12345"
+- requestBody `UpdateCommentByIdRequestBody`
+ - Request body of updateCommentById method
+- queryParams `UpdateCommentByIdQueryParams`
+ - Query parameters of updateCommentById method
+- headers `UpdateCommentByIdHeaders`
+ - Headers of updateCommentById method
+
+
+### Returns
+
+This function returns a value of type `CommentFull`.
+
+Returns the updated comment object.
+
+
+## Remove comment
+
+Permanently deletes a comment.
+
+This operation is performed by calling function `deleteCommentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-comments-id/).
+
+
+```
+client.getComments().deleteCommentById(newComment.getId())
+```
+
+### Arguments
+
+- commentId `String`
+ - The ID of the comment. Example: "12345"
+- headers `DeleteCommentByIdHeaders`
+ - Headers of deleteCommentById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the comment has been deleted.
+
+
+## Create comment
+
+Adds a comment by the user to a specific file, or
+as a reply to an other comment.
+
+This operation is performed by calling function `createComment`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-comments/).
+
+
+```
+client.getComments().createComment(new CreateCommentRequestBody(message, new CreateCommentRequestBodyItemField(fileId, CreateCommentRequestBodyItemTypeField.FILE)))
+```
+
+### Arguments
+
+- requestBody `CreateCommentRequestBody`
+ - Request body of createComment method
+- queryParams `CreateCommentQueryParams`
+ - Query parameters of createComment method
+- headers `CreateCommentHeaders`
+ - Headers of createComment method
+
+
+### Returns
+
+This function returns a value of type `CommentFull`.
+
+Returns the newly created comment object.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+
diff --git a/docs/configuration.md b/docs/configuration.md
new file mode 100644
index 000000000..a07fc503f
--- /dev/null
+++ b/docs/configuration.md
@@ -0,0 +1,215 @@
+# Configuration
+
+
+
+
+- [Retry Strategy](#retry-strategy)
+ - [Overview](#overview)
+ - [Default Configuration](#default-configuration)
+ - [Retry Decision Flow](#retry-decision-flow)
+ - [Exponential Backoff Algorithm](#exponential-backoff-algorithm)
+ - [Example Delays (with default settings)](#example-delays-with-default-settings)
+ - [Retry-After Header](#retry-after-header)
+ - [Network Exception Handling](#network-exception-handling)
+ - [Customizing Retry Parameters](#customizing-retry-parameters)
+ - [Custom Retry Strategy](#custom-retry-strategy)
+- [Timeouts](#timeouts)
+
+
+
+## Retry Strategy
+
+### Overview
+
+The SDK ships with a built-in retry strategy (`BoxRetryStrategy`) that implements the `RetryStrategy` interface. The `BoxNetworkClient`, which serves as the default network client, uses this strategy to automatically retry failed API requests with exponential backoff.
+
+The retry strategy exposes two methods:
+
+- **`shouldRetry`** — Determines whether a failed request should be retried based on the HTTP status code, response headers, attempt count, and authentication state.
+- **`retryAfter`** — Computes the delay (in seconds) before the next retry attempt, using either the server-provided `Retry-After` header or an exponential backoff formula.
+
+### Default Configuration
+
+| Parameter | Default | Description |
+| -------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `maxAttempts` | `5` | Maximum number of retry attempts for HTTP error responses (status 4xx/5xx). |
+| `retryBaseInterval` | `1` (second) | Base interval used in the exponential backoff calculation. |
+| `retryRandomizationFactor` | `0.5` | Jitter factor applied to the backoff delay. The actual delay is multiplied by a random value between `1 - factor` and `1 + factor`. |
+| `maxRetriesOnException` | `2` | Maximum number of retries for network-level exceptions (connection failures, timeouts). These are tracked by a separate counter from HTTP error retries. |
+
+### Retry Decision Flow
+
+The following diagram shows how `BoxRetryStrategy.shouldRetry` decides whether to retry a request:
+
+```
+ shouldRetry(fetchOptions, fetchResponse, attemptNumber)
+ |
+ v
+ +-----------------------+
+ | status == 0 | Yes
+ | (network exception)? |----------> attemptNumber <= maxRetriesOnException?
+ +-----------------------+ | |
+ | No Yes No
+ v | |
+ +-----------------------+ [RETRY] [NO RETRY]
+ | attemptNumber >= |
+ | maxAttempts? |
+ +-----------------------+
+ | |
+ Yes No
+ | |
+ [NO RETRY] v
+ +-----------------------+
+ | status == 202 AND | Yes
+ | Retry-After header? |----------> [RETRY]
+ +-----------------------+
+ | No
+ v
+ +-----------------------+
+ | status >= 500 | Yes
+ | (server error)? |----------> [RETRY]
+ +-----------------------+
+ | No
+ v
+ +-----------------------+
+ | status == 429 | Yes
+ | (rate limited)? |----------> [RETRY]
+ +-----------------------+
+ | No
+ v
+ +-----------------------+
+ | status == 401 AND | Yes
+ | auth available? |----------> Refresh token, then [RETRY]
+ +-----------------------+
+ | No
+ v
+ [NO RETRY]
+```
+
+### Exponential Backoff Algorithm
+
+When the response does not include a `Retry-After` header, the retry delay is computed using exponential backoff with randomized jitter:
+
+```
+delay = 2^attemptNumber * retryBaseInterval * random(1 - factor, 1 + factor)
+```
+
+Where:
+
+- `attemptNumber` is the current attempt (1-based)
+- `retryBaseInterval` defaults to `1` second
+- `factor` is `retryRandomizationFactor` (default `0.5`)
+- `random(min, max)` returns a uniformly distributed value in `[min, max]`
+
+#### Example Delays (with default settings)
+
+| Attempt | Base Delay | Min Delay (factor=0.5) | Max Delay (factor=0.5) |
+| ------- | ---------- | ---------------------- | ---------------------- |
+| 1 | 2s | 1.0s | 3.0s |
+| 2 | 4s | 2.0s | 6.0s |
+| 3 | 8s | 4.0s | 12.0s |
+| 4 | 16s | 8.0s | 24.0s |
+
+### Retry-After Header
+
+When the server includes a `Retry-After` header in the response, the SDK uses the header value directly as the delay in seconds instead of computing an exponential backoff delay. This applies to any retryable response that includes the header, including:
+
+- `202 Accepted` with `Retry-After` (long-running operations)
+- `429 Too Many Requests` with `Retry-After`
+- `5xx` server errors with `Retry-After`
+
+The header value is parsed as a floating-point number representing seconds.
+
+### Network Exception Handling
+
+Network-level failures (connection refused, DNS resolution errors, timeouts, TLS errors) are represented internally as responses with status `0`. These exceptions are tracked by a **separate counter** (`maxRetriesOnException`, default `2`) from the regular HTTP error retry counter (`maxAttempts`).
+
+This means:
+
+- Network exception retries are tracked independently from HTTP error retries, each with their own counter and backoff progression.
+- A request can fail up to `maxRetriesOnException` times due to network exceptions, but each exception retry also increments the overall attempt counter, so the total number of retries across both exception and HTTP error types is bounded by `maxAttempts`.
+
+### Customizing Retry Parameters
+
+You can customize all retry parameters by initializing `BoxRetryStrategy` with the desired values and passing it to `NetworkSession`:
+
+```java
+BoxDeveloperTokenAuth auth = new BoxDeveloperTokenAuth("DEVELOPER_TOKEN");
+NetworkSession session = new NetworkSession.Builder()
+ .retryStrategy(
+ new BoxRetryStrategy.Builder()
+ .maxAttempts(3)
+ .retryBaseInterval(2)
+ .retryRandomizationFactor(0.3)
+ .maxRetriesOnException(1)
+ .build()
+ )
+ .build();
+BoxClient client = new BoxClient.Builder(auth)
+ .networkSession(session)
+ .build();
+```
+
+### Custom Retry Strategy
+
+You can implement your own retry strategy by implementing the `RetryStrategy` interface and overriding the `shouldRetry` and `retryAfter` methods:
+
+```java
+BoxDeveloperTokenAuth auth = new BoxDeveloperTokenAuth("DEVELOPER_TOKEN");
+RetryStrategy customRetryStrategy = new RetryStrategy() {
+ @Override
+ public boolean shouldRetry(FetchOptions fetchOptions, FetchResponse fetchResponse, int attemptNumber) {
+ return fetchResponse.getStatus() >= 500 && attemptNumber < 3;
+ }
+
+ @Override
+ public double retryAfter(FetchOptions fetchOptions, FetchResponse fetchResponse, int attemptNumber) {
+ return 1.0;
+ }
+};
+NetworkSession session = new NetworkSession.Builder()
+ .retryStrategy(customRetryStrategy)
+ .build();
+BoxClient client = new BoxClient.Builder(auth)
+ .networkSession(session)
+ .build();
+```
+
+## Timeouts
+
+You can configure network timeouts with `TimeoutConfig` on `NetworkSession`.
+The SDK supports three timeout values, all in milliseconds:
+
+| Parameter | Description |
+| --------------------- | -------------------------------------------------------------------------------------------------------- |
+| `connectionTimeoutMs` | Maximum time to wait for the TCP connection to be established. Maps to OkHttp `connectTimeout`. |
+| `readTimeoutMs` | Maximum idle time between data packets while reading the response. Maps to OkHttp `readTimeout`. |
+| `requestTimeoutMs` | Maximum total time for the entire HTTP request (connect + send + receive). Maps to OkHttp `callTimeout`. |
+
+```java
+BoxDeveloperTokenAuth auth = new BoxDeveloperTokenAuth("DEVELOPER_TOKEN");
+TimeoutConfig timeoutConfig = new TimeoutConfig.Builder()
+ .connectionTimeoutMs(5000L)
+ .readTimeoutMs(30000L)
+ .requestTimeoutMs(60000L)
+ .build();
+
+NetworkSession session = new NetworkSession()
+ .withTimeoutConfig(timeoutConfig);
+
+BoxClient client = new BoxClient.Builder(auth)
+ .networkSession(session)
+ .build();
+```
+
+How timeout handling works:
+
+- `connectionTimeoutMs` controls how long the client waits to establish a connection.
+- `readTimeoutMs` controls how long the client waits for data while reading the response.
+- `requestTimeoutMs` controls the maximum total time for the entire request lifecycle, including connection, sending the request body, and reading the response.
+- If timeout config is not provided, the SDK uses default timeouts: `connectionTimeoutMs: 10000` (10 seconds), `readTimeoutMs: 60000` (60 seconds), and `requestTimeoutMs: 21600000` (6 hours).
+- Each timeout is optional. If a value is not provided, the client keeps its existing timeout for that setting.
+- To disable a timeout, set its value to `0L`.
+- Timeout failures are handled as request exceptions, then retry behavior is controlled by the configured retry strategy.
+- If retries are exhausted after timeout failures, the SDK throws `BoxSDKError` with the underlying timeout exception as the cause.
+- Timeout applies to a single HTTP request attempt to the Box API (not the total time across all retries).
diff --git a/docs/devicepinners.md b/docs/devicepinners.md
new file mode 100644
index 000000000..06078a729
--- /dev/null
+++ b/docs/devicepinners.md
@@ -0,0 +1,99 @@
+# DevicePinnersManager
+
+
+- [Get device pin](#get-device-pin)
+- [Remove device pin](#remove-device-pin)
+- [List enterprise device pins](#list-enterprise-device-pins)
+
+## Get device pin
+
+Retrieves information about an individual device pin.
+
+This operation is performed by calling function `getDevicePinnerById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-device-pinners-id/).
+
+
+```
+client.getDevicePinners().getDevicePinnerById(devicePinnerId)
+```
+
+### Arguments
+
+- devicePinnerId `String`
+ - The ID of the device pin. Example: "2324234"
+- headers `GetDevicePinnerByIdHeaders`
+ - Headers of getDevicePinnerById method
+
+
+### Returns
+
+This function returns a value of type `DevicePinner`.
+
+Returns information about a single device pin.
+
+
+## Remove device pin
+
+Deletes an individual device pin.
+
+This operation is performed by calling function `deleteDevicePinnerById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-device-pinners-id/).
+
+
+```
+client.getDevicePinners().deleteDevicePinnerById(devicePinnerId)
+```
+
+### Arguments
+
+- devicePinnerId `String`
+ - The ID of the device pin. Example: "2324234"
+- headers `DeleteDevicePinnerByIdHeaders`
+ - Headers of deleteDevicePinnerById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the pin has been deleted.
+
+
+## List enterprise device pins
+
+Retrieves all the device pins within an enterprise.
+
+The user must have admin privileges, and the application
+needs the "manage enterprise" scope to make this call.
+
+This operation is performed by calling function `getEnterpriseDevicePinners`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-enterprises-id-device-pinners/).
+
+
+```
+client.getDevicePinners().getEnterpriseDevicePinners(enterpriseId)
+```
+
+### Arguments
+
+- enterpriseId `String`
+ - The ID of the enterprise. Example: "3442311"
+- queryParams `GetEnterpriseDevicePinnersQueryParams`
+ - Query parameters of getEnterpriseDevicePinners method
+- headers `GetEnterpriseDevicePinnersHeaders`
+ - Headers of getEnterpriseDevicePinners method
+
+
+### Returns
+
+This function returns a value of type `DevicePinners`.
+
+Returns a list of device pins for a given enterprise.
+
+
diff --git a/docs/docgen.md b/docs/docgen.md
new file mode 100644
index 000000000..b92087491
--- /dev/null
+++ b/docs/docgen.md
@@ -0,0 +1,126 @@
+# DocgenManager
+
+
+- [Get Box Doc Gen job by ID](#get-box-doc-gen-job-by-id)
+- [List all Box Doc Gen jobs](#list-all-box-doc-gen-jobs)
+- [Get Box Doc Gen jobs by batch ID](#get-box-doc-gen-jobs-by-batch-id)
+- [Generate document using Box Doc Gen template](#generate-document-using-box-doc-gen-template)
+
+## Get Box Doc Gen job by ID
+
+Get details of the Box Doc Gen job.
+
+This operation is performed by calling function `getDocgenJobByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-docgen-jobs-id/).
+
+
+```
+client.getDocgen().getDocgenJobByIdV2025R0(docgenJobItemFromList.getId())
+```
+
+### Arguments
+
+- jobId `String`
+ - Box Doc Gen job ID. Example: 123
+- headers `GetDocgenJobByIdV2025R0Headers`
+ - Headers of getDocgenJobByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenJobV2025R0`.
+
+Details of the Box Doc Gen job.
+
+
+## List all Box Doc Gen jobs
+
+Lists all Box Doc Gen jobs for a user.
+
+This operation is performed by calling function `getDocgenJobsV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-docgen-jobs/).
+
+
+```
+client.getDocgen().getDocgenJobsV2025R0(new GetDocgenJobsV2025R0QueryParams.Builder().limit(10000L).build())
+```
+
+### Arguments
+
+- queryParams `GetDocgenJobsV2025R0QueryParams`
+ - Query parameters of getDocgenJobsV2025R0 method
+- headers `GetDocgenJobsV2025R0Headers`
+ - Headers of getDocgenJobsV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenJobsFullV2025R0`.
+
+A list of Box Doc Gen jobs.
+
+
+## Get Box Doc Gen jobs by batch ID
+
+Lists Box Doc Gen jobs in a batch.
+
+This operation is performed by calling function `getDocgenBatchJobByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-docgen-batch-jobs-id/).
+
+
+```
+client.getDocgen().getDocgenBatchJobByIdV2025R0(docgenBatch.getId())
+```
+
+### Arguments
+
+- batchId `String`
+ - Box Doc Gen batch ID. Example: 123
+- queryParams `GetDocgenBatchJobByIdV2025R0QueryParams`
+ - Query parameters of getDocgenBatchJobByIdV2025R0 method
+- headers `GetDocgenBatchJobByIdV2025R0Headers`
+ - Headers of getDocgenBatchJobByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenJobsV2025R0`.
+
+Returns a list of Box Doc Gen jobs in a Box Doc Gen batch.
+
+
+## Generate document using Box Doc Gen template
+
+Generates a document using a Box Doc Gen template.
+
+This operation is performed by calling function `createDocgenBatchV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-docgen-batches/).
+
+
+```
+client.getDocgen().createDocgenBatchV2025R0(new DocGenBatchCreateRequestV2025R0(new FileReferenceV2025R0(uploadedFileDocx.getId()), "api", new DocGenBatchCreateRequestV2025R0DestinationFolderField(folder.getId()), "pdf", Arrays.asList(new DocGenDocumentGenerationDataV2025R0("test", mapOf(entryOf("abc", "xyz"))))))
+```
+
+### Arguments
+
+- requestBody `DocGenBatchCreateRequestV2025R0`
+ - Request body of createDocgenBatchV2025R0 method
+- headers `CreateDocgenBatchV2025R0Headers`
+ - Headers of createDocgenBatchV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenBatchBaseV2025R0`.
+
+The created Batch ID.
+
+
diff --git a/docs/docgentemplate.md b/docs/docgentemplate.md
new file mode 100644
index 000000000..c427b2af6
--- /dev/null
+++ b/docs/docgentemplate.md
@@ -0,0 +1,188 @@
+# DocgenTemplateManager
+
+
+- [Create Box Doc Gen template](#create-box-doc-gen-template)
+- [List Box Doc Gen templates](#list-box-doc-gen-templates)
+- [Delete Box Doc Gen template](#delete-box-doc-gen-template)
+- [Get Box Doc Gen template by ID](#get-box-doc-gen-template-by-id)
+- [List all Box Doc Gen template tags in template](#list-all-box-doc-gen-template-tags-in-template)
+- [Get list of all Box Doc Gen jobs for template](#get-list-of-all-box-doc-gen-jobs-for-template)
+
+## Create Box Doc Gen template
+
+Marks a file as a Box Doc Gen template.
+
+This operation is performed by calling function `createDocgenTemplateV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-docgen-templates/).
+
+
+```
+client.getDocgenTemplate().createDocgenTemplateV2025R0(new DocGenTemplateCreateRequestV2025R0(new FileReferenceV2025R0(file.getId())))
+```
+
+### Arguments
+
+- requestBody `DocGenTemplateCreateRequestV2025R0`
+ - Request body of createDocgenTemplateV2025R0 method
+- headers `CreateDocgenTemplateV2025R0Headers`
+ - Headers of createDocgenTemplateV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenTemplateBaseV2025R0`.
+
+The file which has now been marked as a Box Doc Gen template.
+
+
+## List Box Doc Gen templates
+
+Lists Box Doc Gen templates on which the user is a collaborator.
+
+This operation is performed by calling function `getDocgenTemplatesV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-docgen-templates/).
+
+
+```
+client.getDocgenTemplate().getDocgenTemplatesV2025R0()
+```
+
+### Arguments
+
+- queryParams `GetDocgenTemplatesV2025R0QueryParams`
+ - Query parameters of getDocgenTemplatesV2025R0 method
+- headers `GetDocgenTemplatesV2025R0Headers`
+ - Headers of getDocgenTemplatesV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenTemplatesV2025R0`.
+
+Returns a collection of templates.
+
+
+## Delete Box Doc Gen template
+
+Unmarks file as Box Doc Gen template.
+
+This operation is performed by calling function `deleteDocgenTemplateByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/delete-docgen-templates-id/).
+
+
+```
+client.getDocgenTemplate().deleteDocgenTemplateByIdV2025R0(createdDocgenTemplate.getFile().getId())
+```
+
+### Arguments
+
+- templateId `String`
+ - ID of the file which will no longer be marked as a Box Doc Gen template. Example: "123"
+- headers `DeleteDocgenTemplateByIdV2025R0Headers`
+ - Headers of deleteDocgenTemplateByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when a file is no longer marked as a Box Doc Gen template.
+
+
+## Get Box Doc Gen template by ID
+
+Lists details of a specific Box Doc Gen template.
+
+This operation is performed by calling function `getDocgenTemplateByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-docgen-templates-id/).
+
+
+```
+client.getDocgenTemplate().getDocgenTemplateByIdV2025R0(createdDocgenTemplate.getFile().getId())
+```
+
+### Arguments
+
+- templateId `String`
+ - The ID of a Box Doc Gen template. Example: 123
+- headers `GetDocgenTemplateByIdV2025R0Headers`
+ - Headers of getDocgenTemplateByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenTemplateV2025R0`.
+
+Returns a template.
+
+
+## List all Box Doc Gen template tags in template
+
+Lists all tags in a Box Doc Gen template.
+
+This operation is performed by calling function `getDocgenTemplateTagsV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-docgen-templates-id-tags/).
+
+
+```
+client.getDocgenTemplate().getDocgenTemplateTagsV2025R0(fetchedDocgenTemplate.getFile().getId())
+```
+
+### Arguments
+
+- templateId `String`
+ - ID of template. Example: 123
+- queryParams `GetDocgenTemplateTagsV2025R0QueryParams`
+ - Query parameters of getDocgenTemplateTagsV2025R0 method
+- headers `GetDocgenTemplateTagsV2025R0Headers`
+ - Headers of getDocgenTemplateTagsV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenTagsV2025R0`.
+
+A list of document generation template tags.Processing tags for the file.
+
+
+## Get list of all Box Doc Gen jobs for template
+
+Lists the users jobs which use this template.
+
+This operation is performed by calling function `getDocgenTemplateJobByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-docgen-template-jobs-id/).
+
+
+```
+client.getDocgenTemplate().getDocgenTemplateJobByIdV2025R0(fetchedDocgenTemplate.getFile().getId())
+```
+
+### Arguments
+
+- templateId `String`
+ - Id of template to fetch jobs for. Example: 123
+- queryParams `GetDocgenTemplateJobByIdV2025R0QueryParams`
+ - Query parameters of getDocgenTemplateJobByIdV2025R0 method
+- headers `GetDocgenTemplateJobByIdV2025R0Headers`
+ - Headers of getDocgenTemplateJobByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `DocGenJobsV2025R0`.
+
+A single Box Doc Gen template.
+
+
diff --git a/docs/downloads.md b/docs/downloads.md
new file mode 100644
index 000000000..36c3c56ab
--- /dev/null
+++ b/docs/downloads.md
@@ -0,0 +1,120 @@
+# DownloadsManager
+
+
+- [Download file URL](#download-file-url)
+- [Download file](#download-file)
+- [Download file](#download-file)
+
+## Download file URL
+
+Get the download URL without downloading the content.
+
+This operation is performed by calling function `getDownloadFileUrl`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-content/).
+
+
+```
+client.getDownloads().getDownloadFileUrl(uploadedFile.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetDownloadFileUrlQueryParams`
+ - Query parameters of downloadFile method
+- headers `GetDownloadFileUrlHeaders`
+ - Headers of downloadFile method
+
+
+### Returns
+
+This function returns a value of type `String`.
+
+Returns the requested file if the client has the **follow
+redirects** setting enabled to automatically
+follow HTTP `3xx` responses as redirects. If not, the request
+will return `302` instead.
+For details, see
+the [download file guide](https://developer.box.com/guides/downloads/file#download-url).If the file is not ready to be downloaded yet `Retry-After` header will
+be returned indicating the time in seconds after which the file will
+be available for the client to download.
+
+This response can occur when the file was uploaded immediately before the
+download request.
+
+
+## Download file
+
+Returns the contents of a file in binary format.
+
+This operation is performed by calling function `downloadFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-content/).
+
+
+```
+client.getDownloads().downloadFile(uploadedFile.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `DownloadFileQueryParams`
+ - Query parameters of downloadFile method
+- headers `DownloadFileHeaders`
+ - Headers of downloadFile method
+
+
+### Returns
+
+This function returns a value of type `InputStream`.
+
+Returns the requested file if the client has the **follow
+redirects** setting enabled to automatically
+follow HTTP `3xx` responses as redirects. If not, the request
+will return `302` instead.
+For details, see
+the [download file guide](https://developer.box.com/guides/downloads/file#download-url).If the file is not ready to be downloaded yet `Retry-After` header will
+be returned indicating the time in seconds after which the file will
+be available for the client to download.
+
+This response can occur when the file was uploaded immediately before the
+download request.
+
+
+## Download file
+
+Download file to a given output stream
+
+This operation is performed by calling function `downloadFileToOutputStream`.
+
+
+
+```
+client.getDownloads().downloadFileToOutputStream(uploadedFile.getId(), fileOutputStream)
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- outputStream `OutputStream`
+ - Download file to a given output stream
+- queryParams `DownloadFileToOutputStreamQueryParams`
+ - Query parameters of downloadFile method
+- headers `DownloadFileToOutputStreamHeaders`
+ - Headers of downloadFile method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+
+
+
diff --git a/docs/emailaliases.md b/docs/emailaliases.md
new file mode 100644
index 000000000..2046bf577
--- /dev/null
+++ b/docs/emailaliases.md
@@ -0,0 +1,99 @@
+# EmailAliasesManager
+
+
+- [List user's email aliases](#list-users-email-aliases)
+- [Create email alias](#create-email-alias)
+- [Remove email alias](#remove-email-alias)
+
+## List user's email aliases
+
+Retrieves all email aliases for a user. The collection
+does not include the primary login for the user.
+
+This operation is performed by calling function `getUserEmailAliases`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-users-id-email-aliases/).
+
+
+```
+client.getEmailAliases().getUserEmailAliases(newUser.getId())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- headers `GetUserEmailAliasesHeaders`
+ - Headers of getUserEmailAliases method
+
+
+### Returns
+
+This function returns a value of type `EmailAliases`.
+
+Returns a collection of email aliases.
+
+
+## Create email alias
+
+Adds a new email alias to a user account..
+
+This operation is performed by calling function `createUserEmailAlias`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-users-id-email-aliases/).
+
+
+```
+client.getEmailAliases().createUserEmailAlias(newUser.getId(), new CreateUserEmailAliasRequestBody(newAliasEmail))
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- requestBody `CreateUserEmailAliasRequestBody`
+ - Request body of createUserEmailAlias method
+- headers `CreateUserEmailAliasHeaders`
+ - Headers of createUserEmailAlias method
+
+
+### Returns
+
+This function returns a value of type `EmailAlias`.
+
+Returns the newly created email alias object.
+
+
+## Remove email alias
+
+Removes an email alias from a user.
+
+This operation is performed by calling function `deleteUserEmailAliasById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-users-id-email-aliases-id/).
+
+
+```
+client.getEmailAliases().deleteUserEmailAliasById(newUser.getId(), newAlias.getId())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- emailAliasId `String`
+ - The ID of the email alias. Example: "23432"
+- headers `DeleteUserEmailAliasByIdHeaders`
+ - Headers of deleteUserEmailAliasById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Removes the alias and returns an empty response.
+
+
diff --git a/docs/enterpriseconfigurations.md b/docs/enterpriseconfigurations.md
new file mode 100644
index 000000000..5ee3c5740
--- /dev/null
+++ b/docs/enterpriseconfigurations.md
@@ -0,0 +1,36 @@
+# EnterpriseConfigurationsManager
+
+
+- [Get enterprise configuration](#get-enterprise-configuration)
+
+## Get enterprise configuration
+
+Retrieves the configuration for an enterprise.
+
+This operation is performed by calling function `getEnterpriseConfigurationByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-enterprise-configurations-id/).
+
+
+```
+adminClient.getEnterpriseConfigurations().getEnterpriseConfigurationByIdV2025R0(enterpriseId, new GetEnterpriseConfigurationByIdV2025R0QueryParams(Arrays.asList("user_settings", "content_and_sharing", "security", "shield")))
+```
+
+### Arguments
+
+- enterpriseId `String`
+ - The ID of the enterprise. Example: "3442311"
+- queryParams `GetEnterpriseConfigurationByIdV2025R0QueryParams`
+ - Query parameters of getEnterpriseConfigurationByIdV2025R0 method
+- headers `GetEnterpriseConfigurationByIdV2025R0Headers`
+ - Headers of getEnterpriseConfigurationByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `EnterpriseConfigurationV2025R0`.
+
+Returns the enterprise configuration.
+
+
diff --git a/docs/events.md b/docs/events.md
new file mode 100644
index 000000000..c826a9814
--- /dev/null
+++ b/docs/events.md
@@ -0,0 +1,137 @@
+# EventsManager
+
+
+- [Get events long poll endpoint](#get-events-long-poll-endpoint)
+- [List user and enterprise events](#list-user-and-enterprise-events)
+- [Get event stream](#get-event-stream)
+
+## Get events long poll endpoint
+
+Returns a list of real-time servers that can be used for long-polling updates
+to the [event stream](https://developer.box.com/reference/get-events).
+
+Long polling is the concept where a HTTP request is kept open until the
+server sends a response, then repeating the process over and over to receive
+updated responses.
+
+Long polling the event stream can only be used for user events, not for
+enterprise events.
+
+To use long polling, first use this endpoint to retrieve a list of long poll
+URLs. Next, make a long poll request to any of the provided URLs.
+
+When an event occurs in monitored account a response with the value
+`new_change` will be sent. The response contains no other details as
+it only serves as a prompt to take further action such as sending a
+request to the [events endpoint](https://developer.box.com/reference/get-events) with the last known
+`stream_position`.
+
+After the server sends this response it closes the connection. You must now
+repeat the long poll process to begin listening for events again.
+
+If no events occur for a while and the connection times out you will
+receive a response with the value `reconnect`. When you receive this response
+you’ll make another call to this endpoint to restart the process.
+
+If you receive no events in `retry_timeout` seconds then you will need to
+make another request to the real-time server (one of the URLs in the response
+for this endpoint). This might be necessary due to network errors.
+
+Finally, if you receive a `max_retries` error when making a request to the
+real-time server, you should start over by making a call to this endpoint
+first.
+
+This operation is performed by calling function `getEventsWithLongPolling`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/options-events/).
+
+
+```
+client.getEvents().getEventsWithLongPolling()
+```
+
+### Arguments
+
+- headers `GetEventsWithLongPollingHeaders`
+ - Headers of getEventsWithLongPolling method
+
+
+### Returns
+
+This function returns a value of type `RealtimeServers`.
+
+Returns a paginated array of servers that can be used
+instead of the regular endpoints for long-polling events.
+
+
+## List user and enterprise events
+
+Returns up to a year of past events for a given user
+or for the entire enterprise.
+
+By default this returns events for the authenticated user. To retrieve events
+for the entire enterprise, set the `stream_type` to `admin_logs_streaming`
+for live monitoring of new events, or `admin_logs` for querying across
+historical events. The user making the API call will
+need to have admin privileges, and the application will need to have the
+scope `manage enterprise properties` checked.
+
+This operation is performed by calling function `getEvents`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-events/).
+
+
+```
+client.getEvents().getEvents()
+```
+
+### Arguments
+
+- queryParams `GetEventsQueryParams`
+ - Query parameters of getEvents method
+- headers `GetEventsHeaders`
+ - Headers of getEvents method
+
+
+### Returns
+
+This function returns a value of type `Events`.
+
+Returns a list of event objects.
+
+Events objects are returned in pages, with each page (chunk)
+including a list of event objects. The response includes a
+`chunk_size` parameter indicating how many events were returned in this
+chunk, as well as the next `stream_position` that can be
+queried.
+
+
+## Get event stream
+
+Get an event stream for the Box API
+
+This operation is performed by calling function `getEventStream`.
+
+
+
+```
+client.getEvents().getEventStream()
+```
+
+### Arguments
+
+- queryParams `GetEventStreamQueryParams`
+ - Query parameters of getEvents method
+- headers `GetEventStreamHeaders`
+ - Headers of getEvents method
+
+
+### Returns
+
+This function returns a value of type `EventStream`.
+
+
+
+
diff --git a/docs/eventstream.md b/docs/eventstream.md
new file mode 100644
index 000000000..a91eef21f
--- /dev/null
+++ b/docs/eventstream.md
@@ -0,0 +1,29 @@
+# Event Stream
+
+The Event Stream class utilizes long-polling to receive real-time events from Box. The SDK provides an easy way to set up and manage the event stream which returns an iterable object and yields events as they are received.
+
+
+
+
+- [Event Stream](#event-stream)
+ - [Listening to the Event Stream](#listening-to-the-event-stream)
+ - [Deduplication](#deduplication)
+
+
+
+## Listening to the Event Stream
+
+When the `EventStream` is started, it will begin long-polling asynchronously. Events received from the API are then yielded to the caller.
+
+```java
+EventStream stream = client.getEvents().getEventStream();
+for (Event event : stream) {
+ System.out.printf(
+ "Received event: ID=%s, Type=%s, CreatedAt=%s%n\n",event.getEventId(),event.getEventType(),event.getCreatedAt());
+}
+
+```
+
+## Deduplication
+
+The `EventStream` class automatically deduplicates events based on their `eventId`. This means that if the same event is received multiple times, it will only be emitted once to the listeners.
diff --git a/docs/externalusers.md b/docs/externalusers.md
new file mode 100644
index 000000000..295e94197
--- /dev/null
+++ b/docs/externalusers.md
@@ -0,0 +1,35 @@
+# ExternalUsersManager
+
+
+- [Submit job to delete external users](#submit-job-to-delete-external-users)
+
+## Submit job to delete external users
+
+Delete external users from current user enterprise. This will remove each
+external user from all invited collaborations within the current enterprise.
+
+This operation is performed by calling function `submitJobToDeleteExternalUsersV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-external-users-submit-delete-job/).
+
+
+```
+client.getExternalUsers().submitJobToDeleteExternalUsersV2025R0(new ExternalUsersSubmitDeleteJobRequestV2025R0(Arrays.asList(new UserReferenceV2025R0(getEnvVar("BOX_EXTERNAL_USER_ID")))))
+```
+
+### Arguments
+
+- requestBody `ExternalUsersSubmitDeleteJobRequestV2025R0`
+ - Request body of submitJobToDeleteExternalUsersV2025R0 method
+- headers `SubmitJobToDeleteExternalUsersV2025R0Headers`
+ - Headers of submitJobToDeleteExternalUsersV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `ExternalUsersSubmitDeleteJobResponseV2025R0`.
+
+
+
+
diff --git a/docs/fileclassifications.md b/docs/fileclassifications.md
new file mode 100644
index 000000000..dd386ad46
--- /dev/null
+++ b/docs/fileclassifications.md
@@ -0,0 +1,151 @@
+# FileClassificationsManager
+
+
+- [Get classification on file](#get-classification-on-file)
+- [Add classification to file](#add-classification-to-file)
+- [Update classification on file](#update-classification-on-file)
+- [Remove classification from file](#remove-classification-from-file)
+
+## Get classification on file
+
+Retrieves the classification metadata instance that
+has been applied to a file.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/files/:id//enterprise_12345/securityClassification-6VMVochwUWo`.
+
+This operation is performed by calling function `getClassificationOnFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-metadata-enterprise-securityClassification-6VMVochwUWo/).
+
+
+```
+client.getFileClassifications().getClassificationOnFile(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `GetClassificationOnFileHeaders`
+ - Headers of getClassificationOnFile method
+
+
+### Returns
+
+This function returns a value of type `Classification`.
+
+Returns an instance of the `securityClassification` metadata
+template, which contains a `Box__Security__Classification__Key`
+field that lists all the classifications available to this
+enterprise.
+
+
+## Add classification to file
+
+Adds a classification to a file by specifying the label of the
+classification to add.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/files/:id//enterprise_12345/securityClassification-6VMVochwUWo`.
+
+This operation is performed by calling function `addClassificationToFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-id-metadata-enterprise-securityClassification-6VMVochwUWo/).
+
+
+```
+client.getFileClassifications().addClassificationToFile(file.getId(), new AddClassificationToFileRequestBody.Builder().boxSecurityClassificationKey(classification.getKey()).build())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `AddClassificationToFileRequestBody`
+ - Request body of addClassificationToFile method
+- headers `AddClassificationToFileHeaders`
+ - Headers of addClassificationToFile method
+
+
+### Returns
+
+This function returns a value of type `Classification`.
+
+Returns the classification template instance
+that was applied to the file.
+
+
+## Update classification on file
+
+Updates a classification on a file.
+
+The classification can only be updated if a classification has already been
+applied to the file before. When editing classifications, only values are
+defined for the enterprise will be accepted.
+
+This operation is performed by calling function `updateClassificationOnFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id-metadata-enterprise-securityClassification-6VMVochwUWo/).
+
+
+```
+client.getFileClassifications().updateClassificationOnFile(file.getId(), Arrays.asList(new UpdateClassificationOnFileRequestBody(secondClassification.getKey())))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `List`
+ - Request body of updateClassificationOnFile method
+- headers `UpdateClassificationOnFileHeaders`
+ - Headers of updateClassificationOnFile method
+
+
+### Returns
+
+This function returns a value of type `Classification`.
+
+Returns the updated classification metadata template instance.
+
+
+## Remove classification from file
+
+Removes any classifications from a file.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/files/:id//enterprise_12345/securityClassification-6VMVochwUWo`.
+
+This operation is performed by calling function `deleteClassificationFromFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-id-metadata-enterprise-securityClassification-6VMVochwUWo/).
+
+
+```
+client.getFileClassifications().deleteClassificationFromFile(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `DeleteClassificationFromFileHeaders`
+ - Headers of deleteClassificationFromFile method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the classification is
+successfully deleted.
+
+
diff --git a/docs/filemetadata.md b/docs/filemetadata.md
new file mode 100644
index 000000000..2ccd505b5
--- /dev/null
+++ b/docs/filemetadata.md
@@ -0,0 +1,198 @@
+# FileMetadataManager
+
+
+- [List metadata instances on file](#list-metadata-instances-on-file)
+- [Get metadata instance on file](#get-metadata-instance-on-file)
+- [Create metadata instance on file](#create-metadata-instance-on-file)
+- [Update metadata instance on file](#update-metadata-instance-on-file)
+- [Remove metadata instance from file](#remove-metadata-instance-from-file)
+
+## List metadata instances on file
+
+Retrieves all metadata for a given file.
+
+This operation is performed by calling function `getFileMetadata`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-metadata/).
+
+
+```
+client.getFileMetadata().getFileMetadata(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetFileMetadataQueryParams`
+ - Query parameters of getFileMetadata method
+- headers `GetFileMetadataHeaders`
+ - Headers of getFileMetadata method
+
+
+### Returns
+
+This function returns a value of type `Metadatas`.
+
+Returns all the metadata associated with a file.
+
+This API does not support pagination and will therefore always return
+all of the metadata associated to the file.
+
+
+## Get metadata instance on file
+
+Retrieves the instance of a metadata template that has been applied to a
+file.
+
+This operation is performed by calling function `getFileMetadataById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-metadata-id-id/).
+
+
+```
+client.getFileMetadata().getFileMetadataById(file.getId(), GetFileMetadataByIdScope.GLOBAL, "properties")
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- scope `GetFileMetadataByIdScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- queryParams `GetFileMetadataByIdQueryParams`
+ - Query parameters of getFileMetadataById method
+- headers `GetFileMetadataByIdHeaders`
+ - Headers of getFileMetadataById method
+
+
+### Returns
+
+This function returns a value of type `MetadataFull`.
+
+An instance of the metadata template that includes
+additional "key:value" pairs defined by the user or
+an application.
+
+
+## Create metadata instance on file
+
+Applies an instance of a metadata template to a file.
+
+In most cases only values that are present in the metadata template
+will be accepted, except for the `global.properties` template which accepts
+any key-value pair.
+
+This operation is performed by calling function `createFileMetadataById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-id-metadata-id-id/).
+
+
+```
+client.getFileMetadata().createFileMetadataById(file.getId(), CreateFileMetadataByIdScope.ENTERPRISE, templateKey, mapOf(entryOf("name", "John"), entryOf("age", 23), entryOf("birthDate", "2001-01-03T02:20:50.520Z"), entryOf("countryCode", "US"), entryOf("sports", Arrays.asList("basketball", "tennis"))))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- scope `CreateFileMetadataByIdScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- requestBody `Map`
+ - Request body of createFileMetadataById method
+- headers `CreateFileMetadataByIdHeaders`
+ - Headers of createFileMetadataById method
+
+
+### Returns
+
+This function returns a value of type `MetadataFull`.
+
+Returns the instance of the template that was applied to the file,
+including the data that was applied to the template.
+
+
+## Update metadata instance on file
+
+Updates a piece of metadata on a file.
+
+The metadata instance can only be updated if the template has already been
+applied to the file before. When editing metadata, only values that match
+the metadata template schema will be accepted.
+
+The update is applied atomically. If any errors occur during the
+application of the operations, the metadata instance will not be changed.
+
+This operation is performed by calling function `updateFileMetadataById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id-metadata-id-id/).
+
+
+```
+client.getFileMetadata().updateFileMetadataById(file.getId(), UpdateFileMetadataByIdScope.ENTERPRISE, templateKey, Arrays.asList(new UpdateFileMetadataByIdRequestBody.Builder().op(UpdateFileMetadataByIdRequestBodyOpField.REPLACE).path("/name").value("Jack").build(), new UpdateFileMetadataByIdRequestBody.Builder().op(UpdateFileMetadataByIdRequestBodyOpField.REPLACE).path("/age").value(24L).build(), new UpdateFileMetadataByIdRequestBody.Builder().op(UpdateFileMetadataByIdRequestBodyOpField.REPLACE).path("/birthDate").value("2000-01-03T02:20:50.520Z").build(), new UpdateFileMetadataByIdRequestBody.Builder().op(UpdateFileMetadataByIdRequestBodyOpField.REPLACE).path("/countryCode").value("CA").build(), new UpdateFileMetadataByIdRequestBody.Builder().op(UpdateFileMetadataByIdRequestBodyOpField.REPLACE).path("/sports").value(Arrays.asList("football")).build()))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- scope `UpdateFileMetadataByIdScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- requestBody `List`
+ - Request body of updateFileMetadataById method
+- headers `UpdateFileMetadataByIdHeaders`
+ - Headers of updateFileMetadataById method
+
+
+### Returns
+
+This function returns a value of type `MetadataFull`.
+
+Returns the updated metadata template instance, with the
+custom template data included.
+
+
+## Remove metadata instance from file
+
+Deletes a piece of file metadata.
+
+This operation is performed by calling function `deleteFileMetadataById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-id-metadata-id-id/).
+
+
+```
+client.getFileMetadata().deleteFileMetadataById(file.getId(), DeleteFileMetadataByIdScope.ENTERPRISE, templateKey)
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- scope `DeleteFileMetadataByIdScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- headers `DeleteFileMetadataByIdHeaders`
+ - Headers of deleteFileMetadataById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the metadata is
+successfully deleted.
+
+
diff --git a/docs/filerequests.md b/docs/filerequests.md
new file mode 100644
index 000000000..169912eb5
--- /dev/null
+++ b/docs/filerequests.md
@@ -0,0 +1,131 @@
+# FileRequestsManager
+
+
+- [Get file request](#get-file-request)
+- [Update file request](#update-file-request)
+- [Delete file request](#delete-file-request)
+- [Copy file request](#copy-file-request)
+
+## Get file request
+
+Retrieves the information about a file request.
+
+This operation is performed by calling function `getFileRequestById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-file-requests-id/).
+
+
+```
+client.getFileRequests().getFileRequestById(fileRequestId)
+```
+
+### Arguments
+
+- fileRequestId `String`
+ - The unique identifier that represent a file request. The ID for any file request can be determined by visiting a file request builder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/filerequest/123` the `file_request_id` is `123`. Example: "123"
+- headers `GetFileRequestByIdHeaders`
+ - Headers of getFileRequestById method
+
+
+### Returns
+
+This function returns a value of type `FileRequest`.
+
+Returns a file request object.
+
+
+## Update file request
+
+Updates a file request. This can be used to activate or
+deactivate a file request.
+
+This operation is performed by calling function `updateFileRequestById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-file-requests-id/).
+
+
+```
+client.getFileRequests().updateFileRequestById(copiedFileRequest.getId(), new FileRequestUpdateRequest.Builder().title("updated title").description("updated description").build())
+```
+
+### Arguments
+
+- fileRequestId `String`
+ - The unique identifier that represent a file request. The ID for any file request can be determined by visiting a file request builder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/filerequest/123` the `file_request_id` is `123`. Example: "123"
+- requestBody `FileRequestUpdateRequest`
+ - Request body of updateFileRequestById method
+- headers `UpdateFileRequestByIdHeaders`
+ - Headers of updateFileRequestById method
+
+
+### Returns
+
+This function returns a value of type `FileRequest`.
+
+Returns the updated file request object.
+
+
+## Delete file request
+
+Deletes a file request permanently.
+
+This operation is performed by calling function `deleteFileRequestById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-file-requests-id/).
+
+
+```
+client.getFileRequests().deleteFileRequestById(updatedFileRequest.getId())
+```
+
+### Arguments
+
+- fileRequestId `String`
+ - The unique identifier that represent a file request. The ID for any file request can be determined by visiting a file request builder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/filerequest/123` the `file_request_id` is `123`. Example: "123"
+- headers `DeleteFileRequestByIdHeaders`
+ - Headers of deleteFileRequestById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the file request has been successfully
+deleted.
+
+
+## Copy file request
+
+Copies an existing file request that is already present on one folder,
+and applies it to another folder.
+
+This operation is performed by calling function `createFileRequestCopy`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-file-requests-id-copy/).
+
+
+```
+client.getFileRequests().createFileRequestCopy(fileRequestId, new FileRequestCopyRequest(new FileRequestCopyRequestFolderField.Builder(fileRequest.getFolder().getId()).type(FileRequestCopyRequestFolderTypeField.FOLDER).build()))
+```
+
+### Arguments
+
+- fileRequestId `String`
+ - The unique identifier that represent a file request. The ID for any file request can be determined by visiting a file request builder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/filerequest/123` the `file_request_id` is `123`. Example: "123"
+- requestBody `FileRequestCopyRequest`
+ - Request body of createFileRequestCopy method
+- headers `CreateFileRequestCopyHeaders`
+ - Headers of createFileRequestCopy method
+
+
+### Returns
+
+This function returns a value of type `FileRequest`.
+
+Returns updated file request object.
+
+
diff --git a/docs/files.md b/docs/files.md
new file mode 100644
index 000000000..38d3faa2f
--- /dev/null
+++ b/docs/files.md
@@ -0,0 +1,245 @@
+# FilesManager
+
+
+- [Get file information](#get-file-information)
+- [Update file](#update-file)
+- [Delete file](#delete-file)
+- [Copy file](#copy-file)
+- [Get file thumbnail URL](#get-file-thumbnail-url)
+- [Get file thumbnail](#get-file-thumbnail)
+
+## Get file information
+
+Retrieves the details about a file.
+
+This operation is performed by calling function `getFileById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id/).
+
+
+```
+client.getFiles().getFileById(uploadedFile.getId(), new GetFileByIdQueryParams.Builder().fields(Arrays.asList("is_externally_owned", "has_collaborations")).build())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetFileByIdQueryParams`
+ - Query parameters of getFileById method
+- headers `GetFileByIdHeaders`
+ - Headers of getFileById method
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+Returns a file object.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+
+## Update file
+
+Updates a file. This can be used to rename or move a file,
+create a shared link, or lock a file.
+
+This operation is performed by calling function `updateFileById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id/).
+
+
+```
+client.getFiles().updateFileById(fileToUpdate.getId(), new UpdateFileByIdRequestBody.Builder().name(updatedName).description("Updated description").build())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `UpdateFileByIdRequestBody`
+ - Request body of updateFileById method
+- queryParams `UpdateFileByIdQueryParams`
+ - Query parameters of updateFileById method
+- headers `UpdateFileByIdHeaders`
+ - Headers of updateFileById method
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+Returns a file object.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+
+## Delete file
+
+Deletes a file, either permanently or by moving it to
+the trash.
+
+The enterprise settings determine whether the item will
+be permanently deleted from Box or moved to the trash.
+
+This operation is performed by calling function `deleteFileById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-id/).
+
+
+```
+client.getFiles().deleteFileById(thumbnailFile.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `DeleteFileByIdHeaders`
+ - Headers of deleteFileById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the file has been successfully
+deleted.
+
+
+## Copy file
+
+Creates a copy of a file.
+
+This operation is performed by calling function `copyFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-id-copy/).
+
+
+```
+client.getFiles().copyFile(fileOrigin.getId(), new CopyFileRequestBody.Builder(new CopyFileRequestBodyParentField("0")).name(copiedFileName).build())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `CopyFileRequestBody`
+ - Request body of copyFile method
+- queryParams `CopyFileQueryParams`
+ - Query parameters of copyFile method
+- headers `CopyFileHeaders`
+ - Headers of copyFile method
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+Returns a new file object representing the copied file.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+
+## Get file thumbnail URL
+
+Get the download URL without downloading the content.
+
+This operation is performed by calling function `getFileThumbnailUrl`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-thumbnail-id/).
+
+
+```
+client.getFiles().getFileThumbnailUrl(thumbnailFile.getId(), GetFileThumbnailUrlExtension.PNG)
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- extension `GetFileThumbnailUrlExtension`
+ - The file format for the thumbnail. Example: "png"
+- queryParams `GetFileThumbnailUrlQueryParams`
+ - Query parameters of getFileThumbnailById method
+- headers `GetFileThumbnailUrlHeaders`
+ - Headers of getFileThumbnailById method
+
+
+### Returns
+
+This function returns a value of type `String`.
+
+When a thumbnail can be created the thumbnail data will be
+returned in the body of the response.Sometimes generating a thumbnail can take a few seconds. In these
+situations the API returns a `Location`-header pointing to a
+placeholder graphic for this file type.
+
+The placeholder graphic can be used in a user interface until the
+thumbnail generation has completed. The `Retry-After`-header indicates
+when to the thumbnail will be ready. At that time, retry this endpoint
+to retrieve the thumbnail.
+
+
+## Get file thumbnail
+
+Retrieves a thumbnail, or smaller image representation, of a file.
+
+Sizes of `32x32`,`64x64`, `128x128`, and `256x256` can be returned in
+the `.png` format and sizes of `32x32`, `160x160`, and `320x320`
+can be returned in the `.jpg` format.
+
+Thumbnails can be generated for the image and video file formats listed
+[found on our community site][1].
+
+[1]: https://community.box.com/t5/Migrating-and-Previewing-Content/File-Types-and-Fonts-Supported-in-Box-Content-Preview/ta-p/327
+
+This operation is performed by calling function `getFileThumbnailById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-thumbnail-id/).
+
+
+```
+client.getFiles().getFileThumbnailById(thumbnailFile.getId(), GetFileThumbnailByIdExtension.PNG)
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- extension `GetFileThumbnailByIdExtension`
+ - The file format for the thumbnail. Example: "png"
+- queryParams `GetFileThumbnailByIdQueryParams`
+ - Query parameters of getFileThumbnailById method
+- headers `GetFileThumbnailByIdHeaders`
+ - Headers of getFileThumbnailById method
+
+
+### Returns
+
+This function returns a value of type `InputStream`.
+
+When a thumbnail can be created the thumbnail data will be
+returned in the body of the response.Sometimes generating a thumbnail can take a few seconds. In these
+situations the API returns a `Location`-header pointing to a
+placeholder graphic for this file type.
+
+The placeholder graphic can be used in a user interface until the
+thumbnail generation has completed. The `Retry-After`-header indicates
+when to the thumbnail will be ready. At that time, retry this endpoint
+to retrieve the thumbnail.
+
+
diff --git a/docs/fileversionlegalholds.md b/docs/fileversionlegalholds.md
new file mode 100644
index 000000000..eecfa32cb
--- /dev/null
+++ b/docs/fileversionlegalholds.md
@@ -0,0 +1,85 @@
+# FileVersionLegalHoldsManager
+
+
+- [Get file version legal hold](#get-file-version-legal-hold)
+- [List file version legal holds](#list-file-version-legal-holds)
+
+## Get file version legal hold
+
+Retrieves information about the legal hold policies
+assigned to a file version.
+
+This operation is performed by calling function `getFileVersionLegalHoldById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-file-version-legal-holds-id/).
+
+
+```
+client.getFileVersionLegalHolds().getFileVersionLegalHoldById(fileVersionLegalHoldId)
+```
+
+### Arguments
+
+- fileVersionLegalHoldId `String`
+ - The ID of the file version legal hold. Example: "2348213"
+- headers `GetFileVersionLegalHoldByIdHeaders`
+ - Headers of getFileVersionLegalHoldById method
+
+
+### Returns
+
+This function returns a value of type `FileVersionLegalHold`.
+
+Returns the legal hold policy assignments for the file version.
+
+
+## List file version legal holds
+
+Get a list of file versions on legal hold for a legal hold
+assignment.
+
+Due to ongoing re-architecture efforts this API might not return all file
+versions for this policy ID.
+
+Instead, this API will only return file versions held in the legacy
+architecture. Two new endpoints will available to request any file versions
+held in the new architecture.
+
+For file versions held in the new architecture, the `GET
+/legal_hold_policy_assignments/:id/file_versions_on_hold` API can be used to
+return all past file versions available for this policy assignment, and the
+`GET /legal_hold_policy_assignments/:id/files_on_hold` API can be used to
+return any current (latest) versions of a file under legal hold.
+
+The `GET /legal_hold_policy_assignments?policy_id={id}` API can be used to
+find a list of policy assignments for a given policy ID.
+
+Once the re-architecture is completed this API will be deprecated.
+
+This operation is performed by calling function `getFileVersionLegalHolds`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-file-version-legal-holds/).
+
+
+```
+client.getFileVersionLegalHolds().getFileVersionLegalHolds(new GetFileVersionLegalHoldsQueryParams(policyId))
+```
+
+### Arguments
+
+- queryParams `GetFileVersionLegalHoldsQueryParams`
+ - Query parameters of getFileVersionLegalHolds method
+- headers `GetFileVersionLegalHoldsHeaders`
+ - Headers of getFileVersionLegalHolds method
+
+
+### Returns
+
+This function returns a value of type `FileVersionLegalHolds`.
+
+Returns the list of file version legal holds for a specific legal
+hold policy.
+
+
diff --git a/docs/fileversionretentions.md b/docs/fileversionretentions.md
new file mode 100644
index 000000000..a8bc10052
--- /dev/null
+++ b/docs/fileversionretentions.md
@@ -0,0 +1,74 @@
+# FileVersionRetentionsManager
+
+
+- [List file version retentions](#list-file-version-retentions)
+- [Get retention on file](#get-retention-on-file)
+
+## List file version retentions
+
+Retrieves all file version retentions for the given enterprise.
+
+**Note**:
+File retention API is now **deprecated**.
+To get information about files and file versions under retention,
+see [files under retention](https://developer.box.com/reference/get-retention-policy-assignments-id-files-under-retention) or [file versions under retention](https://developer.box.com/reference/get-retention-policy-assignments-id-file-versions-under-retention) endpoints.
+
+This operation is performed by calling function `getFileVersionRetentions`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-file-version-retentions/).
+
+
+```
+client.getFileVersionRetentions().getFileVersionRetentions()
+```
+
+### Arguments
+
+- queryParams `GetFileVersionRetentionsQueryParams`
+ - Query parameters of getFileVersionRetentions method
+- headers `GetFileVersionRetentionsHeaders`
+ - Headers of getFileVersionRetentions method
+
+
+### Returns
+
+This function returns a value of type `FileVersionRetentions`.
+
+Returns a list of all file version retentions for the enterprise.
+
+
+## Get retention on file
+
+Returns information about a file version retention.
+
+**Note**:
+File retention API is now **deprecated**.
+To get information about files and file versions under retention,
+see [files under retention](https://developer.box.com/reference/get-retention-policy-assignments-id-files-under-retention) or [file versions under retention](https://developer.box.com/reference/get-retention-policy-assignments-id-file-versions-under-retention) endpoints.
+
+This operation is performed by calling function `getFileVersionRetentionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-file-version-retentions-id/).
+
+
+```
+client.getFileVersionRetentions().getFileVersionRetentionById(fileVersionRetention.getId())
+```
+
+### Arguments
+
+- fileVersionRetentionId `String`
+ - The ID of the file version retention. Example: "3424234"
+- headers `GetFileVersionRetentionByIdHeaders`
+ - Headers of getFileVersionRetentionById method
+
+
+### Returns
+
+This function returns a value of type `FileVersionRetention`.
+
+Returns a file version retention object.
+
+
diff --git a/docs/fileversions.md b/docs/fileversions.md
new file mode 100644
index 000000000..9bbdd3a01
--- /dev/null
+++ b/docs/fileversions.md
@@ -0,0 +1,200 @@
+# FileVersionsManager
+
+
+- [List all file versions](#list-all-file-versions)
+- [Get file version](#get-file-version)
+- [Remove file version](#remove-file-version)
+- [Restore file version](#restore-file-version)
+- [Promote file version](#promote-file-version)
+
+## List all file versions
+
+Retrieve a list of the past versions for a file.
+
+Versions are only tracked by Box users with premium accounts. To fetch the ID
+of the current version of a file, use the `GET /file/:id` API.
+
+This operation is performed by calling function `getFileVersions`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-versions/).
+
+
+```
+client.getFileVersions().getFileVersions(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetFileVersionsQueryParams`
+ - Query parameters of getFileVersions method
+- headers `GetFileVersionsHeaders`
+ - Headers of getFileVersions method
+
+
+### Returns
+
+This function returns a value of type `FileVersions`.
+
+Returns an array of past versions for this file.
+
+
+## Get file version
+
+Retrieve a specific version of a file.
+
+Versions are only tracked for Box users with premium accounts.
+
+This operation is performed by calling function `getFileVersionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-versions-id/).
+
+
+```
+client.getFileVersions().getFileVersionById(file.getId(), fileVersions.getEntries().get(0).getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- fileVersionId `String`
+ - The ID of the file version. Example: "1234"
+- queryParams `GetFileVersionByIdQueryParams`
+ - Query parameters of getFileVersionById method
+- headers `GetFileVersionByIdHeaders`
+ - Headers of getFileVersionById method
+
+
+### Returns
+
+This function returns a value of type `FileVersionFull`.
+
+Returns a specific version of a file.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+
+## Remove file version
+
+Move a file version to the trash.
+
+Versions are only tracked for Box users with premium accounts.
+
+This operation is performed by calling function `deleteFileVersionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-id-versions-id/).
+
+
+```
+client.getFileVersions().deleteFileVersionById(file.getId(), fileVersion.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- fileVersionId `String`
+ - The ID of the file version. Example: "1234"
+- headers `DeleteFileVersionByIdHeaders`
+ - Headers of deleteFileVersionById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the file has been successfully
+deleted.
+
+
+## Restore file version
+
+Restores a specific version of a file after it was deleted.
+Don't use this endpoint to restore Box Notes,
+as it works with file formats such as PDF, DOC,
+PPTX or similar.
+
+This operation is performed by calling function `updateFileVersionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id-versions-id/).
+
+
+```
+client.getFileVersions().updateFileVersionById(file.getId(), fileVersion.getId(), new UpdateFileVersionByIdRequestBody.Builder().trashedAt(null).build())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- fileVersionId `String`
+ - The ID of the file version. Example: "1234"
+- requestBody `UpdateFileVersionByIdRequestBody`
+ - Request body of updateFileVersionById method
+- headers `UpdateFileVersionByIdHeaders`
+ - Headers of updateFileVersionById method
+
+
+### Returns
+
+This function returns a value of type `FileVersionFull`.
+
+Returns a restored file version object.
+
+
+## Promote file version
+
+Promote a specific version of a file.
+
+If previous versions exist, this method can be used to
+promote one of the older versions to the top of the version history.
+
+This creates a new copy of the old version and puts it at the
+top of the versions history. The file will have the exact same contents
+as the older version, with the same hash digest, `etag`, and
+name as the original.
+
+Other properties such as comments do not get updated to their
+former values.
+
+Don't use this endpoint to restore Box Notes,
+as it works with file formats such as PDF, DOC,
+PPTX or similar.
+
+This operation is performed by calling function `promoteFileVersion`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-id-versions-current/).
+
+
+```
+client.getFileVersions().promoteFileVersion(file.getId(), new PromoteFileVersionRequestBody.Builder().id(fileVersions.getEntries().get(0).getId()).type(PromoteFileVersionRequestBodyTypeField.FILE_VERSION).build())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `PromoteFileVersionRequestBody`
+ - Request body of promoteFileVersion method
+- queryParams `PromoteFileVersionQueryParams`
+ - Query parameters of promoteFileVersion method
+- headers `PromoteFileVersionHeaders`
+ - Headers of promoteFileVersion method
+
+
+### Returns
+
+This function returns a value of type `FileVersionFull`.
+
+Returns a newly created file version object.
+
+
diff --git a/docs/filewatermarks.md b/docs/filewatermarks.md
new file mode 100644
index 000000000..fd94bbd8b
--- /dev/null
+++ b/docs/filewatermarks.md
@@ -0,0 +1,99 @@
+# FileWatermarksManager
+
+
+- [Get watermark on file](#get-watermark-on-file)
+- [Apply watermark to file](#apply-watermark-to-file)
+- [Remove watermark from file](#remove-watermark-from-file)
+
+## Get watermark on file
+
+Retrieve the watermark for a file.
+
+This operation is performed by calling function `getFileWatermark`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-watermark/).
+
+
+```
+client.getFileWatermarks().getFileWatermark(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `GetFileWatermarkHeaders`
+ - Headers of getFileWatermark method
+
+
+### Returns
+
+This function returns a value of type `Watermark`.
+
+Returns an object containing information about the
+watermark associated for to this file.
+
+
+## Apply watermark to file
+
+Applies or update a watermark on a file.
+
+This operation is performed by calling function `updateFileWatermark`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id-watermark/).
+
+
+```
+client.getFileWatermarks().updateFileWatermark(file.getId(), new UpdateFileWatermarkRequestBody(new UpdateFileWatermarkRequestBodyWatermarkField.Builder().imprint(UpdateFileWatermarkRequestBodyWatermarkImprintField.DEFAULT).build()))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `UpdateFileWatermarkRequestBody`
+ - Request body of updateFileWatermark method
+- headers `UpdateFileWatermarkHeaders`
+ - Headers of updateFileWatermark method
+
+
+### Returns
+
+This function returns a value of type `Watermark`.
+
+Returns an updated watermark if a watermark already
+existed on this file.Returns a new watermark if no watermark existed on
+this file yet.
+
+
+## Remove watermark from file
+
+Removes the watermark from a file.
+
+This operation is performed by calling function `deleteFileWatermark`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-id-watermark/).
+
+
+```
+client.getFileWatermarks().deleteFileWatermark(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `DeleteFileWatermarkHeaders`
+ - Headers of deleteFileWatermark method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Removes the watermark and returns an empty response.
+
+
diff --git a/docs/folderclassifications.md b/docs/folderclassifications.md
new file mode 100644
index 000000000..5a887a3fb
--- /dev/null
+++ b/docs/folderclassifications.md
@@ -0,0 +1,151 @@
+# FolderClassificationsManager
+
+
+- [Get classification on folder](#get-classification-on-folder)
+- [Add classification to folder](#add-classification-to-folder)
+- [Update classification on folder](#update-classification-on-folder)
+- [Remove classification from folder](#remove-classification-from-folder)
+
+## Get classification on folder
+
+Retrieves the classification metadata instance that
+has been applied to a folder.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/folders/:id/enterprise_12345/securityClassification-6VMVochwUWo`.
+
+This operation is performed by calling function `getClassificationOnFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id-metadata-enterprise-securityClassification-6VMVochwUWo/).
+
+
+```
+client.getFolderClassifications().getClassificationOnFolder(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- headers `GetClassificationOnFolderHeaders`
+ - Headers of getClassificationOnFolder method
+
+
+### Returns
+
+This function returns a value of type `Classification`.
+
+Returns an instance of the `securityClassification` metadata
+template, which contains a `Box__Security__Classification__Key`
+field that lists all the classifications available to this
+enterprise.
+
+
+## Add classification to folder
+
+Adds a classification to a folder by specifying the label of the
+classification to add.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/folders/:id/enterprise_12345/securityClassification-6VMVochwUWo`.
+
+This operation is performed by calling function `addClassificationToFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-folders-id-metadata-enterprise-securityClassification-6VMVochwUWo/).
+
+
+```
+client.getFolderClassifications().addClassificationToFolder(folder.getId(), new AddClassificationToFolderRequestBody.Builder().boxSecurityClassificationKey(classification.getKey()).build())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- requestBody `AddClassificationToFolderRequestBody`
+ - Request body of addClassificationToFolder method
+- headers `AddClassificationToFolderHeaders`
+ - Headers of addClassificationToFolder method
+
+
+### Returns
+
+This function returns a value of type `Classification`.
+
+Returns the classification template instance
+that was applied to the folder.
+
+
+## Update classification on folder
+
+Updates a classification on a folder.
+
+The classification can only be updated if a classification has already been
+applied to the folder before. When editing classifications, only values are
+defined for the enterprise will be accepted.
+
+This operation is performed by calling function `updateClassificationOnFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-folders-id-metadata-enterprise-securityClassification-6VMVochwUWo/).
+
+
+```
+client.getFolderClassifications().updateClassificationOnFolder(folder.getId(), Arrays.asList(new UpdateClassificationOnFolderRequestBody(secondClassification.getKey())))
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- requestBody `List`
+ - Request body of updateClassificationOnFolder method
+- headers `UpdateClassificationOnFolderHeaders`
+ - Headers of updateClassificationOnFolder method
+
+
+### Returns
+
+This function returns a value of type `Classification`.
+
+Returns the updated classification metadata template instance.
+
+
+## Remove classification from folder
+
+Removes any classifications from a folder.
+
+This API can also be called by including the enterprise ID in the
+URL explicitly, for example
+`/folders/:id/enterprise_12345/securityClassification-6VMVochwUWo`.
+
+This operation is performed by calling function `deleteClassificationFromFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-folders-id-metadata-enterprise-securityClassification-6VMVochwUWo/).
+
+
+```
+client.getFolderClassifications().deleteClassificationFromFolder(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- headers `DeleteClassificationFromFolderHeaders`
+ - Headers of deleteClassificationFromFolder method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the classification is
+successfully deleted.
+
+
diff --git a/docs/folderlocks.md b/docs/folderlocks.md
new file mode 100644
index 000000000..6c050d597
--- /dev/null
+++ b/docs/folderlocks.md
@@ -0,0 +1,106 @@
+# FolderLocksManager
+
+
+- [List folder locks](#list-folder-locks)
+- [Create folder lock](#create-folder-lock)
+- [Delete folder lock](#delete-folder-lock)
+
+## List folder locks
+
+Retrieves folder lock details for a given folder.
+
+You must be authenticated as the owner or co-owner of the folder to
+use this endpoint.
+
+This operation is performed by calling function `getFolderLocks`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folder-locks/).
+
+
+```
+client.getFolderLocks().getFolderLocks(new GetFolderLocksQueryParams(folder.getId()))
+```
+
+### Arguments
+
+- queryParams `GetFolderLocksQueryParams`
+ - Query parameters of getFolderLocks method
+- headers `GetFolderLocksHeaders`
+ - Headers of getFolderLocks method
+
+
+### Returns
+
+This function returns a value of type `FolderLocks`.
+
+Returns details for all folder locks applied to the folder, including the
+lock type and user that applied the lock.
+
+
+## Create folder lock
+
+Creates a folder lock on a folder, preventing it from being moved and/or
+deleted.
+
+You must be authenticated as the owner or co-owner of the folder to
+use this endpoint.
+
+This operation is performed by calling function `createFolderLock`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-folder-locks/).
+
+
+```
+client.getFolderLocks().createFolderLock(new CreateFolderLockRequestBody.Builder(new CreateFolderLockRequestBodyFolderField("folder", folder.getId())).lockedOperations(new CreateFolderLockRequestBodyLockedOperationsField(true, true)).build())
+```
+
+### Arguments
+
+- requestBody `CreateFolderLockRequestBody`
+ - Request body of createFolderLock method
+- headers `CreateFolderLockHeaders`
+ - Headers of createFolderLock method
+
+
+### Returns
+
+This function returns a value of type `FolderLock`.
+
+Returns the instance of the folder lock that was applied to the folder,
+including the user that applied the lock and the operations set.
+
+
+## Delete folder lock
+
+Deletes a folder lock on a given folder.
+
+You must be authenticated as the owner or co-owner of the folder to
+use this endpoint.
+
+This operation is performed by calling function `deleteFolderLockById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-folder-locks-id/).
+
+
+```
+client.getFolderLocks().deleteFolderLockById(folderLock.getId())
+```
+
+### Arguments
+
+- folderLockId `String`
+ - The ID of the folder lock. Example: "12345"
+- headers `DeleteFolderLockByIdHeaders`
+ - Headers of deleteFolderLockById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the folder lock is successfully deleted.
+
+
diff --git a/docs/foldermetadata.md b/docs/foldermetadata.md
new file mode 100644
index 000000000..02bb0146e
--- /dev/null
+++ b/docs/foldermetadata.md
@@ -0,0 +1,201 @@
+# FolderMetadataManager
+
+
+- [List metadata instances on folder](#list-metadata-instances-on-folder)
+- [Get metadata instance on folder](#get-metadata-instance-on-folder)
+- [Create metadata instance on folder](#create-metadata-instance-on-folder)
+- [Update metadata instance on folder](#update-metadata-instance-on-folder)
+- [Remove metadata instance from folder](#remove-metadata-instance-from-folder)
+
+## List metadata instances on folder
+
+Retrieves all metadata for a given folder. This can not be used on the root
+folder with ID `0`.
+
+This operation is performed by calling function `getFolderMetadata`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id-metadata/).
+
+
+```
+client.getFolderMetadata().getFolderMetadata(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- queryParams `GetFolderMetadataQueryParams`
+ - Query parameters of getFolderMetadata method
+- headers `GetFolderMetadataHeaders`
+ - Headers of getFolderMetadata method
+
+
+### Returns
+
+This function returns a value of type `Metadatas`.
+
+Returns all the metadata associated with a folder.
+
+This API does not support pagination and will therefore always return
+all of the metadata associated to the folder.
+
+
+## Get metadata instance on folder
+
+Retrieves the instance of a metadata template that has been applied to a
+folder. This can not be used on the root folder with ID `0`.
+
+This operation is performed by calling function `getFolderMetadataById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id-metadata-id-id/).
+
+
+```
+client.getFolderMetadata().getFolderMetadataById(folder.getId(), GetFolderMetadataByIdScope.GLOBAL, "properties")
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- scope `GetFolderMetadataByIdScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- headers `GetFolderMetadataByIdHeaders`
+ - Headers of getFolderMetadataById method
+
+
+### Returns
+
+This function returns a value of type `MetadataFull`.
+
+An instance of the metadata template that includes
+additional "key:value" pairs defined by the user or
+an application.
+
+
+## Create metadata instance on folder
+
+Applies an instance of a metadata template to a folder.
+
+In most cases only values that are present in the metadata template
+will be accepted, except for the `global.properties` template which accepts
+any key-value pair.
+
+To display the metadata template in the Box web app the enterprise needs to be
+configured to enable **Cascading Folder Level Metadata** for the user in the
+admin console.
+
+This operation is performed by calling function `createFolderMetadataById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-folders-id-metadata-id-id/).
+
+
+```
+client.getFolderMetadata().createFolderMetadataById(folder.getId(), CreateFolderMetadataByIdScope.ENTERPRISE, templateKey, mapOf(entryOf("name", "John"), entryOf("age", 23), entryOf("birthDate", "2001-01-03T02:20:50.520Z"), entryOf("countryCode", "US"), entryOf("sports", Arrays.asList("basketball", "tennis"))))
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- scope `CreateFolderMetadataByIdScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- requestBody `Map`
+ - Request body of createFolderMetadataById method
+- headers `CreateFolderMetadataByIdHeaders`
+ - Headers of createFolderMetadataById method
+
+
+### Returns
+
+This function returns a value of type `MetadataFull`.
+
+Returns the instance of the template that was applied to the folder,
+including the data that was applied to the template.
+
+
+## Update metadata instance on folder
+
+Updates a piece of metadata on a folder.
+
+The metadata instance can only be updated if the template has already been
+applied to the folder before. When editing metadata, only values that match
+the metadata template schema will be accepted.
+
+The update is applied atomically. If any errors occur during the
+application of the operations, the metadata instance will not be changed.
+
+This operation is performed by calling function `updateFolderMetadataById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-folders-id-metadata-id-id/).
+
+
+```
+client.getFolderMetadata().updateFolderMetadataById(folder.getId(), UpdateFolderMetadataByIdScope.ENTERPRISE, templateKey, Arrays.asList(new UpdateFolderMetadataByIdRequestBody.Builder().op(UpdateFolderMetadataByIdRequestBodyOpField.REPLACE).path("/name").value("Jack").build(), new UpdateFolderMetadataByIdRequestBody.Builder().op(UpdateFolderMetadataByIdRequestBodyOpField.REPLACE).path("/age").value(24L).build(), new UpdateFolderMetadataByIdRequestBody.Builder().op(UpdateFolderMetadataByIdRequestBodyOpField.REPLACE).path("/birthDate").value("2000-01-03T02:20:50.520Z").build(), new UpdateFolderMetadataByIdRequestBody.Builder().op(UpdateFolderMetadataByIdRequestBodyOpField.REPLACE).path("/countryCode").value("CA").build(), new UpdateFolderMetadataByIdRequestBody.Builder().op(UpdateFolderMetadataByIdRequestBodyOpField.REPLACE).path("/sports").value(Arrays.asList("football")).build()))
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- scope `UpdateFolderMetadataByIdScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- requestBody `List`
+ - Request body of updateFolderMetadataById method
+- headers `UpdateFolderMetadataByIdHeaders`
+ - Headers of updateFolderMetadataById method
+
+
+### Returns
+
+This function returns a value of type `MetadataFull`.
+
+Returns the updated metadata template instance, with the
+custom template data included.
+
+
+## Remove metadata instance from folder
+
+Deletes a piece of folder metadata.
+
+This operation is performed by calling function `deleteFolderMetadataById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-folders-id-metadata-id-id/).
+
+
+```
+client.getFolderMetadata().deleteFolderMetadataById(folder.getId(), DeleteFolderMetadataByIdScope.ENTERPRISE, templateKey)
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- scope `DeleteFolderMetadataByIdScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- headers `DeleteFolderMetadataByIdHeaders`
+ - Headers of deleteFolderMetadataById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the metadata is
+successfully deleted.
+
+
diff --git a/docs/folders.md b/docs/folders.md
new file mode 100644
index 000000000..2bfee2c40
--- /dev/null
+++ b/docs/folders.md
@@ -0,0 +1,245 @@
+# FoldersManager
+
+
+- [Get folder information](#get-folder-information)
+- [Update folder](#update-folder)
+- [Delete folder](#delete-folder)
+- [List items in folder](#list-items-in-folder)
+- [Create folder](#create-folder)
+- [Copy folder](#copy-folder)
+
+## Get folder information
+
+Retrieves details for a folder, including the first 100 entries
+in the folder.
+
+Passing `sort`, `direction`, `offset`, and `limit`
+parameters in query allows you to manage the
+list of returned
+[folder items](https://developer.box.com/reference/resources/folder--full#param-item-collection).
+
+To fetch more items within the folder, use the
+[Get items in a folder](https://developer.box.com/reference/get-folders-id-items) endpoint.
+
+This operation is performed by calling function `getFolderById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id/).
+
+
+```
+client.getFolders().getFolderById("0")
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- queryParams `GetFolderByIdQueryParams`
+ - Query parameters of getFolderById method
+- headers `GetFolderByIdHeaders`
+ - Headers of getFolderById method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns a folder, including the first 100 entries in the folder.
+If you used query parameters like
+`sort`, `direction`, `offset`, or `limit`
+the *folder items list* will be affected accordingly.
+
+To fetch more items within the folder, use the
+[Get items in a folder](https://developer.box.com/reference/get-folders-id-items)) endpoint.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+
+## Update folder
+
+Updates a folder. This can be also be used to move the folder,
+create shared links, update collaborations, and more.
+
+This operation is performed by calling function `updateFolderById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-folders-id/).
+
+
+```
+client.getFolders().updateFolderById(folderToUpdate.getId(), new UpdateFolderByIdRequestBody.Builder().name(updatedName).description("Updated description").build())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- requestBody `UpdateFolderByIdRequestBody`
+ - Request body of updateFolderById method
+- queryParams `UpdateFolderByIdQueryParams`
+ - Query parameters of updateFolderById method
+- headers `UpdateFolderByIdHeaders`
+ - Headers of updateFolderById method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns a folder object for the updated folder
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+If the user is moving folders with a large number of items in all of
+their descendants, the call will be run asynchronously. If the
+operation is not completed within 10 minutes, the user will receive
+a 200 OK response, and the operation will continue running.
+
+
+## Delete folder
+
+Deletes a folder, either permanently or by moving it to
+the trash.
+
+This operation is performed by calling function `deleteFolderById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-folders-id/).
+
+
+```
+client.getFolders().deleteFolderById(newFolder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- queryParams `DeleteFolderByIdQueryParams`
+ - Query parameters of deleteFolderById method
+- headers `DeleteFolderByIdHeaders`
+ - Headers of deleteFolderById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the folder is successfully deleted
+or moved to the trash.
+
+
+## List items in folder
+
+Retrieves a page of items in a folder. These items can be files,
+folders, and web links.
+
+To request more information about the folder itself, like its size,
+use the [Get a folder](https://developer.box.com/reference/get-folders-id) endpoint instead.
+
+This operation is performed by calling function `getFolderItems`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id-items/).
+
+
+```
+client.getFolders().getFolderItems(folderOrigin.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- queryParams `GetFolderItemsQueryParams`
+ - Query parameters of getFolderItems method
+- headers `GetFolderItemsHeaders`
+ - Headers of getFolderItems method
+
+
+### Returns
+
+This function returns a value of type `Items`.
+
+Returns a collection of files, folders, and web links contained in a folder.
+
+
+## Create folder
+
+Creates a new empty folder within the specified parent folder.
+
+This operation is performed by calling function `createFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-folders/).
+
+
+```
+client.getFolders().createFolder(new CreateFolderRequestBody(newFolderName, new CreateFolderRequestBodyParentField("0")))
+```
+
+### Arguments
+
+- requestBody `CreateFolderRequestBody`
+ - Request body of createFolder method
+- queryParams `CreateFolderQueryParams`
+ - Query parameters of createFolder method
+- headers `CreateFolderHeaders`
+ - Headers of createFolder method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns a folder object.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+
+## Copy folder
+
+Creates a copy of a folder within a destination folder.
+
+The original folder will not be changed.
+
+This operation is performed by calling function `copyFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-folders-id-copy/).
+
+
+```
+client.getFolders().copyFolder(folderOrigin.getId(), new CopyFolderRequestBody.Builder(new CopyFolderRequestBodyParentField("0")).name(copiedFolderName).build())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier of the folder to copy. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder with the ID `0` can not be copied. Example: "0"
+- requestBody `CopyFolderRequestBody`
+ - Request body of copyFolder method
+- queryParams `CopyFolderQueryParams`
+ - Query parameters of copyFolder method
+- headers `CopyFolderHeaders`
+ - Headers of copyFolder method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns a new folder object representing the copied folder.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields.
+
+
diff --git a/docs/folderwatermarks.md b/docs/folderwatermarks.md
new file mode 100644
index 000000000..323f45ef8
--- /dev/null
+++ b/docs/folderwatermarks.md
@@ -0,0 +1,100 @@
+# FolderWatermarksManager
+
+
+- [Get watermark for folder](#get-watermark-for-folder)
+- [Apply watermark to folder](#apply-watermark-to-folder)
+- [Remove watermark from folder](#remove-watermark-from-folder)
+
+## Get watermark for folder
+
+Retrieve the watermark for a folder.
+
+This operation is performed by calling function `getFolderWatermark`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id-watermark/).
+
+
+```
+client.getFolderWatermarks().getFolderWatermark(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- headers `GetFolderWatermarkHeaders`
+ - Headers of getFolderWatermark method
+
+
+### Returns
+
+This function returns a value of type `Watermark`.
+
+Returns an object containing information about the
+watermark associated for to this folder.
+
+
+## Apply watermark to folder
+
+Applies or update a watermark on a folder.
+
+This operation is performed by calling function `updateFolderWatermark`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-folders-id-watermark/).
+
+
+```
+client.getFolderWatermarks().updateFolderWatermark(folder.getId(), new UpdateFolderWatermarkRequestBody(new UpdateFolderWatermarkRequestBodyWatermarkField.Builder().imprint(UpdateFolderWatermarkRequestBodyWatermarkImprintField.DEFAULT).build()))
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- requestBody `UpdateFolderWatermarkRequestBody`
+ - Request body of updateFolderWatermark method
+- headers `UpdateFolderWatermarkHeaders`
+ - Headers of updateFolderWatermark method
+
+
+### Returns
+
+This function returns a value of type `Watermark`.
+
+Returns an updated watermark if a watermark already
+existed on this folder.Returns a new watermark if no watermark existed on
+this folder yet.
+
+
+## Remove watermark from folder
+
+Removes the watermark from a folder.
+
+This operation is performed by calling function `deleteFolderWatermark`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-folders-id-watermark/).
+
+
+```
+client.getFolderWatermarks().deleteFolderWatermark(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- headers `DeleteFolderWatermarkHeaders`
+ - Headers of deleteFolderWatermark method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+An empty response will be returned when the watermark
+was successfully deleted.
+
+
diff --git a/docs/groups.md b/docs/groups.md
new file mode 100644
index 000000000..5e66b2d5f
--- /dev/null
+++ b/docs/groups.md
@@ -0,0 +1,171 @@
+# GroupsManager
+
+
+- [List groups for enterprise](#list-groups-for-enterprise)
+- [Create group](#create-group)
+- [Get group](#get-group)
+- [Update group](#update-group)
+- [Remove group](#remove-group)
+
+## List groups for enterprise
+
+Retrieves all of the groups for a given enterprise. The user
+must have admin permissions to inspect enterprise's groups.
+
+This operation is performed by calling function `getGroups`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-groups/).
+
+
+```
+client.getGroups().getGroups()
+```
+
+### Arguments
+
+- queryParams `GetGroupsQueryParams`
+ - Query parameters of getGroups method
+- headers `GetGroupsHeaders`
+ - Headers of getGroups method
+
+
+### Returns
+
+This function returns a value of type `Groups`.
+
+Returns a collection of group objects. If there are no groups, an
+empty collection will be returned.
+
+
+## Create group
+
+Creates a new group of users in an enterprise. Only users with admin
+permissions can create new groups.
+
+This operation is performed by calling function `createGroup`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-groups/).
+
+
+```
+client.getGroups().createGroup(new CreateGroupRequestBody.Builder(groupName).description(groupDescription).build())
+```
+
+### Arguments
+
+- requestBody `CreateGroupRequestBody`
+ - Request body of createGroup method
+- queryParams `CreateGroupQueryParams`
+ - Query parameters of createGroup method
+- headers `CreateGroupHeaders`
+ - Headers of createGroup method
+
+
+### Returns
+
+This function returns a value of type `GroupFull`.
+
+Returns the new group object.
+
+
+## Get group
+
+Retrieves information about a group. Only members of this
+group or users with admin-level permissions will be able to
+use this API.
+
+This operation is performed by calling function `getGroupById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-groups-id/).
+
+
+```
+client.getGroups().getGroupById(group.getId(), new GetGroupByIdQueryParams.Builder().fields(Arrays.asList("id", "name", "description", "group_type")).build())
+```
+
+### Arguments
+
+- groupId `String`
+ - The ID of the group. Example: "57645"
+- queryParams `GetGroupByIdQueryParams`
+ - Query parameters of getGroupById method
+- headers `GetGroupByIdHeaders`
+ - Headers of getGroupById method
+
+
+### Returns
+
+This function returns a value of type `GroupFull`.
+
+Returns the group object.
+
+
+## Update group
+
+Updates a specific group. Only admins of this
+group or users with admin-level permissions will be able to
+use this API.
+
+This operation is performed by calling function `updateGroupById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-groups-id/).
+
+
+```
+client.getGroups().updateGroupById(group.getId(), new UpdateGroupByIdRequestBody.Builder().name(updatedGroupName).build())
+```
+
+### Arguments
+
+- groupId `String`
+ - The ID of the group. Example: "57645"
+- requestBody `UpdateGroupByIdRequestBody`
+ - Request body of updateGroupById method
+- queryParams `UpdateGroupByIdQueryParams`
+ - Query parameters of updateGroupById method
+- headers `UpdateGroupByIdHeaders`
+ - Headers of updateGroupById method
+
+
+### Returns
+
+This function returns a value of type `GroupFull`.
+
+Returns the updated group object.
+
+
+## Remove group
+
+Permanently deletes a group. Only users with
+admin-level permissions will be able to use this API.
+
+This operation is performed by calling function `deleteGroupById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-groups-id/).
+
+
+```
+client.getGroups().deleteGroupById(group.getId())
+```
+
+### Arguments
+
+- groupId `String`
+ - The ID of the group. Example: "57645"
+- headers `DeleteGroupByIdHeaders`
+ - Headers of deleteGroupById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the group was
+successfully deleted.
+
+
diff --git a/docs/hubcollaborations.md b/docs/hubcollaborations.md
new file mode 100644
index 000000000..609b5e572
--- /dev/null
+++ b/docs/hubcollaborations.md
@@ -0,0 +1,160 @@
+# HubCollaborationsManager
+
+
+- [Get Box Hub collaborations](#get-box-hub-collaborations)
+- [Create Box Hub collaboration](#create-box-hub-collaboration)
+- [Get Box Hub collaboration by collaboration ID](#get-box-hub-collaboration-by-collaboration-id)
+- [Update Box Hub collaboration](#update-box-hub-collaboration)
+- [Remove Box Hub collaboration](#remove-box-hub-collaboration)
+
+## Get Box Hub collaborations
+
+Retrieves all collaborations for a Box Hub.
+
+This operation is performed by calling function `getHubCollaborationsV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-hub-collaborations/).
+
+
+```
+client.getHubCollaborations().getHubCollaborationsV2025R0(new GetHubCollaborationsV2025R0QueryParams(hub.getId()))
+```
+
+### Arguments
+
+- queryParams `GetHubCollaborationsV2025R0QueryParams`
+ - Query parameters of getHubCollaborationsV2025R0 method
+- headers `GetHubCollaborationsV2025R0Headers`
+ - Headers of getHubCollaborationsV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubCollaborationsV2025R0`.
+
+Retrieves the collaborations associated with the specified Box Hub.
+
+
+## Create Box Hub collaboration
+
+Adds a collaboration for a single user or a single group to a Box Hub.
+
+Collaborations can be created using email address, user IDs, or group IDs.
+
+This operation is performed by calling function `createHubCollaborationV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-hub-collaborations/).
+
+
+```
+client.getHubCollaborations().createHubCollaborationV2025R0(new HubCollaborationCreateRequestV2025R0(new HubCollaborationCreateRequestV2025R0HubField(hub.getId()), new HubCollaborationCreateRequestV2025R0AccessibleByField.Builder("user").id(user.getId()).build(), "viewer"))
+```
+
+### Arguments
+
+- requestBody `HubCollaborationCreateRequestV2025R0`
+ - Request body of createHubCollaborationV2025R0 method
+- headers `CreateHubCollaborationV2025R0Headers`
+ - Headers of createHubCollaborationV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubCollaborationV2025R0`.
+
+Returns a new Box Hub collaboration object.
+
+
+## Get Box Hub collaboration by collaboration ID
+
+Retrieves details for a Box Hub collaboration by collaboration ID.
+
+This operation is performed by calling function `getHubCollaborationByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-hub-collaborations-id/).
+
+
+```
+client.getHubCollaborations().getHubCollaborationByIdV2025R0(createdCollaboration.getId())
+```
+
+### Arguments
+
+- hubCollaborationId `String`
+ - The ID of the hub collaboration. Example: "1234"
+- headers `GetHubCollaborationByIdV2025R0Headers`
+ - Headers of getHubCollaborationByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubCollaborationV2025R0`.
+
+Returns a Box Hub collaboration object.
+
+
+## Update Box Hub collaboration
+
+Updates a Box Hub collaboration.
+Can be used to change the Box Hub role.
+
+This operation is performed by calling function `updateHubCollaborationByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/put-hub-collaborations-id/).
+
+
+```
+client.getHubCollaborations().updateHubCollaborationByIdV2025R0(createdCollaboration.getId(), new HubCollaborationUpdateRequestV2025R0.Builder().role("editor").build())
+```
+
+### Arguments
+
+- hubCollaborationId `String`
+ - The ID of the hub collaboration. Example: "1234"
+- requestBody `HubCollaborationUpdateRequestV2025R0`
+ - Request body of updateHubCollaborationByIdV2025R0 method
+- headers `UpdateHubCollaborationByIdV2025R0Headers`
+ - Headers of updateHubCollaborationByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubCollaborationV2025R0`.
+
+Returns an updated Box Hub collaboration object.
+
+
+## Remove Box Hub collaboration
+
+Deletes a single Box Hub collaboration.
+
+This operation is performed by calling function `deleteHubCollaborationByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/delete-hub-collaborations-id/).
+
+
+```
+client.getHubCollaborations().deleteHubCollaborationByIdV2025R0(createdCollaboration.getId())
+```
+
+### Arguments
+
+- hubCollaborationId `String`
+ - The ID of the hub collaboration. Example: "1234"
+- headers `DeleteHubCollaborationByIdV2025R0Headers`
+ - Headers of deleteHubCollaborationByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the Box Hub collaboration was
+successfully deleted.
+
+
diff --git a/docs/hubdocument.md b/docs/hubdocument.md
new file mode 100644
index 000000000..d4d45eb3a
--- /dev/null
+++ b/docs/hubdocument.md
@@ -0,0 +1,69 @@
+# HubDocumentManager
+
+
+- [List Hub Document Pages](#list-hub-document-pages)
+- [List Hub Document blocks for page](#list-hub-document-blocks-for-page)
+
+## List Hub Document Pages
+
+Retrieves a list of Hub Document Pages for the specified hub.
+Includes both root-level pages and sub pages.
+
+This operation is performed by calling function `getHubDocumentPagesV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-hub-document-pages/).
+
+
+```
+client.getHubDocument().getHubDocumentPagesV2025R0(new GetHubDocumentPagesV2025R0QueryParams(hubId))
+```
+
+### Arguments
+
+- queryParams `GetHubDocumentPagesV2025R0QueryParams`
+ - Query parameters of getHubDocumentPagesV2025R0 method
+- headers `GetHubDocumentPagesV2025R0Headers`
+ - Headers of getHubDocumentPagesV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubDocumentPagesV2025R0`.
+
+Returns a Hub Document Pages response whose `entries` array contains root-level pages and sub pages. Includes pagination when more results are available.
+
+
+## List Hub Document blocks for page
+
+Retrieves a sorted list of all Hub Document Blocks on a specified page in the hub document, excluding items.
+Blocks are hierarchically organized by their `parent_id`.
+Blocks are sorted in order based on user specification in the user interface.
+The response will only include content blocks that belong to the specified page. This will not include sub pages or sub page content blocks.
+
+This operation is performed by calling function `getHubDocumentBlocksV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-hub-document-blocks/).
+
+
+```
+client.getHubDocument().getHubDocumentBlocksV2025R0(new GetHubDocumentBlocksV2025R0QueryParams(hubId, pageId))
+```
+
+### Arguments
+
+- queryParams `GetHubDocumentBlocksV2025R0QueryParams`
+ - Query parameters of getHubDocumentBlocksV2025R0 method
+- headers `GetHubDocumentBlocksV2025R0Headers`
+ - Headers of getHubDocumentBlocksV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubDocumentBlocksV2025R0`.
+
+Returns a Hub Document Blocks response whose `entries` array contains all content blocks of the specified page, except for items.
+To retrieve items, use the `GET /hub_items` endpoint.
+
+
diff --git a/docs/hubitems.md b/docs/hubitems.md
new file mode 100644
index 000000000..b826422e4
--- /dev/null
+++ b/docs/hubitems.md
@@ -0,0 +1,66 @@
+# HubItemsManager
+
+
+- [Get Box Hub items](#get-box-hub-items)
+- [Manage Box Hub items](#manage-box-hub-items)
+
+## Get Box Hub items
+
+Retrieves all items associated with a Box Hub.
+
+This operation is performed by calling function `getHubItemsV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-hub-items/).
+
+
+```
+client.getHubItems().getHubItemsV2025R0(new GetHubItemsV2025R0QueryParams(createdHub.getId()))
+```
+
+### Arguments
+
+- queryParams `GetHubItemsV2025R0QueryParams`
+ - Query parameters of getHubItemsV2025R0 method
+- headers `GetHubItemsV2025R0Headers`
+ - Headers of getHubItemsV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubItemsV2025R0`.
+
+Retrieves the items associated with the specified Box Hub.
+
+
+## Manage Box Hub items
+
+Adds and/or removes Box Hub items from a Box Hub.
+
+This operation is performed by calling function `manageHubItemsV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-hubs-id-manage-items/).
+
+
+```
+client.getHubItems().manageHubItemsV2025R0(createdHub.getId(), new HubItemsManageRequestV2025R0.Builder().operations(Arrays.asList(new HubItemOperationV2025R0(HubItemOperationV2025R0ActionField.ADD, new FolderReferenceV2025R0(folder.getId())))).build())
+```
+
+### Arguments
+
+- hubId `String`
+ - The unique identifier that represent a hub. The ID for any hub can be determined by visiting this hub in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/hubs/123` the `hub_id` is `123`. Example: "12345"
+- requestBody `HubItemsManageRequestV2025R0`
+ - Request body of manageHubItemsV2025R0 method
+- headers `ManageHubItemsV2025R0Headers`
+ - Headers of manageHubItemsV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubItemsManageResponseV2025R0`.
+
+
+
+
diff --git a/docs/hubs.md b/docs/hubs.md
new file mode 100644
index 000000000..45f7182e6
--- /dev/null
+++ b/docs/hubs.md
@@ -0,0 +1,224 @@
+# HubsManager
+
+
+- [List all Box Hubs](#list-all-box-hubs)
+- [Create Box Hub](#create-box-hub)
+- [List all Box Hubs for requesting enterprise](#list-all-box-hubs-for-requesting-enterprise)
+- [Get Box Hub information by ID](#get-box-hub-information-by-id)
+- [Update Box Hub information by ID](#update-box-hub-information-by-id)
+- [Delete Box Hub](#delete-box-hub)
+- [Copy Box Hub](#copy-box-hub)
+
+## List all Box Hubs
+
+Retrieves all Box Hubs for requesting user.
+
+This operation is performed by calling function `getHubsV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-hubs/).
+
+
+```
+client.getHubs().getHubsV2025R0(new GetHubsV2025R0QueryParams.Builder().scope("all").sort("name").direction(GetHubsV2025R0QueryParamsDirectionField.ASC).build())
+```
+
+### Arguments
+
+- queryParams `GetHubsV2025R0QueryParams`
+ - Query parameters of getHubsV2025R0 method
+- headers `GetHubsV2025R0Headers`
+ - Headers of getHubsV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubsV2025R0`.
+
+Returns all Box Hubs for the given user or enterprise.
+
+
+## Create Box Hub
+
+Creates a new Box Hub.
+
+This operation is performed by calling function `createHubV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-hubs/).
+
+
+```
+client.getHubs().createHubV2025R0(new HubCreateRequestV2025R0.Builder(hubTitle).description(hubDescription).build())
+```
+
+### Arguments
+
+- requestBody `HubCreateRequestV2025R0`
+ - Request body of createHubV2025R0 method
+- headers `CreateHubV2025R0Headers`
+ - Headers of createHubV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubV2025R0`.
+
+Returns a new Hub object.
+
+
+## List all Box Hubs for requesting enterprise
+
+Retrieves all Box Hubs for a given enterprise.
+
+Admins or Hub Co-admins of an enterprise
+with GCM scope can make this call.
+
+This operation is performed by calling function `getEnterpriseHubsV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-enterprise-hubs/).
+
+
+```
+client.getHubs().getEnterpriseHubsV2025R0(new GetEnterpriseHubsV2025R0QueryParams.Builder().sort("name").direction(GetEnterpriseHubsV2025R0QueryParamsDirectionField.ASC).build())
+```
+
+### Arguments
+
+- queryParams `GetEnterpriseHubsV2025R0QueryParams`
+ - Query parameters of getEnterpriseHubsV2025R0 method
+- headers `GetEnterpriseHubsV2025R0Headers`
+ - Headers of getEnterpriseHubsV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubsV2025R0`.
+
+Returns all Box Hubs for the given user or enterprise.
+
+
+## Get Box Hub information by ID
+
+Retrieves details for a Box Hub by its ID.
+
+This operation is performed by calling function `getHubByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-hubs-id/).
+
+
+```
+client.getHubs().getHubByIdV2025R0(hubId)
+```
+
+### Arguments
+
+- hubId `String`
+ - The unique identifier that represent a hub. The ID for any hub can be determined by visiting this hub in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/hubs/123` the `hub_id` is `123`. Example: "12345"
+- headers `GetHubByIdV2025R0Headers`
+ - Headers of getHubByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubV2025R0`.
+
+Returns a hub object.
+
+
+## Update Box Hub information by ID
+
+Updates a Box Hub. Can be used to change title, description, or Box Hub settings.
+
+This operation is performed by calling function `updateHubByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/put-hubs-id/).
+
+
+```
+client.getHubs().updateHubByIdV2025R0(hubId, new HubUpdateRequestV2025R0.Builder().title(newHubTitle).description(newHubDescription).build())
+```
+
+### Arguments
+
+- hubId `String`
+ - The unique identifier that represent a hub. The ID for any hub can be determined by visiting this hub in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/hubs/123` the `hub_id` is `123`. Example: "12345"
+- requestBody `HubUpdateRequestV2025R0`
+ - Request body of updateHubByIdV2025R0 method
+- headers `UpdateHubByIdV2025R0Headers`
+ - Headers of updateHubByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubV2025R0`.
+
+Returns a Hub object.
+
+
+## Delete Box Hub
+
+Deletes a single Box Hub.
+
+This operation is performed by calling function `deleteHubByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/delete-hubs-id/).
+
+
+```
+client.getHubs().deleteHubByIdV2025R0(hubId)
+```
+
+### Arguments
+
+- hubId `String`
+ - The unique identifier that represent a hub. The ID for any hub can be determined by visiting this hub in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/hubs/123` the `hub_id` is `123`. Example: "12345"
+- headers `DeleteHubByIdV2025R0Headers`
+ - Headers of deleteHubByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the hub was
+successfully deleted.
+
+
+## Copy Box Hub
+
+Creates a copy of a Box Hub.
+
+The original Box Hub will not be modified.
+
+This operation is performed by calling function `copyHubV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-hubs-id-copy/).
+
+
+```
+client.getHubs().copyHubV2025R0(createdHub.getId(), new HubCopyRequestV2025R0.Builder().title(copiedHubTitle).description(copiedHubDescription).build())
+```
+
+### Arguments
+
+- hubId `String`
+ - The unique identifier that represent a hub. The ID for any hub can be determined by visiting this hub in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/hubs/123` the `hub_id` is `123`. Example: "12345"
+- requestBody `HubCopyRequestV2025R0`
+ - Request body of copyHubV2025R0 method
+- headers `CopyHubV2025R0Headers`
+ - Headers of copyHubV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `HubV2025R0`.
+
+Returns a new Hub object.
+
+
diff --git a/docs/integrationmappings.md b/docs/integrationmappings.md
new file mode 100644
index 000000000..d05be5194
--- /dev/null
+++ b/docs/integrationmappings.md
@@ -0,0 +1,273 @@
+# IntegrationMappingsManager
+
+
+- [List Slack integration mappings](#list-slack-integration-mappings)
+- [Create Slack integration mapping](#create-slack-integration-mapping)
+- [Update Slack integration mapping](#update-slack-integration-mapping)
+- [Delete Slack integration mapping](#delete-slack-integration-mapping)
+- [List Teams integration mappings](#list-teams-integration-mappings)
+- [Create Teams integration mapping](#create-teams-integration-mapping)
+- [Update Teams integration mapping](#update-teams-integration-mapping)
+- [Delete Teams integration mapping](#delete-teams-integration-mapping)
+
+## List Slack integration mappings
+
+Lists [Slack integration mappings](https://support.box.com/hc/en-us/articles/4415585987859-Box-as-the-Content-Layer-for-Slack) in a users' enterprise.
+
+You need Admin or Co-Admin role to
+use this endpoint.
+
+This operation is performed by calling function `getSlackIntegrationMapping`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-integration-mappings-slack/).
+
+
+```
+userClient.getIntegrationMappings().getSlackIntegrationMapping()
+```
+
+### Arguments
+
+- queryParams `GetSlackIntegrationMappingQueryParams`
+ - Query parameters of getSlackIntegrationMapping method
+- headers `GetSlackIntegrationMappingHeaders`
+ - Headers of getSlackIntegrationMapping method
+
+
+### Returns
+
+This function returns a value of type `IntegrationMappings`.
+
+Returns a collection of integration mappings.
+
+
+## Create Slack integration mapping
+
+Creates a [Slack integration mapping](https://support.box.com/hc/en-us/articles/4415585987859-Box-as-the-Content-Layer-for-Slack)
+by mapping a Slack channel to a Box item.
+
+You need Admin or Co-Admin role to
+use this endpoint.
+
+This operation is performed by calling function `createSlackIntegrationMapping`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-integration-mappings-slack/).
+
+
+```
+userClient.getIntegrationMappings().createSlackIntegrationMapping(new IntegrationMappingSlackCreateRequest(new IntegrationMappingPartnerItemSlack.Builder(slackPartnerItemId).slackOrgId(slackOrgId).build(), new IntegrationMappingBoxItemSlack(folder.getId())))
+```
+
+### Arguments
+
+- requestBody `IntegrationMappingSlackCreateRequest`
+ - Request body of createSlackIntegrationMapping method
+- headers `CreateSlackIntegrationMappingHeaders`
+ - Headers of createSlackIntegrationMapping method
+
+
+### Returns
+
+This function returns a value of type `IntegrationMapping`.
+
+Returns the created integration mapping.
+
+
+## Update Slack integration mapping
+
+Updates a [Slack integration mapping](https://support.box.com/hc/en-us/articles/4415585987859-Box-as-the-Content-Layer-for-Slack).
+Supports updating the Box folder ID and options.
+
+You need Admin or Co-Admin role to
+use this endpoint.
+
+This operation is performed by calling function `updateSlackIntegrationMappingById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-integration-mappings-slack-id/).
+
+
+```
+userClient.getIntegrationMappings().updateSlackIntegrationMappingById(slackIntegrationMapping.getId(), new UpdateSlackIntegrationMappingByIdRequestBody.Builder().boxItem(new IntegrationMappingBoxItemSlack(folder.getId())).build())
+```
+
+### Arguments
+
+- integrationMappingId `String`
+ - An ID of an integration mapping. Example: "11235432"
+- requestBody `UpdateSlackIntegrationMappingByIdRequestBody`
+ - Request body of updateSlackIntegrationMappingById method
+- headers `UpdateSlackIntegrationMappingByIdHeaders`
+ - Headers of updateSlackIntegrationMappingById method
+
+
+### Returns
+
+This function returns a value of type `IntegrationMapping`.
+
+Returns the updated integration mapping object.
+
+
+## Delete Slack integration mapping
+
+Deletes a [Slack integration mapping](https://support.box.com/hc/en-us/articles/4415585987859-Box-as-the-Content-Layer-for-Slack).
+
+
+You need Admin or Co-Admin role to
+use this endpoint.
+
+This operation is performed by calling function `deleteSlackIntegrationMappingById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-integration-mappings-slack-id/).
+
+
+```
+userClient.getIntegrationMappings().deleteSlackIntegrationMappingById(slackIntegrationMapping.getId())
+```
+
+### Arguments
+
+- integrationMappingId `String`
+ - An ID of an integration mapping. Example: "11235432"
+- headers `DeleteSlackIntegrationMappingByIdHeaders`
+ - Headers of deleteSlackIntegrationMappingById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Empty body in response.
+
+
+## List Teams integration mappings
+
+Lists [Teams integration mappings](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams) in a users' enterprise.
+You need Admin or Co-Admin role to
+use this endpoint.
+
+This operation is performed by calling function `getTeamsIntegrationMapping`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-integration-mappings-teams/).
+
+
+```
+userClient.getIntegrationMappings().getTeamsIntegrationMapping()
+```
+
+### Arguments
+
+- queryParams `GetTeamsIntegrationMappingQueryParams`
+ - Query parameters of getTeamsIntegrationMapping method
+- headers `GetTeamsIntegrationMappingHeaders`
+ - Headers of getTeamsIntegrationMapping method
+
+
+### Returns
+
+This function returns a value of type `IntegrationMappingsTeams`.
+
+Returns a collection of integration mappings.
+
+
+## Create Teams integration mapping
+
+Creates a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams)
+by mapping a Teams channel to a Box item.
+You need Admin or Co-Admin role to
+use this endpoint.
+
+This operation is performed by calling function `createTeamsIntegrationMapping`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-integration-mappings-teams/).
+
+
+```
+userClient.getIntegrationMappings().createTeamsIntegrationMapping(new IntegrationMappingTeamsCreateRequest(new IntegrationMappingPartnerItemTeamsCreateRequest(IntegrationMappingPartnerItemTeamsCreateRequestTypeField.CHANNEL, partnerItemId, tenantId, teamId), new FolderReference(folder.getId())))
+```
+
+### Arguments
+
+- requestBody `IntegrationMappingTeamsCreateRequest`
+ - Request body of createTeamsIntegrationMapping method
+- headers `CreateTeamsIntegrationMappingHeaders`
+ - Headers of createTeamsIntegrationMapping method
+
+
+### Returns
+
+This function returns a value of type `IntegrationMappingTeams`.
+
+Returns the created integration mapping.
+
+
+## Update Teams integration mapping
+
+Updates a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams).
+Supports updating the Box folder ID and options.
+You need Admin or Co-Admin role to
+use this endpoint.
+
+This operation is performed by calling function `updateTeamsIntegrationMappingById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-integration-mappings-teams-id/).
+
+
+```
+userClient.getIntegrationMappings().updateTeamsIntegrationMappingById(integrationMappingId, new UpdateTeamsIntegrationMappingByIdRequestBody.Builder().boxItem(new FolderReference("1234567")).build())
+```
+
+### Arguments
+
+- integrationMappingId `String`
+ - An ID of an integration mapping. Example: "11235432"
+- requestBody `UpdateTeamsIntegrationMappingByIdRequestBody`
+ - Request body of updateTeamsIntegrationMappingById method
+- headers `UpdateTeamsIntegrationMappingByIdHeaders`
+ - Headers of updateTeamsIntegrationMappingById method
+
+
+### Returns
+
+This function returns a value of type `IntegrationMappingTeams`.
+
+Returns the updated integration mapping object.
+
+
+## Delete Teams integration mapping
+
+Deletes a [Teams integration mapping](https://support.box.com/hc/en-us/articles/360044681474-Using-Box-for-Teams).
+You need Admin or Co-Admin role to
+use this endpoint.
+
+This operation is performed by calling function `deleteTeamsIntegrationMappingById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-integration-mappings-teams-id/).
+
+
+```
+userClient.getIntegrationMappings().deleteTeamsIntegrationMappingById(integrationMappingId)
+```
+
+### Arguments
+
+- integrationMappingId `String`
+ - An ID of an integration mapping. Example: "11235432"
+- headers `DeleteTeamsIntegrationMappingByIdHeaders`
+ - Headers of deleteTeamsIntegrationMappingById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Empty body in response.
+
+
diff --git a/docs/invites.md b/docs/invites.md
new file mode 100644
index 000000000..e1a89b263
--- /dev/null
+++ b/docs/invites.md
@@ -0,0 +1,76 @@
+# InvitesManager
+
+
+- [Create user invite](#create-user-invite)
+- [Get user invite status](#get-user-invite-status)
+
+## Create user invite
+
+Invites an existing external user to join an enterprise.
+
+The existing user can not be part of another enterprise and
+must already have a Box account. Once invited, the user will receive an
+email and are prompted to accept the invitation within the
+Box web application.
+
+This method requires the "Manage An Enterprise" scope enabled for
+the application, which can be enabled within the developer console.
+
+This operation is performed by calling function `createInvite`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-invites/).
+
+
+```
+client.getInvites().createInvite(new CreateInviteRequestBody(new CreateInviteRequestBodyEnterpriseField(currentUser.getEnterprise().getId()), new CreateInviteRequestBodyActionableByField.Builder().login(email).build()))
+```
+
+### Arguments
+
+- requestBody `CreateInviteRequestBody`
+ - Request body of createInvite method
+- queryParams `CreateInviteQueryParams`
+ - Query parameters of createInvite method
+- headers `CreateInviteHeaders`
+ - Headers of createInvite method
+
+
+### Returns
+
+This function returns a value of type `Invite`.
+
+Returns a new invite object.
+
+
+## Get user invite status
+
+Returns the status of a user invite.
+
+This operation is performed by calling function `getInviteById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-invites-id/).
+
+
+```
+client.getInvites().getInviteById(invitation.getId())
+```
+
+### Arguments
+
+- inviteId `String`
+ - The ID of an invite. Example: "213723"
+- queryParams `GetInviteByIdQueryParams`
+ - Query parameters of getInviteById method
+- headers `GetInviteByIdHeaders`
+ - Headers of getInviteById method
+
+
+### Returns
+
+This function returns a value of type `Invite`.
+
+Returns an invite object.
+
+
diff --git a/docs/legalholdpolicies.md b/docs/legalholdpolicies.md
new file mode 100644
index 000000000..dff0d51ef
--- /dev/null
+++ b/docs/legalholdpolicies.md
@@ -0,0 +1,161 @@
+# LegalHoldPoliciesManager
+
+
+- [List all legal hold policies](#list-all-legal-hold-policies)
+- [Create legal hold policy](#create-legal-hold-policy)
+- [Get legal hold policy](#get-legal-hold-policy)
+- [Update legal hold policy](#update-legal-hold-policy)
+- [Remove legal hold policy](#remove-legal-hold-policy)
+
+## List all legal hold policies
+
+Retrieves a list of legal hold policies that belong to
+an enterprise.
+
+This operation is performed by calling function `getLegalHoldPolicies`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-legal-hold-policies/).
+
+
+```
+client.getLegalHoldPolicies().getLegalHoldPolicies()
+```
+
+### Arguments
+
+- queryParams `GetLegalHoldPoliciesQueryParams`
+ - Query parameters of getLegalHoldPolicies method
+- headers `GetLegalHoldPoliciesHeaders`
+ - Headers of getLegalHoldPolicies method
+
+
+### Returns
+
+This function returns a value of type `LegalHoldPolicies`.
+
+Returns a list of legal hold policies.
+
+
+## Create legal hold policy
+
+Create a new legal hold policy.
+
+This operation is performed by calling function `createLegalHoldPolicy`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-legal-hold-policies/).
+
+
+```
+client.getLegalHoldPolicies().createLegalHoldPolicy(new CreateLegalHoldPolicyRequestBody.Builder(legalHoldPolicyName).description(legalHoldDescription).filterStartedAt(filterStartedAt).filterEndedAt(filterEndedAt).isOngoing(false).build())
+```
+
+### Arguments
+
+- requestBody `CreateLegalHoldPolicyRequestBody`
+ - Request body of createLegalHoldPolicy method
+- headers `CreateLegalHoldPolicyHeaders`
+ - Headers of createLegalHoldPolicy method
+
+
+### Returns
+
+This function returns a value of type `LegalHoldPolicy`.
+
+Returns a new legal hold policy object.
+
+
+## Get legal hold policy
+
+Retrieve a legal hold policy.
+
+This operation is performed by calling function `getLegalHoldPolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-legal-hold-policies-id/).
+
+
+```
+client.getLegalHoldPolicies().getLegalHoldPolicyById(legalHoldPolicyId)
+```
+
+### Arguments
+
+- legalHoldPolicyId `String`
+ - The ID of the legal hold policy. Example: "324432"
+- headers `GetLegalHoldPolicyByIdHeaders`
+ - Headers of getLegalHoldPolicyById method
+
+
+### Returns
+
+This function returns a value of type `LegalHoldPolicy`.
+
+Returns a legal hold policy object.
+
+
+## Update legal hold policy
+
+Update legal hold policy.
+
+This operation is performed by calling function `updateLegalHoldPolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-legal-hold-policies-id/).
+
+
+```
+client.getLegalHoldPolicies().updateLegalHoldPolicyById(legalHoldPolicyId, new UpdateLegalHoldPolicyByIdRequestBody.Builder().policyName(updatedLegalHoldPolicyName).build())
+```
+
+### Arguments
+
+- legalHoldPolicyId `String`
+ - The ID of the legal hold policy. Example: "324432"
+- requestBody `UpdateLegalHoldPolicyByIdRequestBody`
+ - Request body of updateLegalHoldPolicyById method
+- headers `UpdateLegalHoldPolicyByIdHeaders`
+ - Headers of updateLegalHoldPolicyById method
+
+
+### Returns
+
+This function returns a value of type `LegalHoldPolicy`.
+
+Returns a new legal hold policy object.
+
+
+## Remove legal hold policy
+
+Delete an existing legal hold policy.
+
+This is an asynchronous process. The policy will not be
+fully deleted yet when the response returns.
+
+This operation is performed by calling function `deleteLegalHoldPolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-legal-hold-policies-id/).
+
+
+```
+client.getLegalHoldPolicies().deleteLegalHoldPolicyById(legalHoldPolicy.getId())
+```
+
+### Arguments
+
+- legalHoldPolicyId `String`
+ - The ID of the legal hold policy. Example: "324432"
+- headers `DeleteLegalHoldPolicyByIdHeaders`
+ - Headers of deleteLegalHoldPolicyById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the policy was
+successfully deleted.
+
+
diff --git a/docs/legalholdpolicyassignments.md b/docs/legalholdpolicyassignments.md
new file mode 100644
index 000000000..592003406
--- /dev/null
+++ b/docs/legalholdpolicyassignments.md
@@ -0,0 +1,179 @@
+# LegalHoldPolicyAssignmentsManager
+
+
+- [List legal hold policy assignments](#list-legal-hold-policy-assignments)
+- [Assign legal hold policy](#assign-legal-hold-policy)
+- [Get legal hold policy assignment](#get-legal-hold-policy-assignment)
+- [Unassign legal hold policy](#unassign-legal-hold-policy)
+- [List files with current file versions for legal hold policy assignment](#list-files-with-current-file-versions-for-legal-hold-policy-assignment)
+
+## List legal hold policy assignments
+
+Retrieves a list of items a legal hold policy has been assigned to.
+
+This operation is performed by calling function `getLegalHoldPolicyAssignments`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-legal-hold-policy-assignments/).
+
+
+```
+client.getLegalHoldPolicyAssignments().getLegalHoldPolicyAssignments(new GetLegalHoldPolicyAssignmentsQueryParams(legalHoldPolicyId))
+```
+
+### Arguments
+
+- queryParams `GetLegalHoldPolicyAssignmentsQueryParams`
+ - Query parameters of getLegalHoldPolicyAssignments method
+- headers `GetLegalHoldPolicyAssignmentsHeaders`
+ - Headers of getLegalHoldPolicyAssignments method
+
+
+### Returns
+
+This function returns a value of type `LegalHoldPolicyAssignments`.
+
+Returns a list of legal hold policy assignments.
+
+
+## Assign legal hold policy
+
+Assign a legal hold to an item type of: file, file version, folder, user, ownership, or interactions.
+
+This operation is performed by calling function `createLegalHoldPolicyAssignment`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-legal-hold-policy-assignments/).
+
+
+```
+client.getLegalHoldPolicyAssignments().createLegalHoldPolicyAssignment(new CreateLegalHoldPolicyAssignmentRequestBody(legalHoldPolicyId, new CreateLegalHoldPolicyAssignmentRequestBodyAssignToField(CreateLegalHoldPolicyAssignmentRequestBodyAssignToTypeField.FILE, fileId)))
+```
+
+### Arguments
+
+- requestBody `CreateLegalHoldPolicyAssignmentRequestBody`
+ - Request body of createLegalHoldPolicyAssignment method
+- headers `CreateLegalHoldPolicyAssignmentHeaders`
+ - Headers of createLegalHoldPolicyAssignment method
+
+
+### Returns
+
+This function returns a value of type `LegalHoldPolicyAssignment`.
+
+Returns a new legal hold policy assignment.
+
+
+## Get legal hold policy assignment
+
+Retrieve a legal hold policy assignment.
+
+This operation is performed by calling function `getLegalHoldPolicyAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-legal-hold-policy-assignments-id/).
+
+
+```
+client.getLegalHoldPolicyAssignments().getLegalHoldPolicyAssignmentById(legalHoldPolicyAssignmentId)
+```
+
+### Arguments
+
+- legalHoldPolicyAssignmentId `String`
+ - The ID of the legal hold policy assignment. Example: "753465"
+- headers `GetLegalHoldPolicyAssignmentByIdHeaders`
+ - Headers of getLegalHoldPolicyAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `LegalHoldPolicyAssignment`.
+
+Returns a legal hold policy object.
+
+
+## Unassign legal hold policy
+
+Remove a legal hold from an item.
+
+This is an asynchronous process. The policy will not be
+fully removed yet when the response returns.
+
+This operation is performed by calling function `deleteLegalHoldPolicyAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-legal-hold-policy-assignments-id/).
+
+
+```
+client.getLegalHoldPolicyAssignments().deleteLegalHoldPolicyAssignmentById(legalHoldPolicyAssignmentId)
+```
+
+### Arguments
+
+- legalHoldPolicyAssignmentId `String`
+ - The ID of the legal hold policy assignment. Example: "753465"
+- headers `DeleteLegalHoldPolicyAssignmentByIdHeaders`
+ - Headers of deleteLegalHoldPolicyAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the assignment was
+successfully deleted.
+
+
+## List files with current file versions for legal hold policy assignment
+
+Get a list of files with current file versions for a legal hold
+assignment.
+
+In some cases you may want to get previous file versions instead. In these
+cases, use the `GET /legal_hold_policy_assignments/:id/file_versions_on_hold`
+API instead to return any previous versions of a file for this legal hold
+policy assignment.
+
+Due to ongoing re-architecture efforts this API might not return all file
+versions held for this policy ID. Instead, this API will only return the
+latest file version held in the newly developed architecture. The `GET
+/file_version_legal_holds` API can be used to fetch current and past versions
+of files held within the legacy architecture.
+
+This endpoint does not support returning any content that is on hold due to
+a Custodian collaborating on a Hub.
+
+The `GET /legal_hold_policy_assignments?policy_id={id}` API can be used to
+find a list of policy assignments for a given policy ID.
+
+This operation is performed by calling function `getLegalHoldPolicyAssignmentFileOnHold`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-legal-hold-policy-assignments-id-files-on-hold/).
+
+
+```
+client.getLegalHoldPolicyAssignments().getLegalHoldPolicyAssignmentFileOnHold(legalHoldPolicyAssignmentId)
+```
+
+### Arguments
+
+- legalHoldPolicyAssignmentId `String`
+ - The ID of the legal hold policy assignment. Example: "753465"
+- queryParams `GetLegalHoldPolicyAssignmentFileOnHoldQueryParams`
+ - Query parameters of getLegalHoldPolicyAssignmentFileOnHold method
+- headers `GetLegalHoldPolicyAssignmentFileOnHoldHeaders`
+ - Headers of getLegalHoldPolicyAssignmentFileOnHold method
+
+
+### Returns
+
+This function returns a value of type `FilesOnHold`.
+
+Returns the list of current file versions held under legal hold for a
+specific legal hold policy assignment.
+
+
diff --git a/docs/listcollaborations.md b/docs/listcollaborations.md
new file mode 100644
index 000000000..a3d691d3d
--- /dev/null
+++ b/docs/listcollaborations.md
@@ -0,0 +1,152 @@
+# ListCollaborationsManager
+
+
+- [List file collaborations](#list-file-collaborations)
+- [List folder collaborations](#list-folder-collaborations)
+- [List pending collaborations](#list-pending-collaborations)
+- [List group collaborations](#list-group-collaborations)
+
+## List file collaborations
+
+Retrieves a list of pending and active collaborations for a
+file. This returns all the users that have access to the file
+or have been invited to the file.
+
+This operation is performed by calling function `getFileCollaborations`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-collaborations/).
+
+
+```
+client.getListCollaborations().getFileCollaborations(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetFileCollaborationsQueryParams`
+ - Query parameters of getFileCollaborations method
+- headers `GetFileCollaborationsHeaders`
+ - Headers of getFileCollaborations method
+
+
+### Returns
+
+This function returns a value of type `Collaborations`.
+
+Returns a collection of collaboration objects. If there are no
+collaborations on this file an empty collection will be returned.
+
+This list includes pending collaborations, for which the `status`
+is set to `pending`, indicating invitations that have been sent but not
+yet accepted.
+
+
+## List folder collaborations
+
+Retrieves a list of pending and active collaborations for a
+folder. This returns all the users that have access to the folder
+or have been invited to the folder.
+
+This operation is performed by calling function `getFolderCollaborations`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id-collaborations/).
+
+
+```
+client.getListCollaborations().getFolderCollaborations(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. Example: "12345"
+- queryParams `GetFolderCollaborationsQueryParams`
+ - Query parameters of getFolderCollaborations method
+- headers `GetFolderCollaborationsHeaders`
+ - Headers of getFolderCollaborations method
+
+
+### Returns
+
+This function returns a value of type `Collaborations`.
+
+Returns a collection of collaboration objects. If there are no
+collaborations on this folder an empty collection will be returned.
+
+This list includes pending collaborations, for which the `status`
+is set to `pending`, indicating invitations that have been sent but not
+yet accepted.
+
+
+## List pending collaborations
+
+Retrieves all pending collaboration invites for this user.
+
+This operation is performed by calling function `getCollaborations`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collaborations/).
+
+
+```
+client.getListCollaborations().getCollaborations(new GetCollaborationsQueryParams(GetCollaborationsQueryParamsStatusField.PENDING))
+```
+
+### Arguments
+
+- queryParams `GetCollaborationsQueryParams`
+ - Query parameters of getCollaborations method
+- headers `GetCollaborationsHeaders`
+ - Headers of getCollaborations method
+
+
+### Returns
+
+This function returns a value of type `CollaborationsOffsetPaginated`.
+
+Returns a collection of pending collaboration objects.
+
+If the user has no pending collaborations, the collection
+will be empty.
+
+
+## List group collaborations
+
+Retrieves all the collaborations for a group. The user
+must have admin permissions to inspect enterprise's groups.
+
+Each collaboration object has details on which files or
+folders the group has access to and with what role.
+
+This operation is performed by calling function `getGroupCollaborations`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-groups-id-collaborations/).
+
+
+```
+client.getListCollaborations().getGroupCollaborations(group.getId())
+```
+
+### Arguments
+
+- groupId `String`
+ - The ID of the group. Example: "57645"
+- queryParams `GetGroupCollaborationsQueryParams`
+ - Query parameters of getGroupCollaborations method
+- headers `GetGroupCollaborationsHeaders`
+ - Headers of getGroupCollaborations method
+
+
+### Returns
+
+This function returns a value of type `CollaborationsOffsetPaginated`.
+
+Returns a collection of collaboration objects. If there are no
+collaborations, an empty collection will be returned.
+
+
diff --git a/docs/memberships.md b/docs/memberships.md
new file mode 100644
index 000000000..39fd5df40
--- /dev/null
+++ b/docs/memberships.md
@@ -0,0 +1,210 @@
+# MembershipsManager
+
+
+- [List user's groups](#list-users-groups)
+- [List members of group](#list-members-of-group)
+- [Add user to group](#add-user-to-group)
+- [Get group membership](#get-group-membership)
+- [Update group membership](#update-group-membership)
+- [Remove user from group](#remove-user-from-group)
+
+## List user's groups
+
+Retrieves all the groups for a user. Only members of this
+group or users with admin-level permissions will be able to
+use this API.
+
+This operation is performed by calling function `getUserMemberships`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-users-id-memberships/).
+
+
+```
+client.getMemberships().getUserMemberships(user.getId())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- queryParams `GetUserMembershipsQueryParams`
+ - Query parameters of getUserMemberships method
+- headers `GetUserMembershipsHeaders`
+ - Headers of getUserMemberships method
+
+
+### Returns
+
+This function returns a value of type `GroupMemberships`.
+
+Returns a collection of membership objects. If there are no
+memberships, an empty collection will be returned.
+
+
+## List members of group
+
+Retrieves all the members for a group. Only members of this
+group or users with admin-level permissions will be able to
+use this API.
+
+This operation is performed by calling function `getGroupMemberships`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-groups-id-memberships/).
+
+
+```
+client.getMemberships().getGroupMemberships(group.getId())
+```
+
+### Arguments
+
+- groupId `String`
+ - The ID of the group. Example: "57645"
+- queryParams `GetGroupMembershipsQueryParams`
+ - Query parameters of getGroupMemberships method
+- headers `GetGroupMembershipsHeaders`
+ - Headers of getGroupMemberships method
+
+
+### Returns
+
+This function returns a value of type `GroupMemberships`.
+
+Returns a collection of membership objects. If there are no
+memberships, an empty collection will be returned.
+
+
+## Add user to group
+
+Creates a group membership. Only users with
+admin-level permissions will be able to use this API.
+
+This operation is performed by calling function `createGroupMembership`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-group-memberships/).
+
+
+```
+client.getMemberships().createGroupMembership(new CreateGroupMembershipRequestBody(new CreateGroupMembershipRequestBodyUserField(user.getId()), new CreateGroupMembershipRequestBodyGroupField(group.getId())))
+```
+
+### Arguments
+
+- requestBody `CreateGroupMembershipRequestBody`
+ - Request body of createGroupMembership method
+- queryParams `CreateGroupMembershipQueryParams`
+ - Query parameters of createGroupMembership method
+- headers `CreateGroupMembershipHeaders`
+ - Headers of createGroupMembership method
+
+
+### Returns
+
+This function returns a value of type `GroupMembership`.
+
+Returns a new group membership object.
+
+
+## Get group membership
+
+Retrieves a specific group membership. Only admins of this
+group or users with admin-level permissions will be able to
+use this API.
+
+This operation is performed by calling function `getGroupMembershipById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-group-memberships-id/).
+
+
+```
+client.getMemberships().getGroupMembershipById(groupMembership.getId())
+```
+
+### Arguments
+
+- groupMembershipId `String`
+ - The ID of the group membership. Example: "434534"
+- queryParams `GetGroupMembershipByIdQueryParams`
+ - Query parameters of getGroupMembershipById method
+- headers `GetGroupMembershipByIdHeaders`
+ - Headers of getGroupMembershipById method
+
+
+### Returns
+
+This function returns a value of type `GroupMembership`.
+
+Returns the group membership object.
+
+
+## Update group membership
+
+Updates a user's group membership. Only admins of this
+group or users with admin-level permissions will be able to
+use this API.
+
+This operation is performed by calling function `updateGroupMembershipById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-group-memberships-id/).
+
+
+```
+client.getMemberships().updateGroupMembershipById(groupMembership.getId(), new UpdateGroupMembershipByIdRequestBody.Builder().role(UpdateGroupMembershipByIdRequestBodyRoleField.ADMIN).build())
+```
+
+### Arguments
+
+- groupMembershipId `String`
+ - The ID of the group membership. Example: "434534"
+- requestBody `UpdateGroupMembershipByIdRequestBody`
+ - Request body of updateGroupMembershipById method
+- queryParams `UpdateGroupMembershipByIdQueryParams`
+ - Query parameters of updateGroupMembershipById method
+- headers `UpdateGroupMembershipByIdHeaders`
+ - Headers of updateGroupMembershipById method
+
+
+### Returns
+
+This function returns a value of type `GroupMembership`.
+
+Returns a new group membership object.
+
+
+## Remove user from group
+
+Deletes a specific group membership. Only admins of this
+group or users with admin-level permissions will be able to
+use this API.
+
+This operation is performed by calling function `deleteGroupMembershipById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-group-memberships-id/).
+
+
+```
+client.getMemberships().deleteGroupMembershipById(groupMembership.getId())
+```
+
+### Arguments
+
+- groupMembershipId `String`
+ - The ID of the group membership. Example: "434534"
+- headers `DeleteGroupMembershipByIdHeaders`
+ - Headers of deleteGroupMembershipById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the membership was
+successfully deleted.
+
+
diff --git a/docs/metadatacascadepolicies.md b/docs/metadatacascadepolicies.md
new file mode 100644
index 000000000..5542a8820
--- /dev/null
+++ b/docs/metadatacascadepolicies.md
@@ -0,0 +1,172 @@
+# MetadataCascadePoliciesManager
+
+
+- [List metadata cascade policies](#list-metadata-cascade-policies)
+- [Create metadata cascade policy](#create-metadata-cascade-policy)
+- [Get metadata cascade policy](#get-metadata-cascade-policy)
+- [Remove metadata cascade policy](#remove-metadata-cascade-policy)
+- [Force-apply metadata cascade policy to folder](#force-apply-metadata-cascade-policy-to-folder)
+
+## List metadata cascade policies
+
+Retrieves a list of all the metadata cascade policies
+that are applied to a given folder. This can not be used on the root
+folder with ID `0`.
+
+This operation is performed by calling function `getMetadataCascadePolicies`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-cascade-policies/).
+
+
+```
+client.getMetadataCascadePolicies().getMetadataCascadePolicies(new GetMetadataCascadePoliciesQueryParams(folder.getId()))
+```
+
+### Arguments
+
+- queryParams `GetMetadataCascadePoliciesQueryParams`
+ - Query parameters of getMetadataCascadePolicies method
+- headers `GetMetadataCascadePoliciesHeaders`
+ - Headers of getMetadataCascadePolicies method
+
+
+### Returns
+
+This function returns a value of type `MetadataCascadePolicies`.
+
+Returns a list of metadata cascade policies.
+
+
+## Create metadata cascade policy
+
+Creates a new metadata cascade policy that applies a given
+metadata template to a given folder and automatically
+cascades it down to any files within that folder.
+
+In order for the policy to be applied a metadata instance must first
+be applied to the folder the policy is to be applied to.
+
+This operation is performed by calling function `createMetadataCascadePolicy`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-cascade-policies/).
+
+
+```
+client.getMetadataCascadePolicies().createMetadataCascadePolicy(new CreateMetadataCascadePolicyRequestBody(folder.getId(), CreateMetadataCascadePolicyRequestBodyScopeField.ENTERPRISE, templateKey))
+```
+
+### Arguments
+
+- requestBody `CreateMetadataCascadePolicyRequestBody`
+ - Request body of createMetadataCascadePolicy method
+- headers `CreateMetadataCascadePolicyHeaders`
+ - Headers of createMetadataCascadePolicy method
+
+
+### Returns
+
+This function returns a value of type `MetadataCascadePolicy`.
+
+Returns a new of metadata cascade policy.
+
+
+## Get metadata cascade policy
+
+Retrieve a specific metadata cascade policy assigned to a folder.
+
+This operation is performed by calling function `getMetadataCascadePolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-cascade-policies-id/).
+
+
+```
+client.getMetadataCascadePolicies().getMetadataCascadePolicyById(cascadePolicyId)
+```
+
+### Arguments
+
+- metadataCascadePolicyId `String`
+ - The ID of the metadata cascade policy. Example: "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
+- headers `GetMetadataCascadePolicyByIdHeaders`
+ - Headers of getMetadataCascadePolicyById method
+
+
+### Returns
+
+This function returns a value of type `MetadataCascadePolicy`.
+
+Returns a metadata cascade policy.
+
+
+## Remove metadata cascade policy
+
+Deletes a metadata cascade policy.
+
+This operation is performed by calling function `deleteMetadataCascadePolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-metadata-cascade-policies-id/).
+
+
+```
+client.getMetadataCascadePolicies().deleteMetadataCascadePolicyById(cascadePolicyId)
+```
+
+### Arguments
+
+- metadataCascadePolicyId `String`
+ - The ID of the metadata cascade policy. Example: "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
+- headers `DeleteMetadataCascadePolicyByIdHeaders`
+ - Headers of deleteMetadataCascadePolicyById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the policy
+is successfully deleted.
+
+
+## Force-apply metadata cascade policy to folder
+
+Force the metadata on a folder with a metadata cascade policy to be applied to
+all of its children. This can be used after creating a new cascade policy to
+enforce the metadata to be cascaded down to all existing files within that
+folder.
+
+This operation is performed by calling function `applyMetadataCascadePolicy`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-cascade-policies-id-apply/).
+
+
+```
+client.getMetadataCascadePolicies().applyMetadataCascadePolicy(cascadePolicyId, new ApplyMetadataCascadePolicyRequestBody(ApplyMetadataCascadePolicyRequestBodyConflictResolutionField.OVERWRITE))
+```
+
+### Arguments
+
+- metadataCascadePolicyId `String`
+ - The ID of the cascade policy to force-apply. Example: "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
+- requestBody `ApplyMetadataCascadePolicyRequestBody`
+ - Request body of applyMetadataCascadePolicy method
+- headers `ApplyMetadataCascadePolicyHeaders`
+ - Headers of applyMetadataCascadePolicy method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the API call was successful. The metadata
+cascade operation will be performed asynchronously.
+
+The API call will return directly, before the cascade operation
+is complete. There is currently no API to check for the status of this
+operation.
+
+
diff --git a/docs/metadatataxonomies.md b/docs/metadatataxonomies.md
new file mode 100644
index 000000000..e9e23b048
--- /dev/null
+++ b/docs/metadatataxonomies.md
@@ -0,0 +1,519 @@
+# MetadataTaxonomiesManager
+
+
+- [Create metadata taxonomy](#create-metadata-taxonomy)
+- [Get metadata taxonomies for namespace](#get-metadata-taxonomies-for-namespace)
+- [Get metadata taxonomy by taxonomy key](#get-metadata-taxonomy-by-taxonomy-key)
+- [Update metadata taxonomy](#update-metadata-taxonomy)
+- [Remove metadata taxonomy](#remove-metadata-taxonomy)
+- [Create metadata taxonomy levels](#create-metadata-taxonomy-levels)
+- [Update metadata taxonomy level](#update-metadata-taxonomy-level)
+- [Add metadata taxonomy level](#add-metadata-taxonomy-level)
+- [Delete metadata taxonomy level](#delete-metadata-taxonomy-level)
+- [List metadata taxonomy nodes](#list-metadata-taxonomy-nodes)
+- [Create metadata taxonomy node](#create-metadata-taxonomy-node)
+- [Get metadata taxonomy node by ID](#get-metadata-taxonomy-node-by-id)
+- [Update metadata taxonomy node](#update-metadata-taxonomy-node)
+- [Remove metadata taxonomy node](#remove-metadata-taxonomy-node)
+- [List metadata template's options for taxonomy field](#list-metadata-templates-options-for-taxonomy-field)
+
+## Create metadata taxonomy
+
+Creates a new metadata taxonomy that can be used in
+metadata templates.
+
+This operation is performed by calling function `createMetadataTaxonomy`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-taxonomies/).
+
+
+```
+client.getMetadataTaxonomies().createMetadataTaxonomy(new CreateMetadataTaxonomyRequestBody.Builder(displayName, namespace).key(taxonomyKey).build())
+```
+
+### Arguments
+
+- requestBody `CreateMetadataTaxonomyRequestBody`
+ - Request body of createMetadataTaxonomy method
+- headers `CreateMetadataTaxonomyHeaders`
+ - Headers of createMetadataTaxonomy method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomy`.
+
+The schema representing the metadata taxonomy created.
+
+
+## Get metadata taxonomies for namespace
+
+Used to retrieve all metadata taxonomies in a namespace.
+
+This operation is performed by calling function `getMetadataTaxonomies`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-taxonomies-id/).
+
+
+```
+client.getMetadataTaxonomies().getMetadataTaxonomies(namespace)
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- queryParams `GetMetadataTaxonomiesQueryParams`
+ - Query parameters of getMetadataTaxonomies method
+- headers `GetMetadataTaxonomiesHeaders`
+ - Headers of getMetadataTaxonomies method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomies`.
+
+Returns all of the metadata taxonomies within a namespace
+and their corresponding schema.
+
+
+## Get metadata taxonomy by taxonomy key
+
+Used to retrieve a metadata taxonomy by taxonomy key.
+
+This operation is performed by calling function `getMetadataTaxonomyByKey`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-taxonomies-id-id/).
+
+
+```
+client.getMetadataTaxonomies().getMetadataTaxonomyByKey(namespace, taxonomyKey)
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- headers `GetMetadataTaxonomyByKeyHeaders`
+ - Headers of getMetadataTaxonomyByKey method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomy`.
+
+Returns the metadata taxonomy identified by the taxonomy key.
+
+
+## Update metadata taxonomy
+
+Updates an existing metadata taxonomy.
+
+This operation is performed by calling function `updateMetadataTaxonomy`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/patch-metadata-taxonomies-id-id/).
+
+
+```
+client.getMetadataTaxonomies().updateMetadataTaxonomy(namespace, taxonomyKey, new UpdateMetadataTaxonomyRequestBody(updatedDisplayName))
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- requestBody `UpdateMetadataTaxonomyRequestBody`
+ - Request body of updateMetadataTaxonomy method
+- headers `UpdateMetadataTaxonomyHeaders`
+ - Headers of updateMetadataTaxonomy method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomy`.
+
+The schema representing the updated metadata taxonomy.
+
+
+## Remove metadata taxonomy
+
+Delete a metadata taxonomy.
+This deletion is permanent and cannot be reverted.
+
+This operation is performed by calling function `deleteMetadataTaxonomy`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-metadata-taxonomies-id-id/).
+
+
+```
+client.getMetadataTaxonomies().deleteMetadataTaxonomy(namespace, taxonomyKey)
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- headers `DeleteMetadataTaxonomyHeaders`
+ - Headers of deleteMetadataTaxonomy method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the metadata taxonomy is successfully deleted.
+
+
+## Create metadata taxonomy levels
+
+Creates new metadata taxonomy levels.
+
+This operation is performed by calling function `createMetadataTaxonomyLevel`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-taxonomies-id-id-levels/).
+
+
+```
+client.getMetadataTaxonomies().createMetadataTaxonomyLevel(namespace, taxonomyKey, Arrays.asList(new MetadataTaxonomyLevel.Builder().displayName("Continent").description("Continent Level").build(), new MetadataTaxonomyLevel.Builder().displayName("Country").description("Country Level").build()))
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- requestBody `List`
+ - Request body of createMetadataTaxonomyLevel method
+- headers `CreateMetadataTaxonomyLevelHeaders`
+ - Headers of createMetadataTaxonomyLevel method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyLevels`.
+
+Returns an array of all taxonomy levels.
+
+
+## Update metadata taxonomy level
+
+Updates an existing metadata taxonomy level.
+
+This operation is performed by calling function `updateMetadataTaxonomyLevelById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/patch-metadata-taxonomies-id-id-levels-id/).
+
+
+```
+client.getMetadataTaxonomies().updateMetadataTaxonomyLevelById(namespace, taxonomyKey, 1L, new UpdateMetadataTaxonomyLevelByIdRequestBody.Builder("Continent UPDATED").description("Continent Level UPDATED").build())
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- levelIndex `long`
+ - The index of the metadata taxonomy level. Example: 1
+- requestBody `UpdateMetadataTaxonomyLevelByIdRequestBody`
+ - Request body of updateMetadataTaxonomyLevelById method
+- headers `UpdateMetadataTaxonomyLevelByIdHeaders`
+ - Headers of updateMetadataTaxonomyLevelById method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyLevel`.
+
+The updated taxonomy level.
+
+
+## Add metadata taxonomy level
+
+Creates a new metadata taxonomy level and appends it to the existing levels.
+If there are no levels defined yet, this will create the first level.
+
+This operation is performed by calling function `addMetadataTaxonomyLevel`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-taxonomies-id-id-levels:append/).
+
+
+```
+client.getMetadataTaxonomies().addMetadataTaxonomyLevel(namespace, taxonomyKey, new AddMetadataTaxonomyLevelRequestBody.Builder("Region").description("Region Description").build())
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- requestBody `AddMetadataTaxonomyLevelRequestBody`
+ - Request body of addMetadataTaxonomyLevel method
+- headers `AddMetadataTaxonomyLevelHeaders`
+ - Headers of addMetadataTaxonomyLevel method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyLevels`.
+
+Returns an array of all taxonomy levels.
+
+
+## Delete metadata taxonomy level
+
+Deletes the last level of the metadata taxonomy.
+
+This operation is performed by calling function `deleteMetadataTaxonomyLevel`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-taxonomies-id-id-levels:trim/).
+
+
+```
+client.getMetadataTaxonomies().deleteMetadataTaxonomyLevel(namespace, taxonomyKey)
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- headers `DeleteMetadataTaxonomyLevelHeaders`
+ - Headers of deleteMetadataTaxonomyLevel method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyLevels`.
+
+Returns an array of all taxonomy levels.
+
+
+## List metadata taxonomy nodes
+
+Used to retrieve metadata taxonomy nodes based on the parameters specified.
+Results are sorted in lexicographic order unless a `query` parameter is passed.
+With a `query` parameter specified, results are sorted in order of relevance.
+
+This operation is performed by calling function `getMetadataTaxonomyNodes`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-taxonomies-id-id-nodes/).
+
+
+```
+client.getMetadataTaxonomies().getMetadataTaxonomyNodes(namespace, taxonomyKey)
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- queryParams `GetMetadataTaxonomyNodesQueryParams`
+ - Query parameters of getMetadataTaxonomyNodes method
+- headers `GetMetadataTaxonomyNodesHeaders`
+ - Headers of getMetadataTaxonomyNodes method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyNodes`.
+
+Returns a list of the taxonomy nodes that match the specified parameters.
+
+
+## Create metadata taxonomy node
+
+Creates a new metadata taxonomy node.
+
+This operation is performed by calling function `createMetadataTaxonomyNode`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-taxonomies-id-id-nodes/).
+
+
+```
+client.getMetadataTaxonomies().createMetadataTaxonomyNode(namespace, taxonomyKey, new CreateMetadataTaxonomyNodeRequestBody("Europe", 1))
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- requestBody `CreateMetadataTaxonomyNodeRequestBody`
+ - Request body of createMetadataTaxonomyNode method
+- headers `CreateMetadataTaxonomyNodeHeaders`
+ - Headers of createMetadataTaxonomyNode method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyNode`.
+
+The schema representing the taxonomy node created.
+
+
+## Get metadata taxonomy node by ID
+
+Retrieves a metadata taxonomy node by its identifier.
+
+This operation is performed by calling function `getMetadataTaxonomyNodeById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-taxonomies-id-id-nodes-id/).
+
+
+```
+client.getMetadataTaxonomies().getMetadataTaxonomyNodeById(namespace, taxonomyKey, countryNode.getId())
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- nodeId `String`
+ - The identifier of the metadata taxonomy node. Example: "14d3d433-c77f-49c5-b146-9dea370f6e32"
+- headers `GetMetadataTaxonomyNodeByIdHeaders`
+ - Headers of getMetadataTaxonomyNodeById method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyNode`.
+
+Returns the metadata taxonomy node that matches the identifier.
+
+
+## Update metadata taxonomy node
+
+Updates an existing metadata taxonomy node.
+
+This operation is performed by calling function `updateMetadataTaxonomyNode`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/patch-metadata-taxonomies-id-id-nodes-id/).
+
+
+```
+client.getMetadataTaxonomies().updateMetadataTaxonomyNode(namespace, taxonomyKey, countryNode.getId(), new UpdateMetadataTaxonomyNodeRequestBody.Builder().displayName("Poland UPDATED").build())
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- nodeId `String`
+ - The identifier of the metadata taxonomy node. Example: "14d3d433-c77f-49c5-b146-9dea370f6e32"
+- requestBody `UpdateMetadataTaxonomyNodeRequestBody`
+ - Request body of updateMetadataTaxonomyNode method
+- headers `UpdateMetadataTaxonomyNodeHeaders`
+ - Headers of updateMetadataTaxonomyNode method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyNode`.
+
+The schema representing the updated taxonomy node.
+
+
+## Remove metadata taxonomy node
+
+Delete a metadata taxonomy node.
+This deletion is permanent and cannot be reverted.
+Only metadata taxonomy nodes without any children can be deleted.
+
+This operation is performed by calling function `deleteMetadataTaxonomyNode`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-metadata-taxonomies-id-id-nodes-id/).
+
+
+```
+client.getMetadataTaxonomies().deleteMetadataTaxonomyNode(namespace, taxonomyKey, countryNode.getId())
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- taxonomyKey `String`
+ - The key of the metadata taxonomy. Example: "geography"
+- nodeId `String`
+ - The identifier of the metadata taxonomy node. Example: "14d3d433-c77f-49c5-b146-9dea370f6e32"
+- headers `DeleteMetadataTaxonomyNodeHeaders`
+ - Headers of deleteMetadataTaxonomyNode method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the metadata taxonomy node is successfully deleted.
+
+
+## List metadata template's options for taxonomy field
+
+Used to retrieve metadata taxonomy nodes which are available for the taxonomy field based
+on its configuration and the parameters specified.
+Results are sorted in lexicographic order unless a `query` parameter is passed.
+With a `query` parameter specified, results are sorted in order of relevance.
+
+This operation is performed by calling function `getMetadataTemplateFieldOptions`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-templates-id-id-fields-id-options/).
+
+
+```
+client.getMetadataTaxonomies().getMetadataTemplateFieldOptions(namespace, metadataTemplateKey, fieldKey)
+```
+
+### Arguments
+
+- namespace `String`
+ - The namespace of the metadata taxonomy. Example: "enterprise_123456"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- fieldKey `String`
+ - The key of the metadata taxonomy field in the template. Example: "geography"
+- queryParams `GetMetadataTemplateFieldOptionsQueryParams`
+ - Query parameters of getMetadataTemplateFieldOptions method
+- headers `GetMetadataTemplateFieldOptionsHeaders`
+ - Headers of getMetadataTemplateFieldOptions method
+
+
+### Returns
+
+This function returns a value of type `MetadataTaxonomyNodes`.
+
+Returns a list of the taxonomy nodes that match the specified parameters.
+
+
diff --git a/docs/metadatatemplates.md b/docs/metadatatemplates.md
new file mode 100644
index 000000000..e56609056
--- /dev/null
+++ b/docs/metadatatemplates.md
@@ -0,0 +1,272 @@
+# MetadataTemplatesManager
+
+
+- [Find metadata template by instance ID](#find-metadata-template-by-instance-id)
+- [Get metadata template by name](#get-metadata-template-by-name)
+- [Update metadata template](#update-metadata-template)
+- [Remove metadata template](#remove-metadata-template)
+- [Get metadata template by ID](#get-metadata-template-by-id)
+- [List all global metadata templates](#list-all-global-metadata-templates)
+- [List all metadata templates for enterprise](#list-all-metadata-templates-for-enterprise)
+- [Create metadata template](#create-metadata-template)
+
+## Find metadata template by instance ID
+
+Finds a metadata template by searching for the ID of an instance of the
+template.
+
+This operation is performed by calling function `getMetadataTemplatesByInstanceId`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-templates/).
+
+
+```
+client.getMetadataTemplates().getMetadataTemplatesByInstanceId(new GetMetadataTemplatesByInstanceIdQueryParams(createdMetadataInstance.getId()))
+```
+
+### Arguments
+
+- queryParams `GetMetadataTemplatesByInstanceIdQueryParams`
+ - Query parameters of getMetadataTemplatesByInstanceId method
+- headers `GetMetadataTemplatesByInstanceIdHeaders`
+ - Headers of getMetadataTemplatesByInstanceId method
+
+
+### Returns
+
+This function returns a value of type `MetadataTemplates`.
+
+Returns a list containing the 1 metadata template that matches the
+instance ID.
+
+
+## Get metadata template by name
+
+Retrieves a metadata template by its `scope` and `templateKey` values.
+
+To find the `scope` and `templateKey` for a template, list all templates for
+an enterprise or globally, or list all templates applied to a file or folder.
+
+This operation is performed by calling function `getMetadataTemplate`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-templates-id-id-schema/).
+
+
+```
+client.getMetadataTemplates().getMetadataTemplate(GetMetadataTemplateScope.ENTERPRISE, template.getTemplateKey())
+```
+
+### Arguments
+
+- scope `GetMetadataTemplateScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- headers `GetMetadataTemplateHeaders`
+ - Headers of getMetadataTemplate method
+
+
+### Returns
+
+This function returns a value of type `MetadataTemplate`.
+
+Returns the metadata template matching the `scope`
+and `template` name.
+
+
+## Update metadata template
+
+Updates a metadata template.
+
+The metadata template can only be updated if the template
+already exists.
+
+The update is applied atomically. If any errors occur during the
+application of the operations, the metadata template will not be changed.
+
+This operation is performed by calling function `updateMetadataTemplate`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-metadata-templates-id-id-schema/).
+
+
+```
+client.getMetadataTemplates().updateMetadataTemplate(UpdateMetadataTemplateScope.ENTERPRISE, templateKey, Arrays.asList(new UpdateMetadataTemplateRequestBody.Builder(UpdateMetadataTemplateRequestBodyOpField.ADDFIELD).data(mapOf(entryOf("type", "string"), entryOf("displayName", "newFieldName"))).fieldKey("newfieldname").build()))
+```
+
+### Arguments
+
+- scope `UpdateMetadataTemplateScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- requestBody `List`
+ - Request body of updateMetadataTemplate method
+- headers `UpdateMetadataTemplateHeaders`
+ - Headers of updateMetadataTemplate method
+
+
+### Returns
+
+This function returns a value of type `MetadataTemplate`.
+
+Returns the updated metadata template, with the
+custom template data included.
+
+
+## Remove metadata template
+
+Delete a metadata template and its instances.
+This deletion is permanent and can not be reversed.
+
+This operation is performed by calling function `deleteMetadataTemplate`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-metadata-templates-id-id-schema/).
+
+
+```
+client.getMetadataTemplates().deleteMetadataTemplate(DeleteMetadataTemplateScope.ENTERPRISE, template.getTemplateKey())
+```
+
+### Arguments
+
+- scope `DeleteMetadataTemplateScope`
+ - The scope of the metadata template. Example: "global"
+- templateKey `String`
+ - The name of the metadata template. Example: "properties"
+- headers `DeleteMetadataTemplateHeaders`
+ - Headers of deleteMetadataTemplate method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the metadata
+template is successfully deleted.
+
+
+## Get metadata template by ID
+
+Retrieves a metadata template by its ID.
+
+This operation is performed by calling function `getMetadataTemplateById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-templates-id/).
+
+
+```
+client.getMetadataTemplates().getMetadataTemplateById(template.getId())
+```
+
+### Arguments
+
+- templateId `String`
+ - The ID of the template. Example: "f7a9891f"
+- headers `GetMetadataTemplateByIdHeaders`
+ - Headers of getMetadataTemplateById method
+
+
+### Returns
+
+This function returns a value of type `MetadataTemplate`.
+
+Returns the metadata template that matches the ID.
+
+
+## List all global metadata templates
+
+Used to retrieve all generic, global metadata templates available to all
+enterprises using Box.
+
+This operation is performed by calling function `getGlobalMetadataTemplates`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-templates-global/).
+
+
+```
+client.getMetadataTemplates().getGlobalMetadataTemplates()
+```
+
+### Arguments
+
+- queryParams `GetGlobalMetadataTemplatesQueryParams`
+ - Query parameters of getGlobalMetadataTemplates method
+- headers `GetGlobalMetadataTemplatesHeaders`
+ - Headers of getGlobalMetadataTemplates method
+
+
+### Returns
+
+This function returns a value of type `MetadataTemplates`.
+
+Returns all of the metadata templates available to all enterprises
+and their corresponding schema.
+
+
+## List all metadata templates for enterprise
+
+Used to retrieve all metadata templates created to be used specifically within
+the user's enterprise.
+
+This operation is performed by calling function `getEnterpriseMetadataTemplates`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-metadata-templates-enterprise/).
+
+
+```
+client.getMetadataTemplates().getEnterpriseMetadataTemplates()
+```
+
+### Arguments
+
+- queryParams `GetEnterpriseMetadataTemplatesQueryParams`
+ - Query parameters of getEnterpriseMetadataTemplates method
+- headers `GetEnterpriseMetadataTemplatesHeaders`
+ - Headers of getEnterpriseMetadataTemplates method
+
+
+### Returns
+
+This function returns a value of type `MetadataTemplates`.
+
+Returns all of the metadata templates within an enterprise
+and their corresponding schema.
+
+
+## Create metadata template
+
+Creates a new metadata template that can be applied to
+files and folders.
+
+This operation is performed by calling function `createMetadataTemplate`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-templates-schema/).
+
+
+```
+client.getMetadataTemplates().createMetadataTemplate(new CreateMetadataTemplateRequestBody.Builder("enterprise", templateKey).templateKey(templateKey).fields(Arrays.asList(new CreateMetadataTemplateRequestBodyFieldsField(CreateMetadataTemplateRequestBodyFieldsTypeField.STRING, "testName", "testName"), new CreateMetadataTemplateRequestBodyFieldsField(CreateMetadataTemplateRequestBodyFieldsTypeField.FLOAT, "age", "age"), new CreateMetadataTemplateRequestBodyFieldsField(CreateMetadataTemplateRequestBodyFieldsTypeField.DATE, "birthDate", "birthDate"), new CreateMetadataTemplateRequestBodyFieldsField.Builder(CreateMetadataTemplateRequestBodyFieldsTypeField.ENUM, "countryCode", "countryCode").options(Arrays.asList(new CreateMetadataTemplateRequestBodyFieldsOptionsField("US"), new CreateMetadataTemplateRequestBodyFieldsOptionsField("CA"))).build(), new CreateMetadataTemplateRequestBodyFieldsField.Builder(CreateMetadataTemplateRequestBodyFieldsTypeField.MULTISELECT, "sports", "sports").options(Arrays.asList(new CreateMetadataTemplateRequestBodyFieldsOptionsField("basketball"), new CreateMetadataTemplateRequestBodyFieldsOptionsField("football"), new CreateMetadataTemplateRequestBodyFieldsOptionsField("tennis"))).build())).build())
+```
+
+### Arguments
+
+- requestBody `CreateMetadataTemplateRequestBody`
+ - Request body of createMetadataTemplate method
+- headers `CreateMetadataTemplateHeaders`
+ - Headers of createMetadataTemplate method
+
+
+### Returns
+
+This function returns a value of type `MetadataTemplate`.
+
+The schema representing the metadata template created.
+
+
diff --git a/docs/notes.md b/docs/notes.md
new file mode 100644
index 000000000..ab1f42981
--- /dev/null
+++ b/docs/notes.md
@@ -0,0 +1,34 @@
+# NotesManager
+
+
+- [Convert content to Box Note](#convert-content-to-box-note)
+
+## Convert content to Box Note
+
+Creates a Box Note (`.boxnote` file) from supported source content. See the `content_format` field for supported formats.
+
+This operation is performed by calling function `createNoteConvertV2026R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2026.0/post-notes-convert/).
+
+
+```
+client.getNotes().createNoteConvertV2026R0(new NotesConvertRequestBodyV2026R0.Builder(markdownContent, new FolderReferenceV2026R0("0"), noteName).contentFormat(NotesConvertRequestBodyV2026R0ContentFormatField.MARKDOWN).build())
+```
+
+### Arguments
+
+- requestBody `NotesConvertRequestBodyV2026R0`
+ - Request body of createNoteConvertV2026R0 method
+- headers `CreateNoteConvertV2026R0Headers`
+ - Headers of createNoteConvertV2026R0 method
+
+
+### Returns
+
+This function returns a value of type `NotesConvertResponseV2026R0`.
+
+The note was created successfully.
+
+
diff --git a/docs/query.md b/docs/query.md
new file mode 100644
index 000000000..f5f73a3f4
--- /dev/null
+++ b/docs/query.md
@@ -0,0 +1,69 @@
+# QueryManager
+
+
+- [Query for Box items](#query-for-box-items)
+- [Create insights for Box items](#create-insights-for-box-items)
+
+## Query for Box items
+
+Runs a query to discover Box items using a logical predicate that can filter
+across item fields and metadata templates. Results can be sorted, paginated,
+and shaped to include additional item or metadata fields.
+
+This operation is performed by calling function `createQueryV2026R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2026.0/post-query/).
+
+
+```
+client.getQuery().createQueryV2026R0(new QueryRequestBodyV2026R0.Builder(new QueryRequestBodyV2026R0QueryField.Builder(predicate).params(mapOf(entryOf("name", "John"), entryOf("age", 50))).ancestors(Arrays.asList(new QueryAncestorReferenceV2026R0("0", "folder"))).build()).limit(10).fields(Arrays.asList("box:item:name", searchFrom)).build())
+```
+
+### Arguments
+
+- requestBody `QueryRequestBodyV2026R0`
+ - Request body of createQueryV2026R0 method
+- headers `CreateQueryV2026R0Headers`
+ - Headers of createQueryV2026R0 method
+
+
+### Returns
+
+This function returns a value of type `QueryResultsV2026R0`.
+
+Returns a paginated list of items matching the query.
+
+
+## Create insights for Box items
+
+Computes aggregated metrics over Box items matching a query predicate.
+Filters are applied first, followed by optional grouping, after which the
+requested metrics (such as `sum`, `avg`, `min`, `max`, and `count`) are
+computed for each resulting group or over the entire filtered dataset.
+
+This operation is performed by calling function `createQueryInsightV2026R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2026.0/post-query-insights/).
+
+
+```
+client.getQuery().createQueryInsightV2026R0(new QueryInsightsRequestBodyV2026R0(new QueryInsightsRequestBodyV2026R0QueryField.Builder(predicate).params(mapOf(entryOf("minAmount", 0))).ancestors(Arrays.asList(new QueryAncestorReferenceV2026R0("0", "folder"))).groupBy(Arrays.asList(new QueryInsightsGroupByV2026R0.Builder(String.join("", mdPrefix, ".category")).bucketLimit(5).build())).build(), metrics))
+```
+
+### Arguments
+
+- requestBody `QueryInsightsRequestBodyV2026R0`
+ - Request body of createQueryInsightV2026R0 method
+- headers `CreateQueryInsightV2026R0Headers`
+ - Headers of createQueryInsightV2026R0 method
+
+
+### Returns
+
+This function returns a value of type `QueryInsightsV2026R0`.
+
+Returns the computed insight entries.
+
+
diff --git a/docs/recentitems.md b/docs/recentitems.md
new file mode 100644
index 000000000..bb76f26a4
--- /dev/null
+++ b/docs/recentitems.md
@@ -0,0 +1,36 @@
+# RecentItemsManager
+
+
+- [List recently accessed items](#list-recently-accessed-items)
+
+## List recently accessed items
+
+Returns information about the recent items accessed
+by a user, either in the last 90 days or up to the last
+1000 items accessed.
+
+This operation is performed by calling function `getRecentItems`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-recent-items/).
+
+
+```
+client.getRecentItems().getRecentItems()
+```
+
+### Arguments
+
+- queryParams `GetRecentItemsQueryParams`
+ - Query parameters of getRecentItems method
+- headers `GetRecentItemsHeaders`
+ - Headers of getRecentItems method
+
+
+### Returns
+
+This function returns a value of type `RecentItems`.
+
+Returns a list recent items access by a user.
+
+
diff --git a/docs/retentionpolicies.md b/docs/retentionpolicies.md
new file mode 100644
index 000000000..e82f25545
--- /dev/null
+++ b/docs/retentionpolicies.md
@@ -0,0 +1,158 @@
+# RetentionPoliciesManager
+
+
+- [List retention policies](#list-retention-policies)
+- [Create retention policy](#create-retention-policy)
+- [Get retention policy](#get-retention-policy)
+- [Update retention policy](#update-retention-policy)
+- [Delete retention policy](#delete-retention-policy)
+
+## List retention policies
+
+Retrieves all of the retention policies for an enterprise.
+
+This operation is performed by calling function `getRetentionPolicies`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-retention-policies/).
+
+
+```
+client.getRetentionPolicies().getRetentionPolicies()
+```
+
+### Arguments
+
+- queryParams `GetRetentionPoliciesQueryParams`
+ - Query parameters of getRetentionPolicies method
+- headers `GetRetentionPoliciesHeaders`
+ - Headers of getRetentionPolicies method
+
+
+### Returns
+
+This function returns a value of type `RetentionPolicies`.
+
+Returns a list retention policies in the enterprise.
+
+
+## Create retention policy
+
+Creates a retention policy.
+
+This operation is performed by calling function `createRetentionPolicy`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-retention-policies/).
+
+
+```
+client.getRetentionPolicies().createRetentionPolicy(new CreateRetentionPolicyRequestBody.Builder(retentionPolicyName, CreateRetentionPolicyRequestBodyPolicyTypeField.FINITE, CreateRetentionPolicyRequestBodyDispositionActionField.REMOVE_RETENTION).description(retentionDescription).retentionLength("1").retentionType(CreateRetentionPolicyRequestBodyRetentionTypeField.MODIFIABLE).canOwnerExtendRetention(true).areOwnersNotified(true).build())
+```
+
+### Arguments
+
+- requestBody `CreateRetentionPolicyRequestBody`
+ - Request body of createRetentionPolicy method
+- headers `CreateRetentionPolicyHeaders`
+ - Headers of createRetentionPolicy method
+
+
+### Returns
+
+This function returns a value of type `RetentionPolicy`.
+
+Returns a new retention policy object.
+
+
+## Get retention policy
+
+Retrieves a retention policy.
+
+This operation is performed by calling function `getRetentionPolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-retention-policies-id/).
+
+
+```
+client.getRetentionPolicies().getRetentionPolicyById(retentionPolicy.getId())
+```
+
+### Arguments
+
+- retentionPolicyId `String`
+ - The ID of the retention policy. Example: "982312"
+- queryParams `GetRetentionPolicyByIdQueryParams`
+ - Query parameters of getRetentionPolicyById method
+- headers `GetRetentionPolicyByIdHeaders`
+ - Headers of getRetentionPolicyById method
+
+
+### Returns
+
+This function returns a value of type `RetentionPolicy`.
+
+Returns the retention policy object.
+
+
+## Update retention policy
+
+Updates a retention policy.
+
+This operation is performed by calling function `updateRetentionPolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-retention-policies-id/).
+
+
+```
+client.getRetentionPolicies().updateRetentionPolicyById(retentionPolicy.getId(), new UpdateRetentionPolicyByIdRequestBody.Builder().policyName(updatedRetentionPolicyName).build())
+```
+
+### Arguments
+
+- retentionPolicyId `String`
+ - The ID of the retention policy. Example: "982312"
+- requestBody `UpdateRetentionPolicyByIdRequestBody`
+ - Request body of updateRetentionPolicyById method
+- headers `UpdateRetentionPolicyByIdHeaders`
+ - Headers of updateRetentionPolicyById method
+
+
+### Returns
+
+This function returns a value of type `RetentionPolicy`.
+
+Returns the updated retention policy object.
+
+
+## Delete retention policy
+
+Permanently deletes a retention policy.
+
+This operation is performed by calling function `deleteRetentionPolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-retention-policies-id/).
+
+
+```
+client.getRetentionPolicies().deleteRetentionPolicyById(retentionPolicy.getId())
+```
+
+### Arguments
+
+- retentionPolicyId `String`
+ - The ID of the retention policy. Example: "982312"
+- headers `DeleteRetentionPolicyByIdHeaders`
+ - Headers of deleteRetentionPolicyById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the policy has been deleted.
+
+
diff --git a/docs/retentionpolicyassignments.md b/docs/retentionpolicyassignments.md
new file mode 100644
index 000000000..3ebfe1e50
--- /dev/null
+++ b/docs/retentionpolicyassignments.md
@@ -0,0 +1,165 @@
+# RetentionPolicyAssignmentsManager
+
+
+- [List retention policy assignments](#list-retention-policy-assignments)
+- [Assign retention policy](#assign-retention-policy)
+- [Get retention policy assignment](#get-retention-policy-assignment)
+- [Remove retention policy assignment](#remove-retention-policy-assignment)
+- [Get files under retention](#get-files-under-retention)
+
+## List retention policy assignments
+
+Returns a list of all retention policy assignments associated with a specified
+retention policy.
+
+This operation is performed by calling function `getRetentionPolicyAssignments`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-retention-policies-id-assignments/).
+
+
+```
+client.getRetentionPolicyAssignments().getRetentionPolicyAssignments(retentionPolicy.getId())
+```
+
+### Arguments
+
+- retentionPolicyId `String`
+ - The ID of the retention policy. Example: "982312"
+- queryParams `GetRetentionPolicyAssignmentsQueryParams`
+ - Query parameters of getRetentionPolicyAssignments method
+- headers `GetRetentionPolicyAssignmentsHeaders`
+ - Headers of getRetentionPolicyAssignments method
+
+
+### Returns
+
+This function returns a value of type `RetentionPolicyAssignments`.
+
+Returns a list of the retention policy assignments associated with the
+specified retention policy.
+
+
+## Assign retention policy
+
+Assigns a retention policy to an item.
+
+This operation is performed by calling function `createRetentionPolicyAssignment`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-retention-policy-assignments/).
+
+
+```
+client.getRetentionPolicyAssignments().createRetentionPolicyAssignment(new CreateRetentionPolicyAssignmentRequestBody(retentionPolicy.getId(), new CreateRetentionPolicyAssignmentRequestBodyAssignToField.Builder(CreateRetentionPolicyAssignmentRequestBodyAssignToTypeField.FOLDER).id(folder.getId()).build()))
+```
+
+### Arguments
+
+- requestBody `CreateRetentionPolicyAssignmentRequestBody`
+ - Request body of createRetentionPolicyAssignment method
+- headers `CreateRetentionPolicyAssignmentHeaders`
+ - Headers of createRetentionPolicyAssignment method
+
+
+### Returns
+
+This function returns a value of type `RetentionPolicyAssignment`.
+
+Returns a new retention policy assignment object.
+
+
+## Get retention policy assignment
+
+Retrieves a retention policy assignment.
+
+This operation is performed by calling function `getRetentionPolicyAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-retention-policy-assignments-id/).
+
+
+```
+client.getRetentionPolicyAssignments().getRetentionPolicyAssignmentById(retentionPolicyAssignment.getId())
+```
+
+### Arguments
+
+- retentionPolicyAssignmentId `String`
+ - The ID of the retention policy assignment. Example: "1233123"
+- queryParams `GetRetentionPolicyAssignmentByIdQueryParams`
+ - Query parameters of getRetentionPolicyAssignmentById method
+- headers `GetRetentionPolicyAssignmentByIdHeaders`
+ - Headers of getRetentionPolicyAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `RetentionPolicyAssignment`.
+
+Returns the retention policy assignment object.
+
+
+## Remove retention policy assignment
+
+Removes a retention policy assignment
+applied to content.
+
+This operation is performed by calling function `deleteRetentionPolicyAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-retention-policy-assignments-id/).
+
+
+```
+client.getRetentionPolicyAssignments().deleteRetentionPolicyAssignmentById(retentionPolicyAssignment.getId())
+```
+
+### Arguments
+
+- retentionPolicyAssignmentId `String`
+ - The ID of the retention policy assignment. Example: "1233123"
+- headers `DeleteRetentionPolicyAssignmentByIdHeaders`
+ - Headers of deleteRetentionPolicyAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the policy assignment
+is successfully deleted.
+
+
+## Get files under retention
+
+Returns a list of files under retention for a retention policy assignment.
+
+This operation is performed by calling function `getFilesUnderRetentionPolicyAssignment`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-retention-policy-assignments-id-files-under-retention/).
+
+
+```
+client.getRetentionPolicyAssignments().getFilesUnderRetentionPolicyAssignment(retentionPolicyAssignment.getId())
+```
+
+### Arguments
+
+- retentionPolicyAssignmentId `String`
+ - The ID of the retention policy assignment. Example: "1233123"
+- queryParams `GetFilesUnderRetentionPolicyAssignmentQueryParams`
+ - Query parameters of getFilesUnderRetentionPolicyAssignment method
+- headers `GetFilesUnderRetentionPolicyAssignmentHeaders`
+ - Headers of getFilesUnderRetentionPolicyAssignment method
+
+
+### Returns
+
+This function returns a value of type `FilesUnderRetention`.
+
+Returns a list of files under retention that are associated with the
+specified retention policy assignment.
+
+
diff --git a/docs/search.md b/docs/search.md
new file mode 100644
index 000000000..be7116fff
--- /dev/null
+++ b/docs/search.md
@@ -0,0 +1,71 @@
+# SearchManager
+
+
+- [Query files/folders by metadata](#query-files-folders-by-metadata)
+- [Search for content](#search-for-content)
+
+## Query files/folders by metadata
+
+Create a search using SQL-like syntax to return items that match specific
+metadata.
+
+By default, this endpoint returns only the most basic info about the items for
+which the query matches. To get additional fields for each item, including any
+of the metadata, use the `fields` attribute in the query.
+
+This operation is performed by calling function `searchByMetadataQuery`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-metadata-queries-execute-read/).
+
+
+```
+client.getSearch().searchByMetadataQuery(new MetadataQuery.Builder(searchFrom, "0").query("name = :name AND age < :age AND birthDate >= :birthDate AND countryCode = :countryCode AND sports = :sports").queryParams(mapOf(entryOf("name", "John"), entryOf("age", 50), entryOf("birthDate", "2001-01-01T02:20:10.120Z"), entryOf("countryCode", "US"), entryOf("sports", Arrays.asList("basketball", "tennis")))).build())
+```
+
+### Arguments
+
+- requestBody `MetadataQuery`
+ - Request body of searchByMetadataQuery method
+- headers `SearchByMetadataQueryHeaders`
+ - Headers of searchByMetadataQuery method
+
+
+### Returns
+
+This function returns a value of type `MetadataQueryResults`.
+
+Returns a list of files and folders that match this metadata query.
+
+
+## Search for content
+
+Searches for files, folders, web links, and shared files across the
+users content or across the entire enterprise.
+
+This operation is performed by calling function `searchForContent`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-search/).
+
+
+```
+client.getSearch().searchForContent(new SearchForContentQueryParams.Builder().ancestorFolderIds(Arrays.asList("0")).mdfilters(Arrays.asList(new MetadataFilter.Builder().scope(MetadataFilterScopeField.ENTERPRISE).templateKey(templateKey).filters(searchFilters).build())).build())
+```
+
+### Arguments
+
+- queryParams `SearchForContentQueryParams`
+ - Query parameters of searchForContent method
+- headers `SearchForContentHeaders`
+ - Headers of searchForContent method
+
+
+### Returns
+
+This function returns a value of type `SearchResultsResponse`.
+
+Returns a collection of search results. If there are no matching
+search results, the `entries` array will be empty.
+
+
diff --git a/docs/sessiontermination.md b/docs/sessiontermination.md
new file mode 100644
index 000000000..72f701acf
--- /dev/null
+++ b/docs/sessiontermination.md
@@ -0,0 +1,70 @@
+# SessionTerminationManager
+
+
+- [Create jobs to terminate users session](#create-jobs-to-terminate-users-session)
+- [Create jobs to terminate user group session](#create-jobs-to-terminate-user-group-session)
+
+## Create jobs to terminate users session
+
+Validates the roles and permissions of the user,
+and creates asynchronous jobs
+to terminate the user's sessions.
+Returns the status for the POST request.
+
+This operation is performed by calling function `terminateUsersSessions`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-users-terminate-sessions/).
+
+
+```
+client.getSessionTermination().terminateUsersSessions(new TerminateUsersSessionsRequestBody(Arrays.asList(getEnvVar("USER_ID")), Arrays.asList(user.getLogin())))
+```
+
+### Arguments
+
+- requestBody `TerminateUsersSessionsRequestBody`
+ - Request body of terminateUsersSessions method
+- headers `TerminateUsersSessionsHeaders`
+ - Headers of terminateUsersSessions method
+
+
+### Returns
+
+This function returns a value of type `SessionTerminationMessage`.
+
+Returns a message about the request status.
+
+
+## Create jobs to terminate user group session
+
+Validates the roles and permissions of the group,
+and creates asynchronous jobs
+to terminate the group's sessions.
+Returns the status for the POST request.
+
+This operation is performed by calling function `terminateGroupsSessions`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-groups-terminate-sessions/).
+
+
+```
+client.getSessionTermination().terminateGroupsSessions(new TerminateGroupsSessionsRequestBody(Arrays.asList(group.getId())))
+```
+
+### Arguments
+
+- requestBody `TerminateGroupsSessionsRequestBody`
+ - Request body of terminateGroupsSessions method
+- headers `TerminateGroupsSessionsHeaders`
+ - Headers of terminateGroupsSessions method
+
+
+### Returns
+
+This function returns a value of type `SessionTerminationMessage`.
+
+Returns a message about the request status.
+
+
diff --git a/docs/sharedlinksappitems.md b/docs/sharedlinksappitems.md
new file mode 100644
index 000000000..434a25ad7
--- /dev/null
+++ b/docs/sharedlinksappitems.md
@@ -0,0 +1,35 @@
+# SharedLinksAppItemsManager
+
+
+- [Find app item for shared link](#find-app-item-for-shared-link)
+
+## Find app item for shared link
+
+Returns the app item represented by a shared link.
+
+The link can originate from the current enterprise or another.
+
+This operation is performed by calling function `findAppItemForSharedLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shared-items--app-items/).
+
+
+```
+client.getSharedLinksAppItems().findAppItemForSharedLink(new FindAppItemForSharedLinkHeaders(String.join("", "shared_link=", appItemSharedLink)))
+```
+
+### Arguments
+
+- headers `FindAppItemForSharedLinkHeaders`
+ - Headers of findAppItemForSharedLink method
+
+
+### Returns
+
+This function returns a value of type `AppItem`.
+
+Returns a full app item resource if the shared link is valid and
+the user has access to it.
+
+
diff --git a/docs/sharedlinksfiles.md b/docs/sharedlinksfiles.md
new file mode 100644
index 000000000..2503d0c77
--- /dev/null
+++ b/docs/sharedlinksfiles.md
@@ -0,0 +1,181 @@
+# SharedLinksFilesManager
+
+
+- [Find file for shared link](#find-file-for-shared-link)
+- [Get shared link for file](#get-shared-link-for-file)
+- [Add shared link to file](#add-shared-link-to-file)
+- [Update shared link on file](#update-shared-link-on-file)
+- [Remove shared link from file](#remove-shared-link-from-file)
+
+## Find file for shared link
+
+Returns the file represented by a shared link.
+
+A shared file can be represented by a shared link,
+which can originate within the current enterprise or within another.
+
+This endpoint allows an application to retrieve information about a
+shared file when only given a shared link.
+
+The `shared_link_permission_options` array field can be returned
+by requesting it in the `fields` query parameter.
+
+This operation is performed by calling function `findFileForSharedLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shared-items/).
+
+
+```
+userClient.getSharedLinksFiles().findFileForSharedLink(new FindFileForSharedLinkQueryParams(), new FindFileForSharedLinkHeaders(String.join("", "shared_link=", fileFromApi.getSharedLink().getUrl(), "&shared_link_password=Secret123@")))
+```
+
+### Arguments
+
+- queryParams `FindFileForSharedLinkQueryParams`
+ - Query parameters of findFileForSharedLink method
+- headers `FindFileForSharedLinkHeaders`
+ - Headers of findFileForSharedLink method
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+Returns a full file resource if the shared link is valid and
+the user has access to it.
+
+
+## Get shared link for file
+
+Gets the information for a shared link on a file.
+
+This operation is performed by calling function `getSharedLinkForFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id--get-shared-link/).
+
+
+```
+client.getSharedLinksFiles().getSharedLinkForFile(fileId, new GetSharedLinkForFileQueryParams("shared_link"))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetSharedLinkForFileQueryParams`
+ - Query parameters of getSharedLinkForFile method
+- headers `GetSharedLinkForFileHeaders`
+ - Headers of getSharedLinkForFile method
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+Returns the base representation of a file with the
+additional shared link information.
+
+
+## Add shared link to file
+
+Adds a shared link to a file.
+
+This operation is performed by calling function `addShareLinkToFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id--add-shared-link/).
+
+
+```
+client.getSharedLinksFiles().addShareLinkToFile(fileId, new AddShareLinkToFileRequestBody.Builder().sharedLink(new AddShareLinkToFileRequestBodySharedLinkField.Builder().access(AddShareLinkToFileRequestBodySharedLinkAccessField.OPEN).password("Secret123@").build()).build(), new AddShareLinkToFileQueryParams("shared_link"))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `AddShareLinkToFileRequestBody`
+ - Request body of addShareLinkToFile method
+- queryParams `AddShareLinkToFileQueryParams`
+ - Query parameters of addShareLinkToFile method
+- headers `AddShareLinkToFileHeaders`
+ - Headers of addShareLinkToFile method
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+Returns the base representation of a file with a new shared
+link attached.
+
+
+## Update shared link on file
+
+Updates a shared link on a file.
+
+This operation is performed by calling function `updateSharedLinkOnFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id--update-shared-link/).
+
+
+```
+client.getSharedLinksFiles().updateSharedLinkOnFile(fileId, new UpdateSharedLinkOnFileRequestBody.Builder().sharedLink(new UpdateSharedLinkOnFileRequestBodySharedLinkField.Builder().access(UpdateSharedLinkOnFileRequestBodySharedLinkAccessField.COLLABORATORS).build()).build(), new UpdateSharedLinkOnFileQueryParams("shared_link"))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `UpdateSharedLinkOnFileRequestBody`
+ - Request body of updateSharedLinkOnFile method
+- queryParams `UpdateSharedLinkOnFileQueryParams`
+ - Query parameters of updateSharedLinkOnFile method
+- headers `UpdateSharedLinkOnFileHeaders`
+ - Headers of updateSharedLinkOnFile method
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+Returns a basic representation of the file, with the updated shared
+link attached.
+
+
+## Remove shared link from file
+
+Removes a shared link from a file.
+
+This operation is performed by calling function `removeSharedLinkFromFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id--remove-shared-link/).
+
+
+```
+client.getSharedLinksFiles().removeSharedLinkFromFile(fileId, new RemoveSharedLinkFromFileRequestBody.Builder().sharedLink(null).build(), new RemoveSharedLinkFromFileQueryParams("shared_link"))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `RemoveSharedLinkFromFileRequestBody`
+ - Request body of removeSharedLinkFromFile method
+- queryParams `RemoveSharedLinkFromFileQueryParams`
+ - Query parameters of removeSharedLinkFromFile method
+- headers `RemoveSharedLinkFromFileHeaders`
+ - Headers of removeSharedLinkFromFile method
+
+
+### Returns
+
+This function returns a value of type `FileFull`.
+
+Returns a basic representation of a file, with the shared link removed.
+
+
diff --git a/docs/sharedlinksfolders.md b/docs/sharedlinksfolders.md
new file mode 100644
index 000000000..7119c05ec
--- /dev/null
+++ b/docs/sharedlinksfolders.md
@@ -0,0 +1,178 @@
+# SharedLinksFoldersManager
+
+
+- [Find folder for shared link](#find-folder-for-shared-link)
+- [Get shared link for folder](#get-shared-link-for-folder)
+- [Add shared link to folder](#add-shared-link-to-folder)
+- [Update shared link on folder](#update-shared-link-on-folder)
+- [Remove shared link from folder](#remove-shared-link-from-folder)
+
+## Find folder for shared link
+
+Return the folder represented by a shared link.
+
+A shared folder can be represented by a shared link,
+which can originate within the current enterprise or within another.
+
+This endpoint allows an application to retrieve information about a
+shared folder when only given a shared link.
+
+This operation is performed by calling function `findFolderForSharedLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shared-items--folders/).
+
+
+```
+userClient.getSharedLinksFolders().findFolderForSharedLink(new FindFolderForSharedLinkQueryParams(), new FindFolderForSharedLinkHeaders(String.join("", "shared_link=", folderFromApi.getSharedLink().getUrl(), "&shared_link_password=Secret123@")))
+```
+
+### Arguments
+
+- queryParams `FindFolderForSharedLinkQueryParams`
+ - Query parameters of findFolderForSharedLink method
+- headers `FindFolderForSharedLinkHeaders`
+ - Headers of findFolderForSharedLink method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns a full folder resource if the shared link is valid and
+the user has access to it.
+
+
+## Get shared link for folder
+
+Gets the information for a shared link on a folder.
+
+This operation is performed by calling function `getSharedLinkForFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id--get-shared-link/).
+
+
+```
+client.getSharedLinksFolders().getSharedLinkForFolder(folder.getId(), new GetSharedLinkForFolderQueryParams("shared_link"))
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- queryParams `GetSharedLinkForFolderQueryParams`
+ - Query parameters of getSharedLinkForFolder method
+- headers `GetSharedLinkForFolderHeaders`
+ - Headers of getSharedLinkForFolder method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns the base representation of a folder with the
+additional shared link information.
+
+
+## Add shared link to folder
+
+Adds a shared link to a folder.
+
+This operation is performed by calling function `addShareLinkToFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-folders-id--add-shared-link/).
+
+
+```
+client.getSharedLinksFolders().addShareLinkToFolder(folder.getId(), new AddShareLinkToFolderRequestBody.Builder().sharedLink(new AddShareLinkToFolderRequestBodySharedLinkField.Builder().access(AddShareLinkToFolderRequestBodySharedLinkAccessField.OPEN).password("Secret123@").build()).build(), new AddShareLinkToFolderQueryParams("shared_link"))
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- requestBody `AddShareLinkToFolderRequestBody`
+ - Request body of addShareLinkToFolder method
+- queryParams `AddShareLinkToFolderQueryParams`
+ - Query parameters of addShareLinkToFolder method
+- headers `AddShareLinkToFolderHeaders`
+ - Headers of addShareLinkToFolder method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns the base representation of a folder with a new shared
+link attached.
+
+
+## Update shared link on folder
+
+Updates a shared link on a folder.
+
+This operation is performed by calling function `updateSharedLinkOnFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-folders-id--update-shared-link/).
+
+
+```
+client.getSharedLinksFolders().updateSharedLinkOnFolder(folder.getId(), new UpdateSharedLinkOnFolderRequestBody.Builder().sharedLink(new UpdateSharedLinkOnFolderRequestBodySharedLinkField.Builder().access(UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField.COLLABORATORS).build()).build(), new UpdateSharedLinkOnFolderQueryParams("shared_link"))
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- requestBody `UpdateSharedLinkOnFolderRequestBody`
+ - Request body of updateSharedLinkOnFolder method
+- queryParams `UpdateSharedLinkOnFolderQueryParams`
+ - Query parameters of updateSharedLinkOnFolder method
+- headers `UpdateSharedLinkOnFolderHeaders`
+ - Headers of updateSharedLinkOnFolder method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns a basic representation of the folder, with the updated shared
+link attached.
+
+
+## Remove shared link from folder
+
+Removes a shared link from a folder.
+
+This operation is performed by calling function `removeSharedLinkFromFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-folders-id--remove-shared-link/).
+
+
+```
+client.getSharedLinksFolders().removeSharedLinkFromFolder(folder.getId(), new RemoveSharedLinkFromFolderRequestBody.Builder().sharedLink(null).build(), new RemoveSharedLinkFromFolderQueryParams("shared_link"))
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- requestBody `RemoveSharedLinkFromFolderRequestBody`
+ - Request body of removeSharedLinkFromFolder method
+- queryParams `RemoveSharedLinkFromFolderQueryParams`
+ - Query parameters of removeSharedLinkFromFolder method
+- headers `RemoveSharedLinkFromFolderHeaders`
+ - Headers of removeSharedLinkFromFolder method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns a basic representation of a folder, with the shared link removed.
+
+
diff --git a/docs/sharedlinksweblinks.md b/docs/sharedlinksweblinks.md
new file mode 100644
index 000000000..e192a73fb
--- /dev/null
+++ b/docs/sharedlinksweblinks.md
@@ -0,0 +1,179 @@
+# SharedLinksWebLinksManager
+
+
+- [Find web link for shared link](#find-web-link-for-shared-link)
+- [Get shared link for web link](#get-shared-link-for-web-link)
+- [Add shared link to web link](#add-shared-link-to-web-link)
+- [Update shared link on web link](#update-shared-link-on-web-link)
+- [Remove shared link from web link](#remove-shared-link-from-web-link)
+
+## Find web link for shared link
+
+Returns the web link represented by a shared link.
+
+A shared web link can be represented by a shared link,
+which can originate within the current enterprise or within another.
+
+This endpoint allows an application to retrieve information about a
+shared web link when only given a shared link.
+
+This operation is performed by calling function `findWebLinkForSharedLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shared-items--web-links/).
+
+
+```
+userClient.getSharedLinksWebLinks().findWebLinkForSharedLink(new FindWebLinkForSharedLinkQueryParams(), new FindWebLinkForSharedLinkHeaders(String.join("", "shared_link=", webLinkFromApi.getSharedLink().getUrl(), "&shared_link_password=Secret123@")))
+```
+
+### Arguments
+
+- queryParams `FindWebLinkForSharedLinkQueryParams`
+ - Query parameters of findWebLinkForSharedLink method
+- headers `FindWebLinkForSharedLinkHeaders`
+ - Headers of findWebLinkForSharedLink method
+
+
+### Returns
+
+This function returns a value of type `WebLink`.
+
+Returns a full web link resource if the shared link is valid and
+the user has access to it.
+
+
+## Get shared link for web link
+
+Gets the information for a shared link on a web link.
+
+This operation is performed by calling function `getSharedLinkForWebLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-web-links-id--get-shared-link/).
+
+
+```
+client.getSharedLinksWebLinks().getSharedLinkForWebLink(webLinkId, new GetSharedLinkForWebLinkQueryParams("shared_link"))
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- queryParams `GetSharedLinkForWebLinkQueryParams`
+ - Query parameters of getSharedLinkForWebLink method
+- headers `GetSharedLinkForWebLinkHeaders`
+ - Headers of getSharedLinkForWebLink method
+
+
+### Returns
+
+This function returns a value of type `WebLink`.
+
+Returns the base representation of a web link with the
+additional shared link information.
+
+
+## Add shared link to web link
+
+Adds a shared link to a web link.
+
+This operation is performed by calling function `addShareLinkToWebLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-web-links-id--add-shared-link/).
+
+
+```
+client.getSharedLinksWebLinks().addShareLinkToWebLink(webLinkId, new AddShareLinkToWebLinkRequestBody.Builder().sharedLink(new AddShareLinkToWebLinkRequestBodySharedLinkField.Builder().access(AddShareLinkToWebLinkRequestBodySharedLinkAccessField.OPEN).password("Secret123@").build()).build(), new AddShareLinkToWebLinkQueryParams("shared_link"))
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- requestBody `AddShareLinkToWebLinkRequestBody`
+ - Request body of addShareLinkToWebLink method
+- queryParams `AddShareLinkToWebLinkQueryParams`
+ - Query parameters of addShareLinkToWebLink method
+- headers `AddShareLinkToWebLinkHeaders`
+ - Headers of addShareLinkToWebLink method
+
+
+### Returns
+
+This function returns a value of type `WebLink`.
+
+Returns the base representation of a web link with a new shared
+link attached.
+
+
+## Update shared link on web link
+
+Updates a shared link on a web link.
+
+This operation is performed by calling function `updateSharedLinkOnWebLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-web-links-id--update-shared-link/).
+
+
+```
+client.getSharedLinksWebLinks().updateSharedLinkOnWebLink(webLinkId, new UpdateSharedLinkOnWebLinkRequestBody.Builder().sharedLink(new UpdateSharedLinkOnWebLinkRequestBodySharedLinkField.Builder().access(UpdateSharedLinkOnWebLinkRequestBodySharedLinkAccessField.COLLABORATORS).build()).build(), new UpdateSharedLinkOnWebLinkQueryParams("shared_link"))
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- requestBody `UpdateSharedLinkOnWebLinkRequestBody`
+ - Request body of updateSharedLinkOnWebLink method
+- queryParams `UpdateSharedLinkOnWebLinkQueryParams`
+ - Query parameters of updateSharedLinkOnWebLink method
+- headers `UpdateSharedLinkOnWebLinkHeaders`
+ - Headers of updateSharedLinkOnWebLink method
+
+
+### Returns
+
+This function returns a value of type `WebLink`.
+
+Returns a basic representation of the web link, with the updated shared
+link attached.
+
+
+## Remove shared link from web link
+
+Removes a shared link from a web link.
+
+This operation is performed by calling function `removeSharedLinkFromWebLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-web-links-id--remove-shared-link/).
+
+
+```
+client.getSharedLinksWebLinks().removeSharedLinkFromWebLink(webLinkId, new RemoveSharedLinkFromWebLinkRequestBody.Builder().sharedLink(null).build(), new RemoveSharedLinkFromWebLinkQueryParams("shared_link"))
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- requestBody `RemoveSharedLinkFromWebLinkRequestBody`
+ - Request body of removeSharedLinkFromWebLink method
+- queryParams `RemoveSharedLinkFromWebLinkQueryParams`
+ - Query parameters of removeSharedLinkFromWebLink method
+- headers `RemoveSharedLinkFromWebLinkHeaders`
+ - Headers of removeSharedLinkFromWebLink method
+
+
+### Returns
+
+This function returns a value of type `WebLink`.
+
+Returns a basic representation of a web link, with the
+shared link removed.
+
+
diff --git a/docs/shieldinformationbarrierreports.md b/docs/shieldinformationbarrierreports.md
new file mode 100644
index 000000000..542409705
--- /dev/null
+++ b/docs/shieldinformationbarrierreports.md
@@ -0,0 +1,94 @@
+# ShieldInformationBarrierReportsManager
+
+
+- [List shield information barrier reports](#list-shield-information-barrier-reports)
+- [Create shield information barrier report](#create-shield-information-barrier-report)
+- [Get shield information barrier report by ID](#get-shield-information-barrier-report-by-id)
+
+## List shield information barrier reports
+
+Lists shield information barrier reports.
+
+This operation is performed by calling function `getShieldInformationBarrierReports`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barrier-reports/).
+
+
+```
+client.getShieldInformationBarrierReports().getShieldInformationBarrierReports(new GetShieldInformationBarrierReportsQueryParams(barrierId))
+```
+
+### Arguments
+
+- queryParams `GetShieldInformationBarrierReportsQueryParams`
+ - Query parameters of getShieldInformationBarrierReports method
+- headers `GetShieldInformationBarrierReportsHeaders`
+ - Headers of getShieldInformationBarrierReports method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierReports`.
+
+Returns a paginated list of shield information barrier report objects.
+
+
+## Create shield information barrier report
+
+Creates a shield information barrier report for a given barrier.
+
+This operation is performed by calling function `createShieldInformationBarrierReport`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-shield-information-barrier-reports/).
+
+
+```
+client.getShieldInformationBarrierReports().createShieldInformationBarrierReport(new ShieldInformationBarrierReference.Builder().shieldInformationBarrier(new ShieldInformationBarrierBase.Builder().id(barrierId).type(ShieldInformationBarrierBaseTypeField.SHIELD_INFORMATION_BARRIER).build()).build())
+```
+
+### Arguments
+
+- requestBody `ShieldInformationBarrierReference`
+ - Request body of createShieldInformationBarrierReport method
+- headers `CreateShieldInformationBarrierReportHeaders`
+ - Headers of createShieldInformationBarrierReport method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierReport`.
+
+Returns the shield information barrier report information object.
+
+
+## Get shield information barrier report by ID
+
+Retrieves a shield information barrier report by its ID.
+
+This operation is performed by calling function `getShieldInformationBarrierReportById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barrier-reports-id/).
+
+
+```
+client.getShieldInformationBarrierReports().getShieldInformationBarrierReportById(createdReport.getId())
+```
+
+### Arguments
+
+- shieldInformationBarrierReportId `String`
+ - The ID of the shield information barrier Report. Example: "3423"
+- headers `GetShieldInformationBarrierReportByIdHeaders`
+ - Headers of getShieldInformationBarrierReportById method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierReport`.
+
+Returns the shield information barrier report object.
+
+
diff --git a/docs/shieldinformationbarriers.md b/docs/shieldinformationbarriers.md
new file mode 100644
index 000000000..fe561fbb7
--- /dev/null
+++ b/docs/shieldinformationbarriers.md
@@ -0,0 +1,129 @@
+# ShieldInformationBarriersManager
+
+
+- [Get shield information barrier with specified ID](#get-shield-information-barrier-with-specified-id)
+- [Add changed status of shield information barrier with specified ID](#add-changed-status-of-shield-information-barrier-with-specified-id)
+- [List shield information barriers](#list-shield-information-barriers)
+- [Create shield information barrier](#create-shield-information-barrier)
+
+## Get shield information barrier with specified ID
+
+Get shield information barrier based on provided ID.
+
+This operation is performed by calling function `getShieldInformationBarrierById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barriers-id/).
+
+
+```
+client.getShieldInformationBarriers().getShieldInformationBarrierById(barrierId)
+```
+
+### Arguments
+
+- shieldInformationBarrierId `String`
+ - The ID of the shield information barrier. Example: "1910967"
+- headers `GetShieldInformationBarrierByIdHeaders`
+ - Headers of getShieldInformationBarrierById method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrier`.
+
+Returns the shield information barrier object.
+
+
+## Add changed status of shield information barrier with specified ID
+
+Change status of shield information barrier with the specified ID.
+
+This operation is performed by calling function `updateShieldInformationBarrierStatus`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-shield-information-barriers-change-status/).
+
+
+```
+client.getShieldInformationBarriers().updateShieldInformationBarrierStatus(new UpdateShieldInformationBarrierStatusRequestBody(barrierId, UpdateShieldInformationBarrierStatusRequestBodyStatusField.DISABLED))
+```
+
+### Arguments
+
+- requestBody `UpdateShieldInformationBarrierStatusRequestBody`
+ - Request body of updateShieldInformationBarrierStatus method
+- headers `UpdateShieldInformationBarrierStatusHeaders`
+ - Headers of updateShieldInformationBarrierStatus method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrier`.
+
+Returns the updated shield information barrier object.
+
+
+## List shield information barriers
+
+Retrieves a list of shield information barrier objects
+for the enterprise of JWT.
+
+This operation is performed by calling function `getShieldInformationBarriers`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barriers/).
+
+
+```
+client.getShieldInformationBarriers().getShieldInformationBarriers()
+```
+
+### Arguments
+
+- queryParams `GetShieldInformationBarriersQueryParams`
+ - Query parameters of getShieldInformationBarriers method
+- headers `GetShieldInformationBarriersHeaders`
+ - Headers of getShieldInformationBarriers method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarriers`.
+
+Returns a paginated list of
+shield information barrier objects,
+empty list if currently no barrier.
+
+
+## Create shield information barrier
+
+Creates a shield information barrier to
+separate individuals/groups within the same
+firm and prevents confidential information passing between them.
+
+This operation is performed by calling function `createShieldInformationBarrier`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-shield-information-barriers/).
+
+
+```
+client.getShieldInformationBarriers().createShieldInformationBarrier(new CreateShieldInformationBarrierRequestBody(new EnterpriseBase.Builder().id(enterpriseId).build()))
+```
+
+### Arguments
+
+- requestBody `CreateShieldInformationBarrierRequestBody`
+ - Request body of createShieldInformationBarrier method
+- headers `CreateShieldInformationBarrierHeaders`
+ - Headers of createShieldInformationBarrier method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrier`.
+
+Returns a new shield information barrier object.
+
+
diff --git a/docs/shieldinformationbarriersegmentmembers.md b/docs/shieldinformationbarriersegmentmembers.md
new file mode 100644
index 000000000..5ff9dd6c9
--- /dev/null
+++ b/docs/shieldinformationbarriersegmentmembers.md
@@ -0,0 +1,129 @@
+# ShieldInformationBarrierSegmentMembersManager
+
+
+- [Get shield information barrier segment member by ID](#get-shield-information-barrier-segment-member-by-id)
+- [Delete shield information barrier segment member by ID](#delete-shield-information-barrier-segment-member-by-id)
+- [List shield information barrier segment members](#list-shield-information-barrier-segment-members)
+- [Create shield information barrier segment member](#create-shield-information-barrier-segment-member)
+
+## Get shield information barrier segment member by ID
+
+Retrieves a shield information barrier
+segment member by its ID.
+
+This operation is performed by calling function `getShieldInformationBarrierSegmentMemberById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barrier-segment-members-id/).
+
+
+```
+client.getShieldInformationBarrierSegmentMembers().getShieldInformationBarrierSegmentMemberById(segmentMember.getId())
+```
+
+### Arguments
+
+- shieldInformationBarrierSegmentMemberId `String`
+ - The ID of the shield information barrier segment Member. Example: "7815"
+- headers `GetShieldInformationBarrierSegmentMemberByIdHeaders`
+ - Headers of getShieldInformationBarrierSegmentMemberById method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegmentMember`.
+
+Returns the shield information barrier segment member object.
+
+
+## Delete shield information barrier segment member by ID
+
+Deletes a shield information barrier
+segment member based on provided ID.
+
+This operation is performed by calling function `deleteShieldInformationBarrierSegmentMemberById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-shield-information-barrier-segment-members-id/).
+
+
+```
+client.getShieldInformationBarrierSegmentMembers().deleteShieldInformationBarrierSegmentMemberById(segmentMember.getId())
+```
+
+### Arguments
+
+- shieldInformationBarrierSegmentMemberId `String`
+ - The ID of the shield information barrier segment Member. Example: "7815"
+- headers `DeleteShieldInformationBarrierSegmentMemberByIdHeaders`
+ - Headers of deleteShieldInformationBarrierSegmentMemberById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response if the
+segment member was deleted successfully.
+
+
+## List shield information barrier segment members
+
+Lists shield information barrier segment members
+based on provided segment IDs.
+
+This operation is performed by calling function `getShieldInformationBarrierSegmentMembers`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barrier-segment-members/).
+
+
+```
+client.getShieldInformationBarrierSegmentMembers().getShieldInformationBarrierSegmentMembers(new GetShieldInformationBarrierSegmentMembersQueryParams(segment.getId()))
+```
+
+### Arguments
+
+- queryParams `GetShieldInformationBarrierSegmentMembersQueryParams`
+ - Query parameters of getShieldInformationBarrierSegmentMembers method
+- headers `GetShieldInformationBarrierSegmentMembersHeaders`
+ - Headers of getShieldInformationBarrierSegmentMembers method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegmentMembers`.
+
+Returns a paginated list of
+shield information barrier segment member objects.
+
+
+## Create shield information barrier segment member
+
+Creates a new shield information barrier segment member.
+
+This operation is performed by calling function `createShieldInformationBarrierSegmentMember`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-shield-information-barrier-segment-members/).
+
+
+```
+client.getShieldInformationBarrierSegmentMembers().createShieldInformationBarrierSegmentMember(new CreateShieldInformationBarrierSegmentMemberRequestBody(new CreateShieldInformationBarrierSegmentMemberRequestBodyShieldInformationBarrierSegmentField.Builder().id(segment.getId()).type(CreateShieldInformationBarrierSegmentMemberRequestBodyShieldInformationBarrierSegmentTypeField.SHIELD_INFORMATION_BARRIER_SEGMENT).build(), new UserBase(getEnvVar("USER_ID"))))
+```
+
+### Arguments
+
+- requestBody `CreateShieldInformationBarrierSegmentMemberRequestBody`
+ - Request body of createShieldInformationBarrierSegmentMember method
+- headers `CreateShieldInformationBarrierSegmentMemberHeaders`
+ - Headers of createShieldInformationBarrierSegmentMember method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegmentMember`.
+
+Returns a new shield information barrier segment member object.
+
+
diff --git a/docs/shieldinformationbarriersegmentrestrictions.md b/docs/shieldinformationbarriersegmentrestrictions.md
new file mode 100644
index 000000000..ab9fbb2bc
--- /dev/null
+++ b/docs/shieldinformationbarriersegmentrestrictions.md
@@ -0,0 +1,131 @@
+# ShieldInformationBarrierSegmentRestrictionsManager
+
+
+- [Get shield information barrier segment restriction by ID](#get-shield-information-barrier-segment-restriction-by-id)
+- [Delete shield information barrier segment restriction by ID](#delete-shield-information-barrier-segment-restriction-by-id)
+- [List shield information barrier segment restrictions](#list-shield-information-barrier-segment-restrictions)
+- [Create shield information barrier segment restriction](#create-shield-information-barrier-segment-restriction)
+
+## Get shield information barrier segment restriction by ID
+
+Retrieves a shield information barrier segment
+restriction based on provided ID.
+
+This operation is performed by calling function `getShieldInformationBarrierSegmentRestrictionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barrier-segment-restrictions-id/).
+
+
+```
+client.getShieldInformationBarrierSegmentRestrictions().getShieldInformationBarrierSegmentRestrictionById(segmentRestrictionId)
+```
+
+### Arguments
+
+- shieldInformationBarrierSegmentRestrictionId `String`
+ - The ID of the shield information barrier segment Restriction. Example: "4563"
+- headers `GetShieldInformationBarrierSegmentRestrictionByIdHeaders`
+ - Headers of getShieldInformationBarrierSegmentRestrictionById method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegmentRestriction`.
+
+Returns the shield information barrier segment
+restriction object.
+
+
+## Delete shield information barrier segment restriction by ID
+
+Delete shield information barrier segment restriction
+based on provided ID.
+
+This operation is performed by calling function `deleteShieldInformationBarrierSegmentRestrictionById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-shield-information-barrier-segment-restrictions-id/).
+
+
+```
+client.getShieldInformationBarrierSegmentRestrictions().deleteShieldInformationBarrierSegmentRestrictionById(segmentRestrictionId)
+```
+
+### Arguments
+
+- shieldInformationBarrierSegmentRestrictionId `String`
+ - The ID of the shield information barrier segment Restriction. Example: "4563"
+- headers `DeleteShieldInformationBarrierSegmentRestrictionByIdHeaders`
+ - Headers of deleteShieldInformationBarrierSegmentRestrictionById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Empty body in response.
+
+
+## List shield information barrier segment restrictions
+
+Lists shield information barrier segment restrictions
+based on provided segment ID.
+
+This operation is performed by calling function `getShieldInformationBarrierSegmentRestrictions`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barrier-segment-restrictions/).
+
+
+```
+client.getShieldInformationBarrierSegmentRestrictions().getShieldInformationBarrierSegmentRestrictions(new GetShieldInformationBarrierSegmentRestrictionsQueryParams(segmentId))
+```
+
+### Arguments
+
+- queryParams `GetShieldInformationBarrierSegmentRestrictionsQueryParams`
+ - Query parameters of getShieldInformationBarrierSegmentRestrictions method
+- headers `GetShieldInformationBarrierSegmentRestrictionsHeaders`
+ - Headers of getShieldInformationBarrierSegmentRestrictions method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegmentRestrictions`.
+
+Returns a paginated list of
+shield information barrier segment restriction objects.
+
+
+## Create shield information barrier segment restriction
+
+Creates a shield information barrier
+segment restriction object.
+
+This operation is performed by calling function `createShieldInformationBarrierSegmentRestriction`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-shield-information-barrier-segment-restrictions/).
+
+
+```
+client.getShieldInformationBarrierSegmentRestrictions().createShieldInformationBarrierSegmentRestriction(new CreateShieldInformationBarrierSegmentRestrictionRequestBody.Builder(new CreateShieldInformationBarrierSegmentRestrictionRequestBodyShieldInformationBarrierSegmentField.Builder().id(segmentId).type(CreateShieldInformationBarrierSegmentRestrictionRequestBodyShieldInformationBarrierSegmentTypeField.SHIELD_INFORMATION_BARRIER_SEGMENT).build(), new CreateShieldInformationBarrierSegmentRestrictionRequestBodyRestrictedSegmentField.Builder().id(segmentToRestrictId).type(CreateShieldInformationBarrierSegmentRestrictionRequestBodyRestrictedSegmentTypeField.SHIELD_INFORMATION_BARRIER_SEGMENT).build()).type(CreateShieldInformationBarrierSegmentRestrictionRequestBodyTypeField.SHIELD_INFORMATION_BARRIER_SEGMENT_RESTRICTION).build())
+```
+
+### Arguments
+
+- requestBody `CreateShieldInformationBarrierSegmentRestrictionRequestBody`
+ - Request body of createShieldInformationBarrierSegmentRestriction method
+- headers `CreateShieldInformationBarrierSegmentRestrictionHeaders`
+ - Headers of createShieldInformationBarrierSegmentRestriction method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegmentRestriction`.
+
+Returns the newly created Shield
+Information Barrier Segment Restriction object.
+
+
diff --git a/docs/shieldinformationbarriersegments.md b/docs/shieldinformationbarriersegments.md
new file mode 100644
index 000000000..99af74127
--- /dev/null
+++ b/docs/shieldinformationbarriersegments.md
@@ -0,0 +1,158 @@
+# ShieldInformationBarrierSegmentsManager
+
+
+- [Get shield information barrier segment with specified ID](#get-shield-information-barrier-segment-with-specified-id)
+- [Delete shield information barrier segment](#delete-shield-information-barrier-segment)
+- [Update shield information barrier segment with specified ID](#update-shield-information-barrier-segment-with-specified-id)
+- [List shield information barrier segments](#list-shield-information-barrier-segments)
+- [Create shield information barrier segment](#create-shield-information-barrier-segment)
+
+## Get shield information barrier segment with specified ID
+
+Retrieves shield information barrier segment based on provided ID..
+
+This operation is performed by calling function `getShieldInformationBarrierSegmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barrier-segments-id/).
+
+
+```
+client.getShieldInformationBarrierSegments().getShieldInformationBarrierSegmentById(segmentId)
+```
+
+### Arguments
+
+- shieldInformationBarrierSegmentId `String`
+ - The ID of the shield information barrier segment. Example: "3423"
+- headers `GetShieldInformationBarrierSegmentByIdHeaders`
+ - Headers of getShieldInformationBarrierSegmentById method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegment`.
+
+Returns the shield information barrier segment object.
+
+
+## Delete shield information barrier segment
+
+Deletes the shield information barrier segment
+based on provided ID.
+
+This operation is performed by calling function `deleteShieldInformationBarrierSegmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-shield-information-barrier-segments-id/).
+
+
+```
+client.getShieldInformationBarrierSegments().deleteShieldInformationBarrierSegmentById(segmentId)
+```
+
+### Arguments
+
+- shieldInformationBarrierSegmentId `String`
+ - The ID of the shield information barrier segment. Example: "3423"
+- headers `DeleteShieldInformationBarrierSegmentByIdHeaders`
+ - Headers of deleteShieldInformationBarrierSegmentById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Empty body in response.
+
+
+## Update shield information barrier segment with specified ID
+
+Updates the shield information barrier segment based on provided ID..
+
+This operation is performed by calling function `updateShieldInformationBarrierSegmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-shield-information-barrier-segments-id/).
+
+
+```
+client.getShieldInformationBarrierSegments().updateShieldInformationBarrierSegmentById(segmentId, new UpdateShieldInformationBarrierSegmentByIdRequestBody.Builder().description(updatedSegmentDescription).build())
+```
+
+### Arguments
+
+- shieldInformationBarrierSegmentId `String`
+ - The ID of the shield information barrier segment. Example: "3423"
+- requestBody `UpdateShieldInformationBarrierSegmentByIdRequestBody`
+ - Request body of updateShieldInformationBarrierSegmentById method
+- headers `UpdateShieldInformationBarrierSegmentByIdHeaders`
+ - Headers of updateShieldInformationBarrierSegmentById method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegment`.
+
+Returns the updated shield information barrier segment object.
+
+
+## List shield information barrier segments
+
+Retrieves a list of shield information barrier segment objects
+for the specified Information Barrier ID.
+
+This operation is performed by calling function `getShieldInformationBarrierSegments`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-shield-information-barrier-segments/).
+
+
+```
+client.getShieldInformationBarrierSegments().getShieldInformationBarrierSegments(new GetShieldInformationBarrierSegmentsQueryParams(barrierId))
+```
+
+### Arguments
+
+- queryParams `GetShieldInformationBarrierSegmentsQueryParams`
+ - Query parameters of getShieldInformationBarrierSegments method
+- headers `GetShieldInformationBarrierSegmentsHeaders`
+ - Headers of getShieldInformationBarrierSegments method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegments`.
+
+Returns a paginated list of shield information barrier segment objects.
+
+
+## Create shield information barrier segment
+
+Creates a shield information barrier segment.
+
+This operation is performed by calling function `createShieldInformationBarrierSegment`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-shield-information-barrier-segments/).
+
+
+```
+client.getShieldInformationBarrierSegments().createShieldInformationBarrierSegment(new CreateShieldInformationBarrierSegmentRequestBody.Builder(new ShieldInformationBarrierBase.Builder().id(barrierId).type(ShieldInformationBarrierBaseTypeField.SHIELD_INFORMATION_BARRIER).build(), segmentName).description(segmentDescription).build())
+```
+
+### Arguments
+
+- requestBody `CreateShieldInformationBarrierSegmentRequestBody`
+ - Request body of createShieldInformationBarrierSegment method
+- headers `CreateShieldInformationBarrierSegmentHeaders`
+ - Headers of createShieldInformationBarrierSegment method
+
+
+### Returns
+
+This function returns a value of type `ShieldInformationBarrierSegment`.
+
+Returns a new shield information barrier segment object.
+
+
diff --git a/docs/shieldlists.md b/docs/shieldlists.md
new file mode 100644
index 000000000..0be407ce9
--- /dev/null
+++ b/docs/shieldlists.md
@@ -0,0 +1,154 @@
+# ShieldListsManager
+
+
+- [Get all shield lists in enterprise](#get-all-shield-lists-in-enterprise)
+- [Create shield list](#create-shield-list)
+- [Get single shield list by shield list id](#get-single-shield-list-by-shield-list-id)
+- [Delete single shield list by shield list id](#delete-single-shield-list-by-shield-list-id)
+- [Update shield list](#update-shield-list)
+
+## Get all shield lists in enterprise
+
+Retrieves all shield lists in the enterprise.
+
+This operation is performed by calling function `getShieldListsV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-shield-lists/).
+
+
+```
+client.getShieldLists().getShieldListsV2025R0()
+```
+
+### Arguments
+
+- headers `GetShieldListsV2025R0Headers`
+ - Headers of getShieldListsV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `ShieldListsV2025R0`.
+
+Returns the list of shield list objects.
+
+
+## Create shield list
+
+Creates a shield list.
+
+This operation is performed by calling function `createShieldListV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/post-shield-lists/).
+
+
+```
+client.getShieldLists().createShieldListV2025R0(new ShieldListsCreateV2025R0.Builder(shieldListCountryName, new ShieldListContentCountryV2025R0.Builder(Arrays.asList("US", "PL")).type(ShieldListContentCountryV2025R0TypeField.COUNTRY).build()).description("A list of things that are shielded").build())
+```
+
+### Arguments
+
+- requestBody `ShieldListsCreateV2025R0`
+ - Request body of createShieldListV2025R0 method
+- headers `CreateShieldListV2025R0Headers`
+ - Headers of createShieldListV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `ShieldListV2025R0`.
+
+Returns the shield list object.
+
+
+## Get single shield list by shield list id
+
+Retrieves a single shield list by its ID.
+
+This operation is performed by calling function `getShieldListByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/get-shield-lists-id/).
+
+
+```
+client.getShieldLists().getShieldListByIdV2025R0(shieldListCountry.getId())
+```
+
+### Arguments
+
+- shieldListId `String`
+ - The unique identifier that represents a shield list. The ID for any Shield List can be determined by the response from the endpoint fetching all shield lists for the enterprise. Example: "90fb0e17-c332-40ed-b4f9-fa8908fbbb24 "
+- headers `GetShieldListByIdV2025R0Headers`
+ - Headers of getShieldListByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `ShieldListV2025R0`.
+
+Returns the shield list object.
+
+
+## Delete single shield list by shield list id
+
+Delete a single shield list by its ID.
+
+This operation is performed by calling function `deleteShieldListByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/delete-shield-lists-id/).
+
+
+```
+client.getShieldLists().deleteShieldListByIdV2025R0(shieldListCountry.getId())
+```
+
+### Arguments
+
+- shieldListId `String`
+ - The unique identifier that represents a shield list. The ID for any Shield List can be determined by the response from the endpoint fetching all shield lists for the enterprise. Example: "90fb0e17-c332-40ed-b4f9-fa8908fbbb24 "
+- headers `DeleteShieldListByIdV2025R0Headers`
+ - Headers of deleteShieldListByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Shield List correctly removed. No content in response.
+
+
+## Update shield list
+
+Updates a shield list.
+
+This operation is performed by calling function `updateShieldListByIdV2025R0`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/v2025.0/put-shield-lists-id/).
+
+
+```
+client.getShieldLists().updateShieldListByIdV2025R0(shieldListCountry.getId(), new ShieldListsUpdateV2025R0.Builder(shieldListCountryName, new ShieldListContentCountryV2025R0.Builder(Arrays.asList("US")).type(ShieldListContentCountryV2025R0TypeField.COUNTRY).build()).description("Updated description").build())
+```
+
+### Arguments
+
+- shieldListId `String`
+ - The unique identifier that represents a shield list. The ID for any Shield List can be determined by the response from the endpoint fetching all shield lists for the enterprise. Example: "90fb0e17-c332-40ed-b4f9-fa8908fbbb24 "
+- requestBody `ShieldListsUpdateV2025R0`
+ - Request body of updateShieldListByIdV2025R0 method
+- headers `UpdateShieldListByIdV2025R0Headers`
+ - Headers of updateShieldListByIdV2025R0 method
+
+
+### Returns
+
+This function returns a value of type `ShieldListV2025R0`.
+
+Returns the shield list object.
+
+
diff --git a/docs/signrequests.md b/docs/signrequests.md
new file mode 100644
index 000000000..d6dfcf408
--- /dev/null
+++ b/docs/signrequests.md
@@ -0,0 +1,156 @@
+# SignRequestsManager
+
+
+- [Cancel Box Sign request](#cancel-box-sign-request)
+- [Resend Box Sign request](#resend-box-sign-request)
+- [Get Box Sign request by ID](#get-box-sign-request-by-id)
+- [List Box Sign requests](#list-box-sign-requests)
+- [Create Box Sign request](#create-box-sign-request)
+
+## Cancel Box Sign request
+
+Cancels a sign request.
+
+This operation is performed by calling function `cancelSignRequest`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-sign-requests-id-cancel/).
+
+
+```
+client.getSignRequests().cancelSignRequest(createdSignRequest.getId())
+```
+
+### Arguments
+
+- signRequestId `String`
+ - The ID of the signature request. Example: "33243242"
+- requestBody `SignRequestCancelRequest`
+ - Request body of cancelSignRequest method
+- headers `CancelSignRequestHeaders`
+ - Headers of cancelSignRequest method
+
+
+### Returns
+
+This function returns a value of type `SignRequest`.
+
+Returns a Sign Request object.
+
+
+## Resend Box Sign request
+
+Resends a signature request email to all outstanding signers.
+
+This operation is performed by calling function `resendSignRequest`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-sign-requests-id-resend/).
+
+*Currently we don't have an example for calling `resendSignRequest` in integration tests*
+
+### Arguments
+
+- signRequestId `String`
+ - The ID of the signature request. Example: "33243242"
+- headers `ResendSignRequestHeaders`
+ - Headers of resendSignRequest method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the API call was successful.
+The email notifications will be sent asynchronously.
+
+
+## Get Box Sign request by ID
+
+Gets a sign request by ID.
+
+This operation is performed by calling function `getSignRequestById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-sign-requests-id/).
+
+
+```
+client.getSignRequests().getSignRequestById(createdSignRequest.getId())
+```
+
+### Arguments
+
+- signRequestId `String`
+ - The ID of the signature request. Example: "33243242"
+- headers `GetSignRequestByIdHeaders`
+ - Headers of getSignRequestById method
+
+
+### Returns
+
+This function returns a value of type `SignRequest`.
+
+Returns a signature request.
+
+
+## List Box Sign requests
+
+Gets signature requests created by a user. If the `sign_files` and/or
+`parent_folder` are deleted, the signature request will not return in the list.
+
+This operation is performed by calling function `getSignRequests`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-sign-requests/).
+
+
+```
+client.getSignRequests().getSignRequests()
+```
+
+### Arguments
+
+- queryParams `GetSignRequestsQueryParams`
+ - Query parameters of getSignRequests method
+- headers `GetSignRequestsHeaders`
+ - Headers of getSignRequests method
+
+
+### Returns
+
+This function returns a value of type `SignRequests`.
+
+Returns a collection of sign requests.
+
+
+## Create Box Sign request
+
+Creates a signature request. This involves preparing a document for signing and
+sending the signature request to signers.
+
+This operation is performed by calling function `createSignRequest`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-sign-requests/).
+
+
+```
+client.getSignRequests().createSignRequest(new SignRequestCreateRequest.Builder(Arrays.asList(new SignRequestCreateSigner.Builder().email(signerEmail).role(SignRequestCreateSignerRoleField.SIGNER).isInPerson(false).embedUrlExternalUserId("123").declinedRedirectUrl("https://www.box.com").loginRequired(false).password("password").suppressNotifications(true).build())).sourceFiles(Arrays.asList(new FileBase(fileToSign.getId()))).parentFolder(new FolderMini(destinationFolder.getId())).isDocumentPreparationNeeded(false).redirectUrl("https://www.box.com").declinedRedirectUrl("https://www.box.com").areTextSignaturesEnabled(true).emailSubject("Sign this document").emailMessage("Please sign this document").areRemindersEnabled(true).name("Sign Request").prefillTags(Arrays.asList(new SignRequestPrefillTag.Builder().documentTagId("0").dateValue(dateFromString("2035-01-01")).build())).daysValid(30L).externalId("123").externalSystemName("BoxSignIntegration").build())
+```
+
+### Arguments
+
+- requestBody `SignRequestCreateRequest`
+ - Request body of createSignRequest method
+- headers `CreateSignRequestHeaders`
+ - Headers of createSignRequest method
+
+
+### Returns
+
+This function returns a value of type `SignRequest`.
+
+Returns a Box Sign request object.
+
+
diff --git a/docs/signtemplates.md b/docs/signtemplates.md
new file mode 100644
index 000000000..7c4c1e878
--- /dev/null
+++ b/docs/signtemplates.md
@@ -0,0 +1,64 @@
+# SignTemplatesManager
+
+
+- [List Box Sign templates](#list-box-sign-templates)
+- [Get Box Sign template by ID](#get-box-sign-template-by-id)
+
+## List Box Sign templates
+
+Gets Box Sign templates created by a user.
+
+This operation is performed by calling function `getSignTemplates`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-sign-templates/).
+
+
+```
+client.getSignTemplates().getSignTemplates(new GetSignTemplatesQueryParams.Builder().limit(2L).build())
+```
+
+### Arguments
+
+- queryParams `GetSignTemplatesQueryParams`
+ - Query parameters of getSignTemplates method
+- headers `GetSignTemplatesHeaders`
+ - Headers of getSignTemplates method
+
+
+### Returns
+
+This function returns a value of type `SignTemplates`.
+
+Returns a collection of templates.
+
+
+## Get Box Sign template by ID
+
+Fetches details of a specific Box Sign template.
+
+This operation is performed by calling function `getSignTemplateById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-sign-templates-id/).
+
+
+```
+client.getSignTemplates().getSignTemplateById(signTemplates.getEntries().get(0).getId())
+```
+
+### Arguments
+
+- templateId `String`
+ - The ID of a Box Sign template. Example: "123075213-7d117509-8f05-42e4-a5ef-5190a319d41d"
+- headers `GetSignTemplateByIdHeaders`
+ - Headers of getSignTemplateById method
+
+
+### Returns
+
+This function returns a value of type `SignTemplate`.
+
+Returns details of a template.
+
+
diff --git a/docs/skills.md b/docs/skills.md
new file mode 100644
index 000000000..8fb35a51d
--- /dev/null
+++ b/docs/skills.md
@@ -0,0 +1,164 @@
+# SkillsManager
+
+
+- [List Box Skill cards on file](#list-box-skill-cards-on-file)
+- [Create Box Skill cards on file](#create-box-skill-cards-on-file)
+- [Update Box Skill cards on file](#update-box-skill-cards-on-file)
+- [Remove Box Skill cards from file](#remove-box-skill-cards-from-file)
+- [Update all Box Skill cards on file](#update-all-box-skill-cards-on-file)
+
+## List Box Skill cards on file
+
+List the Box Skills metadata cards that are attached to a file.
+
+This operation is performed by calling function `getBoxSkillCardsOnFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-metadata-global-boxSkillsCards/).
+
+
+```
+client.getSkills().getBoxSkillCardsOnFile(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `GetBoxSkillCardsOnFileHeaders`
+ - Headers of getBoxSkillCardsOnFile method
+
+
+### Returns
+
+This function returns a value of type `SkillCardsMetadata`.
+
+Returns all the metadata associated with a file.
+
+This API does not support pagination and will therefore always return
+all of the metadata associated to the file.
+
+
+## Create Box Skill cards on file
+
+Applies one or more Box Skills metadata cards to a file.
+
+This operation is performed by calling function `createBoxSkillCardsOnFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-id-metadata-global-boxSkillsCards/).
+
+
+```
+client.getSkills().createBoxSkillCardsOnFile(file.getId(), new CreateBoxSkillCardsOnFileRequestBody(cardsToCreate))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `CreateBoxSkillCardsOnFileRequestBody`
+ - Request body of createBoxSkillCardsOnFile method
+- headers `CreateBoxSkillCardsOnFileHeaders`
+ - Headers of createBoxSkillCardsOnFile method
+
+
+### Returns
+
+This function returns a value of type `SkillCardsMetadata`.
+
+Returns the instance of the template that was applied to the file,
+including the data that was applied to the template.
+
+
+## Update Box Skill cards on file
+
+Updates one or more Box Skills metadata cards to a file.
+
+This operation is performed by calling function `updateBoxSkillCardsOnFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-files-id-metadata-global-boxSkillsCards/).
+
+
+```
+client.getSkills().updateBoxSkillCardsOnFile(file.getId(), Arrays.asList(new UpdateBoxSkillCardsOnFileRequestBody.Builder().op(UpdateBoxSkillCardsOnFileRequestBodyOpField.REPLACE).path("/cards/0").value(cardToUpdate).build()))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `List`
+ - Request body of updateBoxSkillCardsOnFile method
+- headers `UpdateBoxSkillCardsOnFileHeaders`
+ - Headers of updateBoxSkillCardsOnFile method
+
+
+### Returns
+
+This function returns a value of type `SkillCardsMetadata`.
+
+Returns the updated metadata template, with the
+custom template data included.
+
+
+## Remove Box Skill cards from file
+
+Removes any Box Skills cards metadata from a file.
+
+This operation is performed by calling function `deleteBoxSkillCardsFromFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-id-metadata-global-boxSkillsCards/).
+
+
+```
+client.getSkills().deleteBoxSkillCardsFromFile(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `DeleteBoxSkillCardsFromFileHeaders`
+ - Headers of deleteBoxSkillCardsFromFile method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the cards are
+successfully deleted.
+
+
+## Update all Box Skill cards on file
+
+An alternative method that can be used to overwrite and update all Box Skill
+metadata cards on a file.
+
+This operation is performed by calling function `updateAllSkillCardsOnFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-skill-invocations-id/).
+
+*Currently we don't have an example for calling `updateAllSkillCardsOnFile` in integration tests*
+
+### Arguments
+
+- skillId `String`
+ - The ID of the skill to apply this metadata for. Example: "33243242"
+- requestBody `UpdateAllSkillCardsOnFileRequestBody`
+ - Request body of updateAllSkillCardsOnFile method
+- headers `UpdateAllSkillCardsOnFileHeaders`
+ - Headers of updateAllSkillCardsOnFile method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the card has been successfully updated.
+
+
diff --git a/docs/storagepolicies.md b/docs/storagepolicies.md
new file mode 100644
index 000000000..552cdd5ed
--- /dev/null
+++ b/docs/storagepolicies.md
@@ -0,0 +1,64 @@
+# StoragePoliciesManager
+
+
+- [List storage policies](#list-storage-policies)
+- [Get storage policy](#get-storage-policy)
+
+## List storage policies
+
+Fetches all the storage policies in the enterprise.
+
+This operation is performed by calling function `getStoragePolicies`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-storage-policies/).
+
+
+```
+client.getStoragePolicies().getStoragePolicies()
+```
+
+### Arguments
+
+- queryParams `GetStoragePoliciesQueryParams`
+ - Query parameters of getStoragePolicies method
+- headers `GetStoragePoliciesHeaders`
+ - Headers of getStoragePolicies method
+
+
+### Returns
+
+This function returns a value of type `StoragePolicies`.
+
+Returns a collection of storage policies.
+
+
+## Get storage policy
+
+Fetches a specific storage policy.
+
+This operation is performed by calling function `getStoragePolicyById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-storage-policies-id/).
+
+
+```
+client.getStoragePolicies().getStoragePolicyById(storagePolicy.getId())
+```
+
+### Arguments
+
+- storagePolicyId `String`
+ - The ID of the storage policy. Example: "34342"
+- headers `GetStoragePolicyByIdHeaders`
+ - Headers of getStoragePolicyById method
+
+
+### Returns
+
+This function returns a value of type `StoragePolicy`.
+
+Returns a storage policy object.
+
+
diff --git a/docs/storagepolicyassignments.md b/docs/storagepolicyassignments.md
new file mode 100644
index 000000000..a28a8a554
--- /dev/null
+++ b/docs/storagepolicyassignments.md
@@ -0,0 +1,165 @@
+# StoragePolicyAssignmentsManager
+
+
+- [List storage policy assignments](#list-storage-policy-assignments)
+- [Assign storage policy](#assign-storage-policy)
+- [Get storage policy assignment](#get-storage-policy-assignment)
+- [Update storage policy assignment](#update-storage-policy-assignment)
+- [Unassign storage policy](#unassign-storage-policy)
+
+## List storage policy assignments
+
+Fetches all the storage policy assignment for an enterprise or user.
+
+This operation is performed by calling function `getStoragePolicyAssignments`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-storage-policy-assignments/).
+
+
+```
+client.getStoragePolicyAssignments().getStoragePolicyAssignments(new GetStoragePolicyAssignmentsQueryParams(GetStoragePolicyAssignmentsQueryParamsResolvedForTypeField.USER, userId))
+```
+
+### Arguments
+
+- queryParams `GetStoragePolicyAssignmentsQueryParams`
+ - Query parameters of getStoragePolicyAssignments method
+- headers `GetStoragePolicyAssignmentsHeaders`
+ - Headers of getStoragePolicyAssignments method
+
+
+### Returns
+
+This function returns a value of type `StoragePolicyAssignments`.
+
+Returns a collection of storage policies for
+the enterprise or user.
+
+
+## Assign storage policy
+
+Creates a storage policy assignment for an enterprise or user.
+
+This operation is performed by calling function `createStoragePolicyAssignment`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-storage-policy-assignments/).
+
+
+```
+client.getStoragePolicyAssignments().createStoragePolicyAssignment(new CreateStoragePolicyAssignmentRequestBody(new CreateStoragePolicyAssignmentRequestBodyStoragePolicyField(policyId), new CreateStoragePolicyAssignmentRequestBodyAssignedToField(CreateStoragePolicyAssignmentRequestBodyAssignedToTypeField.USER, userId)))
+```
+
+### Arguments
+
+- requestBody `CreateStoragePolicyAssignmentRequestBody`
+ - Request body of createStoragePolicyAssignment method
+- headers `CreateStoragePolicyAssignmentHeaders`
+ - Headers of createStoragePolicyAssignment method
+
+
+### Returns
+
+This function returns a value of type `StoragePolicyAssignment`.
+
+Returns the new storage policy assignment created.
+
+
+## Get storage policy assignment
+
+Fetches a specific storage policy assignment.
+
+This operation is performed by calling function `getStoragePolicyAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-storage-policy-assignments-id/).
+
+
+```
+client.getStoragePolicyAssignments().getStoragePolicyAssignmentById(storagePolicyAssignment.getId())
+```
+
+### Arguments
+
+- storagePolicyAssignmentId `String`
+ - The ID of the storage policy assignment. Example: "932483"
+- headers `GetStoragePolicyAssignmentByIdHeaders`
+ - Headers of getStoragePolicyAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `StoragePolicyAssignment`.
+
+Returns a storage policy assignment object.
+
+
+## Update storage policy assignment
+
+Updates a specific storage policy assignment.
+
+This operation is performed by calling function `updateStoragePolicyAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-storage-policy-assignments-id/).
+
+
+```
+client.getStoragePolicyAssignments().updateStoragePolicyAssignmentById(storagePolicyAssignment.getId(), new UpdateStoragePolicyAssignmentByIdRequestBody(new UpdateStoragePolicyAssignmentByIdRequestBodyStoragePolicyField(storagePolicy2.getId())))
+```
+
+### Arguments
+
+- storagePolicyAssignmentId `String`
+ - The ID of the storage policy assignment. Example: "932483"
+- requestBody `UpdateStoragePolicyAssignmentByIdRequestBody`
+ - Request body of updateStoragePolicyAssignmentById method
+- headers `UpdateStoragePolicyAssignmentByIdHeaders`
+ - Headers of updateStoragePolicyAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `StoragePolicyAssignment`.
+
+Returns an updated storage policy assignment object.
+
+
+## Unassign storage policy
+
+Delete a storage policy assignment.
+
+Deleting a storage policy assignment on a user
+will have the user inherit the enterprise's default
+storage policy.
+
+There is a rate limit for calling this endpoint of only
+twice per user in a 24 hour time frame.
+
+This operation is performed by calling function `deleteStoragePolicyAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-storage-policy-assignments-id/).
+
+
+```
+client.getStoragePolicyAssignments().deleteStoragePolicyAssignmentById(storagePolicyAssignment.getId())
+```
+
+### Arguments
+
+- storagePolicyAssignmentId `String`
+ - The ID of the storage policy assignment. Example: "932483"
+- headers `DeleteStoragePolicyAssignmentByIdHeaders`
+ - Headers of deleteStoragePolicyAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the storage policy
+assignment is successfully deleted.
+
+
diff --git a/docs/taskassignments.md b/docs/taskassignments.md
new file mode 100644
index 000000000..bd90913c9
--- /dev/null
+++ b/docs/taskassignments.md
@@ -0,0 +1,163 @@
+# TaskAssignmentsManager
+
+
+- [List task assignments](#list-task-assignments)
+- [Assign task](#assign-task)
+- [Get task assignment](#get-task-assignment)
+- [Update task assignment](#update-task-assignment)
+- [Unassign task](#unassign-task)
+
+## List task assignments
+
+Lists all of the assignments for a given task.
+
+This operation is performed by calling function `getTaskAssignments`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-tasks-id-assignments/).
+
+
+```
+client.getTaskAssignments().getTaskAssignments(task.getId())
+```
+
+### Arguments
+
+- taskId `String`
+ - The ID of the task. Example: "12345"
+- headers `GetTaskAssignmentsHeaders`
+ - Headers of getTaskAssignments method
+
+
+### Returns
+
+This function returns a value of type `TaskAssignments`.
+
+Returns a collection of task assignment defining what task on
+a file has been assigned to which users and by who.
+
+
+## Assign task
+
+Assigns a task to a user.
+
+A task can be assigned to more than one user by creating multiple
+assignments.
+
+This operation is performed by calling function `createTaskAssignment`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-task-assignments/).
+
+
+```
+client.getTaskAssignments().createTaskAssignment(new CreateTaskAssignmentRequestBody(new CreateTaskAssignmentRequestBodyTaskField.Builder(task.getId()).type(CreateTaskAssignmentRequestBodyTaskTypeField.TASK).build(), new CreateTaskAssignmentRequestBodyAssignToField.Builder().id(currentUser.getId()).build()))
+```
+
+### Arguments
+
+- requestBody `CreateTaskAssignmentRequestBody`
+ - Request body of createTaskAssignment method
+- headers `CreateTaskAssignmentHeaders`
+ - Headers of createTaskAssignment method
+
+
+### Returns
+
+This function returns a value of type `TaskAssignment`.
+
+Returns a new task assignment object.
+
+
+## Get task assignment
+
+Retrieves information about a task assignment.
+
+This operation is performed by calling function `getTaskAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-task-assignments-id/).
+
+
+```
+client.getTaskAssignments().getTaskAssignmentById(taskAssignment.getId())
+```
+
+### Arguments
+
+- taskAssignmentId `String`
+ - The ID of the task assignment. Example: "12345"
+- headers `GetTaskAssignmentByIdHeaders`
+ - Headers of getTaskAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `TaskAssignment`.
+
+Returns a task assignment, specifying who the task has been assigned to
+and by whom.
+
+
+## Update task assignment
+
+Updates a task assignment. This endpoint can be
+used to update the state of a task assigned to a user.
+
+This operation is performed by calling function `updateTaskAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-task-assignments-id/).
+
+
+```
+client.getTaskAssignments().updateTaskAssignmentById(taskAssignment.getId(), new UpdateTaskAssignmentByIdRequestBody.Builder().message("updated message").resolutionState(UpdateTaskAssignmentByIdRequestBodyResolutionStateField.APPROVED).build())
+```
+
+### Arguments
+
+- taskAssignmentId `String`
+ - The ID of the task assignment. Example: "12345"
+- requestBody `UpdateTaskAssignmentByIdRequestBody`
+ - Request body of updateTaskAssignmentById method
+- headers `UpdateTaskAssignmentByIdHeaders`
+ - Headers of updateTaskAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `TaskAssignment`.
+
+Returns the updated task assignment object.
+
+
+## Unassign task
+
+Deletes a specific task assignment.
+
+This operation is performed by calling function `deleteTaskAssignmentById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-task-assignments-id/).
+
+
+```
+client.getTaskAssignments().deleteTaskAssignmentById(taskAssignment.getId())
+```
+
+### Arguments
+
+- taskAssignmentId `String`
+ - The ID of the task assignment. Example: "12345"
+- headers `DeleteTaskAssignmentByIdHeaders`
+ - Headers of deleteTaskAssignmentById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the task
+assignment was successfully deleted.
+
+
diff --git a/docs/tasks.md b/docs/tasks.md
new file mode 100644
index 000000000..2f11bf40b
--- /dev/null
+++ b/docs/tasks.md
@@ -0,0 +1,162 @@
+# TasksManager
+
+
+- [List tasks on file](#list-tasks-on-file)
+- [Create task](#create-task)
+- [Get task](#get-task)
+- [Update task](#update-task)
+- [Remove task](#remove-task)
+
+## List tasks on file
+
+Retrieves a list of all the tasks for a file. This
+endpoint does not support pagination.
+
+This operation is performed by calling function `getFileTasks`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-tasks/).
+
+
+```
+client.getTasks().getFileTasks(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `GetFileTasksHeaders`
+ - Headers of getFileTasks method
+
+
+### Returns
+
+This function returns a value of type `Tasks`.
+
+Returns a list of tasks on a file.
+
+If there are no tasks on this file an empty collection is returned
+instead.
+
+
+## Create task
+
+Creates a single task on a file. This task is not assigned to any user and
+will need to be assigned separately.
+
+This operation is performed by calling function `createTask`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-tasks/).
+
+
+```
+client.getTasks().createTask(new CreateTaskRequestBody.Builder(new CreateTaskRequestBodyItemField.Builder().id(file.getId()).type(CreateTaskRequestBodyItemTypeField.FILE).build()).action(CreateTaskRequestBodyActionField.REVIEW).message("test message").dueAt(dateTime).completionRule(CreateTaskRequestBodyCompletionRuleField.ALL_ASSIGNEES).build())
+```
+
+### Arguments
+
+- requestBody `CreateTaskRequestBody`
+ - Request body of createTask method
+- headers `CreateTaskHeaders`
+ - Headers of createTask method
+
+
+### Returns
+
+This function returns a value of type `Task`.
+
+Returns the newly created task.
+
+
+## Get task
+
+Retrieves information about a specific task.
+
+This operation is performed by calling function `getTaskById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-tasks-id/).
+
+
+```
+client.getTasks().getTaskById(task.getId())
+```
+
+### Arguments
+
+- taskId `String`
+ - The ID of the task. Example: "12345"
+- headers `GetTaskByIdHeaders`
+ - Headers of getTaskById method
+
+
+### Returns
+
+This function returns a value of type `Task`.
+
+Returns a task object.
+
+
+## Update task
+
+Updates a task. This can be used to update a task's configuration, or to
+update its completion state.
+
+This operation is performed by calling function `updateTaskById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-tasks-id/).
+
+
+```
+client.getTasks().updateTaskById(task.getId(), new UpdateTaskByIdRequestBody.Builder().message("updated message").build())
+```
+
+### Arguments
+
+- taskId `String`
+ - The ID of the task. Example: "12345"
+- requestBody `UpdateTaskByIdRequestBody`
+ - Request body of updateTaskById method
+- headers `UpdateTaskByIdHeaders`
+ - Headers of updateTaskById method
+
+
+### Returns
+
+This function returns a value of type `Task`.
+
+Returns the updated task object.
+
+
+## Remove task
+
+Removes a task from a file.
+
+This operation is performed by calling function `deleteTaskById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-tasks-id/).
+
+
+```
+client.getTasks().deleteTaskById(task.getId())
+```
+
+### Arguments
+
+- taskId `String`
+ - The ID of the task. Example: "12345"
+- headers `DeleteTaskByIdHeaders`
+ - Headers of deleteTaskById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the task was successfully deleted.
+
+
diff --git a/docs/termsofservices.md b/docs/termsofservices.md
new file mode 100644
index 000000000..700ef5a6c
--- /dev/null
+++ b/docs/termsofservices.md
@@ -0,0 +1,126 @@
+# TermsOfServicesManager
+
+
+- [List terms of services](#list-terms-of-services)
+- [Create terms of service](#create-terms-of-service)
+- [Get terms of service](#get-terms-of-service)
+- [Update terms of service](#update-terms-of-service)
+
+## List terms of services
+
+Returns the current terms of service text and settings
+for the enterprise.
+
+This operation is performed by calling function `getTermsOfService`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-terms-of-services/).
+
+
+```
+client.getTermsOfServices().getTermsOfService()
+```
+
+### Arguments
+
+- queryParams `GetTermsOfServiceQueryParams`
+ - Query parameters of getTermsOfService method
+- headers `GetTermsOfServiceHeaders`
+ - Headers of getTermsOfService method
+
+
+### Returns
+
+This function returns a value of type `TermsOfServices`.
+
+Returns a collection of terms of service text and settings for the
+enterprise.
+
+
+## Create terms of service
+
+Creates a terms of service for a given enterprise
+and type of user.
+
+This operation is performed by calling function `createTermsOfService`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-terms-of-services/).
+
+
+```
+client.getTermsOfServices().createTermsOfService(new CreateTermsOfServiceRequestBody.Builder(CreateTermsOfServiceRequestBodyStatusField.DISABLED, "Test TOS").tosType(CreateTermsOfServiceRequestBodyTosTypeField.MANAGED).build())
+```
+
+### Arguments
+
+- requestBody `CreateTermsOfServiceRequestBody`
+ - Request body of createTermsOfService method
+- headers `CreateTermsOfServiceHeaders`
+ - Headers of createTermsOfService method
+
+
+### Returns
+
+This function returns a value of type `TermsOfService`.
+
+Returns a new task object.
+
+
+## Get terms of service
+
+Fetches a specific terms of service.
+
+This operation is performed by calling function `getTermsOfServiceById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-terms-of-services-id/).
+
+*Currently we don't have an example for calling `getTermsOfServiceById` in integration tests*
+
+### Arguments
+
+- termsOfServiceId `String`
+ - The ID of the terms of service. Example: "324234"
+- headers `GetTermsOfServiceByIdHeaders`
+ - Headers of getTermsOfServiceById method
+
+
+### Returns
+
+This function returns a value of type `TermsOfService`.
+
+Returns a terms of service object.
+
+
+## Update terms of service
+
+Updates a specific terms of service.
+
+This operation is performed by calling function `updateTermsOfServiceById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-terms-of-services-id/).
+
+
+```
+client.getTermsOfServices().updateTermsOfServiceById(tos.getId(), new UpdateTermsOfServiceByIdRequestBody(UpdateTermsOfServiceByIdRequestBodyStatusField.DISABLED, "TOS"))
+```
+
+### Arguments
+
+- termsOfServiceId `String`
+ - The ID of the terms of service. Example: "324234"
+- requestBody `UpdateTermsOfServiceByIdRequestBody`
+ - Request body of updateTermsOfServiceById method
+- headers `UpdateTermsOfServiceByIdHeaders`
+ - Headers of updateTermsOfServiceById method
+
+
+### Returns
+
+This function returns a value of type `TermsOfService`.
+
+Returns an updated terms of service object.
+
+
diff --git a/docs/termsofserviceuserstatuses.md b/docs/termsofserviceuserstatuses.md
new file mode 100644
index 000000000..3a2fa17df
--- /dev/null
+++ b/docs/termsofserviceuserstatuses.md
@@ -0,0 +1,98 @@
+# TermsOfServiceUserStatusesManager
+
+
+- [List terms of service user statuses](#list-terms-of-service-user-statuses)
+- [Create terms of service status for new user](#create-terms-of-service-status-for-new-user)
+- [Update terms of service status for existing user](#update-terms-of-service-status-for-existing-user)
+
+## List terms of service user statuses
+
+Retrieves an overview of users and their status for a
+terms of service, including Whether they have accepted
+the terms and when.
+
+This operation is performed by calling function `getTermsOfServiceUserStatuses`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-terms-of-service-user-statuses/).
+
+
+```
+client.getTermsOfServiceUserStatuses().getTermsOfServiceUserStatuses(new GetTermsOfServiceUserStatusesQueryParams.Builder(tos.getId()).userId(user.getId()).build())
+```
+
+### Arguments
+
+- queryParams `GetTermsOfServiceUserStatusesQueryParams`
+ - Query parameters of getTermsOfServiceUserStatuses method
+- headers `GetTermsOfServiceUserStatusesHeaders`
+ - Headers of getTermsOfServiceUserStatuses method
+
+
+### Returns
+
+This function returns a value of type `TermsOfServiceUserStatuses`.
+
+Returns a list of terms of service statuses.
+
+
+## Create terms of service status for new user
+
+Sets the status for a terms of service for a user.
+
+This operation is performed by calling function `createTermsOfServiceStatusForUser`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-terms-of-service-user-statuses/).
+
+
+```
+client.getTermsOfServiceUserStatuses().createTermsOfServiceStatusForUser(new CreateTermsOfServiceStatusForUserRequestBody(new CreateTermsOfServiceStatusForUserRequestBodyTosField(tos.getId()), new CreateTermsOfServiceStatusForUserRequestBodyUserField(user.getId()), false))
+```
+
+### Arguments
+
+- requestBody `CreateTermsOfServiceStatusForUserRequestBody`
+ - Request body of createTermsOfServiceStatusForUser method
+- headers `CreateTermsOfServiceStatusForUserHeaders`
+ - Headers of createTermsOfServiceStatusForUser method
+
+
+### Returns
+
+This function returns a value of type `TermsOfServiceUserStatus`.
+
+Returns a terms of service status object.
+
+
+## Update terms of service status for existing user
+
+Updates the status for a terms of service for a user.
+
+This operation is performed by calling function `updateTermsOfServiceStatusForUserById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-terms-of-service-user-statuses-id/).
+
+
+```
+client.getTermsOfServiceUserStatuses().updateTermsOfServiceStatusForUserById(createdTosUserStatus.getId(), new UpdateTermsOfServiceStatusForUserByIdRequestBody(true))
+```
+
+### Arguments
+
+- termsOfServiceUserStatusId `String`
+ - The ID of the terms of service status. Example: "324234"
+- requestBody `UpdateTermsOfServiceStatusForUserByIdRequestBody`
+ - Request body of updateTermsOfServiceStatusForUserById method
+- headers `UpdateTermsOfServiceStatusForUserByIdHeaders`
+ - Headers of updateTermsOfServiceStatusForUserById method
+
+
+### Returns
+
+This function returns a value of type `TermsOfServiceUserStatus`.
+
+Returns the updated terms of service status object.
+
+
diff --git a/docs/transfer.md b/docs/transfer.md
new file mode 100644
index 000000000..38fae1a6a
--- /dev/null
+++ b/docs/transfer.md
@@ -0,0 +1,72 @@
+# TransferManager
+
+
+- [Transfer owned folders](#transfer-owned-folders)
+
+## Transfer owned folders
+
+Move all of the items (files, folders and workflows) owned by a user into
+another user's account.
+
+Only the root folder (`0`) can be transferred.
+
+Folders can only be moved across users by users with administrative
+permissions.
+
+All existing shared links and folder-level collaborations are transferred
+during the operation. Please note that while collaborations at the individual
+file-level are transferred during the operation, the collaborations are
+deleted when the original user is deleted.
+
+If the user has a large number of items across all folders, the call will
+be run asynchronously. If the operation is not completed within 10 minutes,
+the user will receive a 200 OK response, and the operation will continue running.
+
+If the destination path has a metadata cascade policy attached to any of
+the parent folders, a metadata cascade operation will be kicked off
+asynchronously.
+
+There is currently no way to check for when this operation is finished.
+
+The destination folder's name will be in the format `{User}'s Files and
+Folders`, where `{User}` is the display name of the user.
+
+To make this API call your application will need to have the "Read and write
+all files and folders stored in Box" scope enabled.
+
+Please make sure the destination user has access to `Relay` or `Relay Lite`,
+and has access to the files and folders involved in the workflows being
+transferred.
+
+Admins will receive an email when the operation is completed.
+
+This operation is performed by calling function `transferOwnedFolder`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-users-id-folders-0/).
+
+
+```
+client.getTransfer().transferOwnedFolder(sourceUser.getId(), new TransferOwnedFolderRequestBody(new TransferOwnedFolderRequestBodyOwnedByField(targetUser.getId())), new TransferOwnedFolderQueryParams.Builder().notify(false).build())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- requestBody `TransferOwnedFolderRequestBody`
+ - Request body of transferOwnedFolder method
+- queryParams `TransferOwnedFolderQueryParams`
+ - Query parameters of transferOwnedFolder method
+- headers `TransferOwnedFolderHeaders`
+ - Headers of transferOwnedFolder method
+
+
+### Returns
+
+This function returns a value of type `FolderFull`.
+
+Returns the information for the newly created
+destination folder.
+
+
diff --git a/docs/trashedfiles.md b/docs/trashedfiles.md
new file mode 100644
index 000000000..46482f699
--- /dev/null
+++ b/docs/trashedfiles.md
@@ -0,0 +1,117 @@
+# TrashedFilesManager
+
+
+- [Restore file](#restore-file)
+- [Get trashed file](#get-trashed-file)
+- [Permanently remove file](#permanently-remove-file)
+
+## Restore file
+
+Restores a file that has been moved to the trash.
+
+An optional new parent ID can be provided to restore the file to in case the
+original folder has been deleted.
+
+This operation is performed by calling function `restoreFileFromTrash`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-id/).
+
+
+```
+client.getTrashedFiles().restoreFileFromTrash(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `RestoreFileFromTrashRequestBody`
+ - Request body of restoreFileFromTrash method
+- queryParams `RestoreFileFromTrashQueryParams`
+ - Query parameters of restoreFileFromTrash method
+- headers `RestoreFileFromTrashHeaders`
+ - Headers of restoreFileFromTrash method
+
+
+### Returns
+
+This function returns a value of type `TrashFileRestored`.
+
+Returns a file object when the file has been restored.
+
+
+## Get trashed file
+
+Retrieves a file that has been moved to the trash.
+
+Please note that only if the file itself has been moved to the
+trash can it be retrieved with this API call. If instead one of
+its parent folders was moved to the trash, only that folder
+can be inspected using the
+[`GET /folders/:id/trash`](https://developer.box.com/reference/get-folders-id-trash) API.
+
+To list all items that have been moved to the trash, please
+use the [`GET /folders/trash/items`](https://developer.box.com/reference/get-folders-trash-items/)
+API.
+
+This operation is performed by calling function `getTrashedFileById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-files-id-trash/).
+
+
+```
+client.getTrashedFiles().getTrashedFileById(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- queryParams `GetTrashedFileByIdQueryParams`
+ - Query parameters of getTrashedFileById method
+- headers `GetTrashedFileByIdHeaders`
+ - Headers of getTrashedFileById method
+
+
+### Returns
+
+This function returns a value of type `TrashFile`.
+
+Returns the file that was trashed,
+including information about when the it
+was moved to the trash.
+
+
+## Permanently remove file
+
+Permanently deletes a file that is in the trash.
+This action cannot be undone.
+
+This operation is performed by calling function `deleteTrashedFileById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-files-id-trash/).
+
+
+```
+client.getTrashedFiles().deleteTrashedFileById(file.getId())
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- headers `DeleteTrashedFileByIdHeaders`
+ - Headers of deleteTrashedFileById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the file was
+permanently deleted.
+
+
diff --git a/docs/trashedfolders.md b/docs/trashedfolders.md
new file mode 100644
index 000000000..c993858fc
--- /dev/null
+++ b/docs/trashedfolders.md
@@ -0,0 +1,124 @@
+# TrashedFoldersManager
+
+
+- [Restore folder](#restore-folder)
+- [Get trashed folder](#get-trashed-folder)
+- [Permanently remove folder](#permanently-remove-folder)
+
+## Restore folder
+
+Restores a folder that has been moved to the trash.
+
+An optional new parent ID can be provided to restore the folder to in case the
+original folder has been deleted.
+
+During this operation, part of the file tree will be locked, mainly
+the source folder and all of its descendants, as well as the destination
+folder.
+
+For the duration of the operation, no other move, copy, delete, or restore
+operation can performed on any of the locked folders.
+
+This operation is performed by calling function `restoreFolderFromTrash`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-folders-id/).
+
+
+```
+client.getTrashedFolders().restoreFolderFromTrash(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- requestBody `RestoreFolderFromTrashRequestBody`
+ - Request body of restoreFolderFromTrash method
+- queryParams `RestoreFolderFromTrashQueryParams`
+ - Query parameters of restoreFolderFromTrash method
+- headers `RestoreFolderFromTrashHeaders`
+ - Headers of restoreFolderFromTrash method
+
+
+### Returns
+
+This function returns a value of type `TrashFolderRestored`.
+
+Returns a folder object when the folder has been restored.
+
+
+## Get trashed folder
+
+Retrieves a folder that has been moved to the trash.
+
+Please note that only if the folder itself has been moved to the
+trash can it be retrieved with this API call. If instead one of
+its parent folders was moved to the trash, only that folder
+can be inspected using the
+[`GET /folders/:id/trash`](https://developer.box.com/reference/get-folders-id-trash) API.
+
+To list all items that have been moved to the trash, please
+use the [`GET /folders/trash/items`](https://developer.box.com/reference/get-folders-trash-items/)
+API.
+
+This operation is performed by calling function `getTrashedFolderById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-id-trash/).
+
+
+```
+client.getTrashedFolders().getTrashedFolderById(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- queryParams `GetTrashedFolderByIdQueryParams`
+ - Query parameters of getTrashedFolderById method
+- headers `GetTrashedFolderByIdHeaders`
+ - Headers of getTrashedFolderById method
+
+
+### Returns
+
+This function returns a value of type `TrashFolder`.
+
+Returns the folder that was trashed,
+including information about when the it
+was moved to the trash.
+
+
+## Permanently remove folder
+
+Permanently deletes a folder that is in the trash.
+This action cannot be undone.
+
+This operation is performed by calling function `deleteTrashedFolderById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-folders-id-trash/).
+
+
+```
+client.getTrashedFolders().deleteTrashedFolderById(folder.getId())
+```
+
+### Arguments
+
+- folderId `String`
+ - The unique identifier that represent a folder. The ID for any folder can be determined by visiting this folder in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/folder/123` the `folder_id` is `123`. The root folder of a Box account is always represented by the ID `0`. Example: "12345"
+- headers `DeleteTrashedFolderByIdHeaders`
+ - Headers of deleteTrashedFolderById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the folder was
+permanently deleted.
+
+
diff --git a/docs/trasheditems.md b/docs/trasheditems.md
new file mode 100644
index 000000000..d48d50648
--- /dev/null
+++ b/docs/trasheditems.md
@@ -0,0 +1,44 @@
+# TrashedItemsManager
+
+
+- [List trashed items](#list-trashed-items)
+
+## List trashed items
+
+Retrieves the files and folders that have been moved
+to the trash.
+
+Any attribute in the full files or folders objects can be passed
+in with the `fields` parameter to retrieve those specific
+attributes that are not returned by default.
+
+This endpoint defaults to use offset-based pagination, yet also supports
+marker-based pagination using the `marker` parameter.
+
+The number of entries returned may be less than `total_count`. For example, if a user deletes items from a shared folder and is later removed as a collaborator, those deleted items will no longer appear in this endpoint’s results, even though they are still included in `total_count`.
+
+This operation is performed by calling function `getTrashedItems`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-folders-trash-items/).
+
+
+```
+client.getTrashedItems().getTrashedItems()
+```
+
+### Arguments
+
+- queryParams `GetTrashedItemsQueryParams`
+ - Query parameters of getTrashedItems method
+- headers `GetTrashedItemsHeaders`
+ - Headers of getTrashedItems method
+
+
+### Returns
+
+This function returns a value of type `Items`.
+
+Returns a list of items that have been deleted.
+
+
diff --git a/docs/trashedweblinks.md b/docs/trashedweblinks.md
new file mode 100644
index 000000000..6a3e4b919
--- /dev/null
+++ b/docs/trashedweblinks.md
@@ -0,0 +1,107 @@
+# TrashedWebLinksManager
+
+
+- [Restore web link](#restore-web-link)
+- [Get trashed web link](#get-trashed-web-link)
+- [Permanently remove web link](#permanently-remove-web-link)
+
+## Restore web link
+
+Restores a web link that has been moved to the trash.
+
+An optional new parent ID can be provided to restore the web link to in case
+the original folder has been deleted.
+
+This operation is performed by calling function `restoreWeblinkFromTrash`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-web-links-id/).
+
+
+```
+client.getTrashedWebLinks().restoreWeblinkFromTrash(weblink.getId())
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- requestBody `RestoreWeblinkFromTrashRequestBody`
+ - Request body of restoreWeblinkFromTrash method
+- queryParams `RestoreWeblinkFromTrashQueryParams`
+ - Query parameters of restoreWeblinkFromTrash method
+- headers `RestoreWeblinkFromTrashHeaders`
+ - Headers of restoreWeblinkFromTrash method
+
+
+### Returns
+
+This function returns a value of type `TrashWebLinkRestored`.
+
+Returns a web link object when it has been restored.
+
+
+## Get trashed web link
+
+Retrieves a web link that has been moved to the trash.
+
+This operation is performed by calling function `getTrashedWebLinkById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-web-links-id-trash/).
+
+
+```
+client.getTrashedWebLinks().getTrashedWebLinkById(weblink.getId())
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- queryParams `GetTrashedWebLinkByIdQueryParams`
+ - Query parameters of getTrashedWebLinkById method
+- headers `GetTrashedWebLinkByIdHeaders`
+ - Headers of getTrashedWebLinkById method
+
+
+### Returns
+
+This function returns a value of type `TrashWebLink`.
+
+Returns the web link that was trashed,
+including information about when the it
+was moved to the trash.
+
+
+## Permanently remove web link
+
+Permanently deletes a web link that is in the trash.
+This action cannot be undone.
+
+This operation is performed by calling function `deleteTrashedWebLinkById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-web-links-id-trash/).
+
+
+```
+client.getTrashedWebLinks().deleteTrashedWebLinkById(weblink.getId())
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- headers `DeleteTrashedWebLinkByIdHeaders`
+ - Headers of deleteTrashedWebLinkById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Returns an empty response when the web link was
+permanently deleted.
+
+
diff --git a/docs/uploads.md b/docs/uploads.md
new file mode 100644
index 000000000..a3eb4721f
--- /dev/null
+++ b/docs/uploads.md
@@ -0,0 +1,144 @@
+# UploadsManager
+
+
+- [Upload file version](#upload-file-version)
+- [Preflight check before upload](#preflight-check-before-upload)
+- [Upload file](#upload-file)
+- [Upload a file with a preflight check](#upload-a-file-with-a-preflight-check)
+
+## Upload file version
+
+Update a file's content. For file sizes over 50MB we recommend
+using the Chunk Upload APIs.
+
+The `attributes` part of the body must come **before** the
+`file` part. Requests that do not follow this format when
+uploading the file will receive a HTTP `400` error with a
+`metadata_after_file_contents` error code.
+
+This operation is performed by calling function `uploadFileVersion`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-id-content/).
+
+
+```
+client.getUploads().uploadFileVersion(uploadedFile.getId(), new UploadFileVersionRequestBody(new UploadFileVersionRequestBodyAttributesField(newFileVersionName), newFileContentStream))
+```
+
+### Arguments
+
+- fileId `String`
+ - The unique identifier that represents a file. The ID for any file can be determined by visiting a file in the web application and copying the ID from the URL. For example, for the URL `https://*.app.box.com/files/123` the `file_id` is `123`. Example: "12345"
+- requestBody `UploadFileVersionRequestBody`
+ - Request body of uploadFileVersion method
+- queryParams `UploadFileVersionQueryParams`
+ - Query parameters of uploadFileVersion method
+- headers `UploadFileVersionHeaders`
+ - Headers of uploadFileVersion method
+
+
+### Returns
+
+This function returns a value of type `Files`.
+
+Returns the new file object in a list.
+
+
+## Preflight check before upload
+
+Performs a check to verify that a file will be accepted by Box
+before you upload the entire file.
+
+This operation is performed by calling function `preflightFileUploadCheck`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/options-files-content/).
+
+
+```
+client.getUploads().preflightFileUploadCheck(new PreflightFileUploadCheckRequestBody.Builder().name(newFileName).size(1024 * 1024).parent(new PreflightFileUploadCheckRequestBodyParentField.Builder().id("0").build()).build())
+```
+
+### Arguments
+
+- requestBody `PreflightFileUploadCheckRequestBody`
+ - Request body of preflightFileUploadCheck method
+- headers `PreflightFileUploadCheckHeaders`
+ - Headers of preflightFileUploadCheck method
+
+
+### Returns
+
+This function returns a value of type `UploadUrl`.
+
+If the check passed, the response will include a session URL that
+can be used to upload the file to.
+
+
+## Upload file
+
+Uploads a small file to Box. For file sizes over 50MB we recommend
+using the Chunk Upload APIs.
+
+The `attributes` part of the body must come **before** the
+`file` part. Requests that do not follow this format when
+uploading the file will receive a HTTP `400` error with a
+`metadata_after_file_contents` error code.
+
+This operation is performed by calling function `uploadFile`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-files-content/).
+
+
+```
+client.getUploads().uploadFile(new UploadFileRequestBody(new UploadFileRequestBodyAttributesField(newFileName, new UploadFileRequestBodyAttributesParentField("0")), fileContentStream))
+```
+
+### Arguments
+
+- requestBody `UploadFileRequestBody`
+ - Request body of uploadFile method
+- queryParams `UploadFileQueryParams`
+ - Query parameters of uploadFile method
+- headers `UploadFileHeaders`
+ - Headers of uploadFile method
+
+
+### Returns
+
+This function returns a value of type `Files`.
+
+Returns the new file object in a list.
+
+
+## Upload a file with a preflight check
+
+ Upload a file with a preflight check
+
+This operation is performed by calling function `uploadWithPreflightCheck`.
+
+
+
+```
+client.getUploads().uploadWithPreflightCheck(new UploadWithPreflightCheckRequestBody(new UploadWithPreflightCheckRequestBodyAttributesField(newFileName, new UploadWithPreflightCheckRequestBodyAttributesParentField("0"), -1), fileContentStream))
+```
+
+### Arguments
+
+- requestBody `UploadWithPreflightCheckRequestBody`
+
+- queryParams `UploadWithPreflightCheckQueryParams`
+ - Query parameters of uploadFile method
+- headers `UploadWithPreflightCheckHeaders`
+ - Headers of uploadFile method
+
+
+### Returns
+
+This function returns a value of type `Files`.
+
+
+
+
diff --git a/docs/usercollaborations.md b/docs/usercollaborations.md
new file mode 100644
index 000000000..b3bdaa50c
--- /dev/null
+++ b/docs/usercollaborations.md
@@ -0,0 +1,146 @@
+# UserCollaborationsManager
+
+
+- [Get collaboration](#get-collaboration)
+- [Update collaboration](#update-collaboration)
+- [Remove collaboration](#remove-collaboration)
+- [Create collaboration](#create-collaboration)
+
+## Get collaboration
+
+Retrieves a single collaboration.
+
+This operation is performed by calling function `getCollaborationById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-collaborations-id/).
+
+
+```
+client.getUserCollaborations().getCollaborationById(collaborationId)
+```
+
+### Arguments
+
+- collaborationId `String`
+ - The ID of the collaboration. Example: "1234"
+- queryParams `GetCollaborationByIdQueryParams`
+ - Query parameters of getCollaborationById method
+- headers `GetCollaborationByIdHeaders`
+ - Headers of getCollaborationById method
+
+
+### Returns
+
+This function returns a value of type `Collaboration`.
+
+Returns a collaboration object.
+
+
+## Update collaboration
+
+Updates a collaboration.
+Can be used to change the owner of an item, or to
+accept collaboration invites. In case of accepting collaboration invite, role is not required.
+
+This operation is performed by calling function `updateCollaborationById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-collaborations-id/).
+
+
+```
+client.getUserCollaborations().updateCollaborationById(collaborationId, new UpdateCollaborationByIdRequestBody.Builder().role(UpdateCollaborationByIdRequestBodyRoleField.VIEWER).build())
+```
+
+### Arguments
+
+- collaborationId `String`
+ - The ID of the collaboration. Example: "1234"
+- requestBody `UpdateCollaborationByIdRequestBody`
+ - Request body of updateCollaborationById method
+- headers `UpdateCollaborationByIdHeaders`
+ - Headers of updateCollaborationById method
+
+
+### Returns
+
+This function returns a value of type `Collaboration`.
+
+Returns an updated collaboration object unless the owner has changed.If the role is changed to `owner`, the collaboration is deleted
+and a new collaboration is created. The previous `owner` of
+the old collaboration will be a `co-owner` on the new collaboration.
+
+
+## Remove collaboration
+
+Deletes a single collaboration.
+
+This operation is performed by calling function `deleteCollaborationById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-collaborations-id/).
+
+
+```
+client.getUserCollaborations().deleteCollaborationById(collaborationId)
+```
+
+### Arguments
+
+- collaborationId `String`
+ - The ID of the collaboration. Example: "1234"
+- headers `DeleteCollaborationByIdHeaders`
+ - Headers of deleteCollaborationById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+A blank response is returned if the collaboration was
+successfully deleted.
+
+
+## Create collaboration
+
+Adds a collaboration for a single user or a single group to a file
+or folder.
+
+Collaborations can be created using email address, user IDs, or a
+group IDs.
+
+If a collaboration is being created with a group, access to
+this endpoint is dependent on the group's ability to be invited.
+
+If collaboration is in `pending` status, field `name` is redacted when:
+- a collaboration was created using `user_id`,
+- a collaboration was created using `login`.
+
+This operation is performed by calling function `createCollaboration`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-collaborations/).
+
+
+```
+client.getUserCollaborations().createCollaboration(new CreateCollaborationRequestBody(new CreateCollaborationRequestBodyItemField.Builder().type(CreateCollaborationRequestBodyItemTypeField.FOLDER).id(folder.getId()).build(), new CreateCollaborationRequestBodyAccessibleByField.Builder(CreateCollaborationRequestBodyAccessibleByTypeField.USER).id(user.getId()).build(), CreateCollaborationRequestBodyRoleField.EDITOR))
+```
+
+### Arguments
+
+- requestBody `CreateCollaborationRequestBody`
+ - Request body of createCollaboration method
+- queryParams `CreateCollaborationQueryParams`
+ - Query parameters of createCollaboration method
+- headers `CreateCollaborationHeaders`
+ - Headers of createCollaboration method
+
+
+### Returns
+
+This function returns a value of type `Collaboration`.
+
+Returns a new collaboration object.
+
+
diff --git a/docs/users.md b/docs/users.md
new file mode 100644
index 000000000..3eb493ae0
--- /dev/null
+++ b/docs/users.md
@@ -0,0 +1,230 @@
+# UsersManager
+
+
+- [List enterprise users](#list-enterprise-users)
+- [Create user](#create-user)
+- [Get current user](#get-current-user)
+- [Get user](#get-user)
+- [Update user](#update-user)
+- [Delete user](#delete-user)
+
+## List enterprise users
+
+Returns a list of all users for the Enterprise along with their `user_id`,
+`public_name`, and `login`.
+
+The application and the authenticated user need to
+have the permission to look up users in the entire
+enterprise.
+
+This operation is performed by calling function `getUsers`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-users/).
+
+
+```
+client.getUsers().getUsers()
+```
+
+### Arguments
+
+- queryParams `GetUsersQueryParams`
+ - Query parameters of getUsers method
+- headers `GetUsersHeaders`
+ - Headers of getUsers method
+
+
+### Returns
+
+This function returns a value of type `Users`.
+
+Returns all of the users in the enterprise.
+
+
+## Create user
+
+Creates a new managed user in an enterprise. This endpoint
+is only available to users and applications with the right
+admin permissions.
+
+This operation is performed by calling function `createUser`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-users/).
+
+
+```
+client.getUsers().createUser(new CreateUserRequestBody.Builder(userName).login(userLogin).isPlatformAccessOnly(true).build())
+```
+
+### Arguments
+
+- requestBody `CreateUserRequestBody`
+ - Request body of createUser method
+- queryParams `CreateUserQueryParams`
+ - Query parameters of createUser method
+- headers `CreateUserHeaders`
+ - Headers of createUser method
+
+
+### Returns
+
+This function returns a value of type `UserFull`.
+
+Returns a user object for the newly created user.
+
+
+## Get current user
+
+Retrieves information about the user who is currently authenticated.
+
+In the case of a client-side authenticated OAuth 2.0 application
+this will be the user who authorized the app.
+
+In the case of a JWT, server-side authenticated application
+this will be the service account that belongs to the application
+by default.
+
+Use the `As-User` header to change who this API call is made on behalf of.
+
+This operation is performed by calling function `getUserMe`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-users-me/).
+
+
+```
+client.getUsers().getUserMe()
+```
+
+### Arguments
+
+- queryParams `GetUserMeQueryParams`
+ - Query parameters of getUserMe method
+- headers `GetUserMeHeaders`
+ - Headers of getUserMe method
+
+
+### Returns
+
+This function returns a value of type `UserFull`.
+
+Returns a single user object.
+
+
+## Get user
+
+Retrieves information about a user in the enterprise.
+
+The application and the authenticated user need to
+have the permission to look up users in the entire
+enterprise.
+
+This endpoint also returns a limited set of information
+for external users who are collaborated on content
+owned by the enterprise for authenticated users with the
+right scopes. In this case, disallowed fields will return
+null instead.
+
+This operation is performed by calling function `getUserById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-users-id/).
+
+
+```
+client.getUsers().getUserById(user.getId())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- queryParams `GetUserByIdQueryParams`
+ - Query parameters of getUserById method
+- headers `GetUserByIdHeaders`
+ - Headers of getUserById method
+
+
+### Returns
+
+This function returns a value of type `UserFull`.
+
+Returns a single user object.
+
+Not all available fields are returned by default. Use the
+[fields](#parameter-fields) query parameter to explicitly request
+any specific fields using the [fields](#parameter-fields)
+parameter.
+
+
+## Update user
+
+Updates a managed or app user in an enterprise. This endpoint
+is only available to users and applications with the right
+admin permissions.
+
+This operation is performed by calling function `updateUserById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-users-id/).
+
+
+```
+client.getUsers().updateUserById(user.getId(), new UpdateUserByIdRequestBody.Builder().name(updatedUserName).build())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- requestBody `UpdateUserByIdRequestBody`
+ - Request body of updateUserById method
+- queryParams `UpdateUserByIdQueryParams`
+ - Query parameters of updateUserById method
+- headers `UpdateUserByIdHeaders`
+ - Headers of updateUserById method
+
+
+### Returns
+
+This function returns a value of type `UserFull`.
+
+Returns the updated user object.
+
+
+## Delete user
+
+Deletes a user. By default, this operation fails if the user
+still owns any content.
+To proceed, move their owned content first, or use the `force` parameter to delete
+the user and their files.
+
+This operation is performed by calling function `deleteUserById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-users-id/).
+
+
+```
+client.getUsers().deleteUserById(user.getId())
+```
+
+### Arguments
+
+- userId `String`
+ - The ID of the user. Example: "12345"
+- queryParams `DeleteUserByIdQueryParams`
+ - Query parameters of deleteUserById method
+- headers `DeleteUserByIdHeaders`
+ - Headers of deleteUserById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Removes the user and returns an empty response.
+
+
diff --git a/docs/webhooks.md b/docs/webhooks.md
new file mode 100644
index 000000000..06989090a
--- /dev/null
+++ b/docs/webhooks.md
@@ -0,0 +1,196 @@
+# WebhooksManager
+
+
+- [List all webhooks](#list-all-webhooks)
+- [Create webhook](#create-webhook)
+- [Get webhook](#get-webhook)
+- [Update webhook](#update-webhook)
+- [Remove webhook](#remove-webhook)
+- [Validate a webhook message](#validate-a-webhook-message)
+
+## List all webhooks
+
+Returns all defined webhooks for the requesting application.
+
+This API only returns webhooks that are applied to files or folders that are
+owned by the authenticated user. This means that an admin can not see webhooks
+created by a service account unless the admin has access to those folders, and
+vice versa.
+
+This operation is performed by calling function `getWebhooks`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-webhooks/).
+
+
+```
+client.getWebhooks().getWebhooks()
+```
+
+### Arguments
+
+- queryParams `GetWebhooksQueryParams`
+ - Query parameters of getWebhooks method
+- headers `GetWebhooksHeaders`
+ - Headers of getWebhooks method
+
+
+### Returns
+
+This function returns a value of type `Webhooks`.
+
+Returns a list of webhooks.
+
+
+## Create webhook
+
+Creates a webhook.
+
+This operation is performed by calling function `createWebhook`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-webhooks/).
+
+
+```
+client.getWebhooks().createWebhook(new CreateWebhookRequestBody(new CreateWebhookRequestBodyTargetField.Builder().id(folder.getId()).type(CreateWebhookRequestBodyTargetTypeField.FOLDER).build(), "https://example.com/new-webhook", Arrays.asList(CreateWebhookRequestBodyTriggersField.FILE_UPLOADED)))
+```
+
+### Arguments
+
+- requestBody `CreateWebhookRequestBody`
+ - Request body of createWebhook method
+- headers `CreateWebhookHeaders`
+ - Headers of createWebhook method
+
+
+### Returns
+
+This function returns a value of type `Webhook`.
+
+Returns the new webhook object.
+
+
+## Get webhook
+
+Retrieves a specific webhook.
+
+This operation is performed by calling function `getWebhookById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-webhooks-id/).
+
+
+```
+client.getWebhooks().getWebhookById(webhook.getId())
+```
+
+### Arguments
+
+- webhookId `String`
+ - The ID of the webhook. Example: "3321123"
+- headers `GetWebhookByIdHeaders`
+ - Headers of getWebhookById method
+
+
+### Returns
+
+This function returns a value of type `Webhook`.
+
+Returns a webhook object.
+
+
+## Update webhook
+
+Updates a webhook.
+
+This operation is performed by calling function `updateWebhookById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-webhooks-id/).
+
+
+```
+client.getWebhooks().updateWebhookById(webhook.getId(), new UpdateWebhookByIdRequestBody.Builder().address("https://example.com/updated-webhook").build())
+```
+
+### Arguments
+
+- webhookId `String`
+ - The ID of the webhook. Example: "3321123"
+- requestBody `UpdateWebhookByIdRequestBody`
+ - Request body of updateWebhookById method
+- headers `UpdateWebhookByIdHeaders`
+ - Headers of updateWebhookById method
+
+
+### Returns
+
+This function returns a value of type `Webhook`.
+
+Returns the new webhook object.
+
+
+## Remove webhook
+
+Deletes a webhook.
+
+This operation is performed by calling function `deleteWebhookById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-webhooks-id/).
+
+
+```
+client.getWebhooks().deleteWebhookById(webhook.getId())
+```
+
+### Arguments
+
+- webhookId `String`
+ - The ID of the webhook. Example: "3321123"
+- headers `DeleteWebhookByIdHeaders`
+ - Headers of deleteWebhookById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+An empty response will be returned when the webhook
+was successfully deleted.
+
+
+## Validate a webhook message
+
+Validate a webhook message by verifying the signature and the delivery timestamp
+
+This operation is performed by calling function `validateMessage`.
+
+
+
+```
+WebhooksManager.validateMessage(body, headersWithCorrectDatetime, primaryKey, secondaryKey)
+```
+
+### Arguments
+
+- body `String`
+ - The request body of the webhook message
+- headers `Map`
+ - The headers of the webhook message
+- primaryKey `String`
+ - The primary signature to verify the message with
+- secondaryKey `String`
+ - The secondary signature to verify the message with
+- maxAge `Integer`
+ - The maximum age of the message in seconds, defaults to 10 minutes
+
+
+### Returns
+
+This function returns a value of type `boolean`.
+
+
+
+
diff --git a/docs/weblinks.md b/docs/weblinks.md
new file mode 100644
index 000000000..14e0cefdb
--- /dev/null
+++ b/docs/weblinks.md
@@ -0,0 +1,127 @@
+# WebLinksManager
+
+
+- [Create web link](#create-web-link)
+- [Get web link](#get-web-link)
+- [Update web link](#update-web-link)
+- [Remove web link](#remove-web-link)
+
+## Create web link
+
+Creates a web link object within a folder.
+
+This operation is performed by calling function `createWebLink`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-web-links/).
+
+
+```
+client.getWebLinks().createWebLink(new CreateWebLinkRequestBody.Builder(url, new CreateWebLinkRequestBodyParentField(parent.getId())).name(name).description(description).build())
+```
+
+### Arguments
+
+- requestBody `CreateWebLinkRequestBody`
+ - Request body of createWebLink method
+- headers `CreateWebLinkHeaders`
+ - Headers of createWebLink method
+
+
+### Returns
+
+This function returns a value of type `WebLink`.
+
+Returns the newly created web link object.
+
+
+## Get web link
+
+Retrieve information about a web link.
+
+This operation is performed by calling function `getWebLinkById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-web-links-id/).
+
+
+```
+client.getWebLinks().getWebLinkById(weblink.getId())
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- headers `GetWebLinkByIdHeaders`
+ - Headers of getWebLinkById method
+
+
+### Returns
+
+This function returns a value of type `WebLink`.
+
+Returns the web link object.
+
+
+## Update web link
+
+Updates a web link object.
+
+This operation is performed by calling function `updateWebLinkById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/put-web-links-id/).
+
+
+```
+client.getWebLinks().updateWebLinkById(weblink.getId(), new UpdateWebLinkByIdRequestBody.Builder().name(updatedName).sharedLink(new UpdateWebLinkByIdRequestBodySharedLinkField.Builder().access(UpdateWebLinkByIdRequestBodySharedLinkAccessField.OPEN).password(password).build()).build())
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- requestBody `UpdateWebLinkByIdRequestBody`
+ - Request body of updateWebLinkById method
+- headers `UpdateWebLinkByIdHeaders`
+ - Headers of updateWebLinkById method
+
+
+### Returns
+
+This function returns a value of type `WebLink`.
+
+Returns the updated web link object.
+
+
+## Remove web link
+
+Deletes a web link.
+
+This operation is performed by calling function `deleteWebLinkById`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/delete-web-links-id/).
+
+
+```
+client.getWebLinks().deleteWebLinkById(weblink.getId())
+```
+
+### Arguments
+
+- webLinkId `String`
+ - The ID of the web link. Example: "12345"
+- headers `DeleteWebLinkByIdHeaders`
+ - Headers of deleteWebLinkById method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+An empty response will be returned when the web link
+was successfully deleted.
+
+
diff --git a/docs/workflows.md b/docs/workflows.md
new file mode 100644
index 000000000..f3ca3b98b
--- /dev/null
+++ b/docs/workflows.md
@@ -0,0 +1,73 @@
+# WorkflowsManager
+
+
+- [List workflows](#list-workflows)
+- [Starts workflow based on request body](#starts-workflow-based-on-request-body)
+
+## List workflows
+
+Returns list of workflows that act on a given `folder ID`, and
+have a flow with a trigger type of `WORKFLOW_MANUAL_START`.
+
+You application must be authorized to use the `Manage Box Relay` application
+scope within the developer console in to use this endpoint.
+
+This operation is performed by calling function `getWorkflows`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-workflows/).
+
+
+```
+adminClient.getWorkflows().getWorkflows(new GetWorkflowsQueryParams(workflowFolderId))
+```
+
+### Arguments
+
+- queryParams `GetWorkflowsQueryParams`
+ - Query parameters of getWorkflows method
+- headers `GetWorkflowsHeaders`
+ - Headers of getWorkflows method
+
+
+### Returns
+
+This function returns a value of type `Workflows`.
+
+Returns the workflow.
+
+
+## Starts workflow based on request body
+
+Initiates a flow with a trigger type of `WORKFLOW_MANUAL_START`.
+
+You application must be authorized to use the `Manage Box Relay` application
+scope within the developer console.
+
+This operation is performed by calling function `startWorkflow`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-workflows-id-start/).
+
+
+```
+adminClient.getWorkflows().startWorkflow(workflowToRun.getId(), new StartWorkflowRequestBody.Builder(new StartWorkflowRequestBodyFlowField.Builder().type("flow").id(workflowToRun.getFlows().get(0).getId()).build(), Arrays.asList(new StartWorkflowRequestBodyFilesField.Builder().type(StartWorkflowRequestBodyFilesTypeField.FILE).id(workflowFileId).build()), new StartWorkflowRequestBodyFolderField.Builder().type(StartWorkflowRequestBodyFolderTypeField.FOLDER).id(workflowFolderId).build()).type(StartWorkflowRequestBodyTypeField.WORKFLOW_PARAMETERS).build())
+```
+
+### Arguments
+
+- workflowId `String`
+ - The ID of the workflow. Example: "12345"
+- requestBody `StartWorkflowRequestBody`
+ - Request body of startWorkflow method
+- headers `StartWorkflowHeaders`
+ - Headers of startWorkflow method
+
+
+### Returns
+
+This function returns a value of type `void`.
+
+Starts the workflow.
+
+
diff --git a/docs/zipdownloads.md b/docs/zipdownloads.md
new file mode 100644
index 000000000..085ba3384
--- /dev/null
+++ b/docs/zipdownloads.md
@@ -0,0 +1,163 @@
+# ZipDownloadsManager
+
+
+- [Create zip download](#create-zip-download)
+- [Download zip archive](#download-zip-archive)
+- [Get zip download status](#get-zip-download-status)
+- [Download ZIP](#download-zip)
+
+## Create zip download
+
+Creates a request to download multiple files and folders as a single `zip`
+archive file. This API does not return the archive but instead performs all
+the checks to ensure that the user has access to all the items, and then
+returns a `download_url` and a `status_url` that can be used to download the
+archive.
+
+The limit for an archive is either the Account's upload limit or
+10,000 files, whichever is met first.
+
+**Note**: Downloading a large file can be
+affected by various
+factors such as distance, network latency,
+bandwidth, and congestion, as well as packet loss
+ratio and current server load.
+For these reasons we recommend that a maximum ZIP archive
+total size does not exceed 25GB.
+
+This operation is performed by calling function `createZipDownload`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/post-zip-downloads/).
+
+
+```
+client.getZipDownloads().createZipDownload(new ZipDownloadRequest.Builder(Arrays.asList(new ZipDownloadRequestItemsField(ZipDownloadRequestItemsTypeField.FILE, file1.getId()), new ZipDownloadRequestItemsField(ZipDownloadRequestItemsTypeField.FILE, file2.getId()), new ZipDownloadRequestItemsField(ZipDownloadRequestItemsTypeField.FOLDER, folder1.getId()))).downloadFileName("zip").build())
+```
+
+### Arguments
+
+- requestBody `ZipDownloadRequest`
+ - Request body of createZipDownload method
+- headers `CreateZipDownloadHeaders`
+ - Headers of createZipDownload method
+
+
+### Returns
+
+This function returns a value of type `ZipDownload`.
+
+If the `zip` archive is ready to be downloaded, the API will return a
+response that will include a `download_url`, a `status_url`, as well as
+any conflicts that might have occurred when creating the request.
+
+
+## Download zip archive
+
+Returns the contents of a `zip` archive in binary format. This URL does not
+require any form of authentication and could be used in a user's browser to
+download the archive to a user's device.
+
+By default, this URL is only valid for a few seconds from the creation of
+the request for this archive. Once a download has started it can not be
+stopped and resumed, instead a new request for a zip archive would need to
+be created.
+
+The URL of this endpoint should not be considered as fixed. Instead, use
+the [Create zip download](https://developer.box.com/reference/post-zip-downloads) API to request to create a
+`zip` archive, and then follow the `download_url` field in the response to
+this endpoint.
+
+This operation is performed by calling function `getZipDownloadContent`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-zip-downloads-id-content/).
+
+
+```
+client.getZipDownloads().getZipDownloadContent(zipDownload.getDownloadUrl())
+```
+
+### Arguments
+
+- downloadUrl `String`
+ - The URL that can be used to download created `zip` archive. Example: `https://dl.boxcloud.com/2.0/zip_downloads/29l00nfxDyHOt7RphI9zT_w==nDnZEDjY2S8iEWWCHEEiptFxwoWojjlibZjJ6geuE5xnXENDTPxzgbks_yY=/content`
+- headers `GetZipDownloadContentHeaders`
+ - Headers of getZipDownloadContent method
+
+
+### Returns
+
+This function returns a value of type `InputStream`.
+
+Returns the content of the items requested for this download, formatted as
+a stream of files and folders in a `zip` archive.
+
+
+## Get zip download status
+
+Returns the download status of a `zip` archive, allowing an application to
+inspect the progress of the download as well as the number of items that
+might have been skipped.
+
+This endpoint can only be accessed once the download has started.
+Subsequently this endpoint is valid for 12 hours from the start of the
+download.
+
+The URL of this endpoint should not be considered as fixed. Instead, use
+the [Create zip download](https://developer.box.com/reference/post-zip-downloads) API to request to create a
+`zip` archive, and then follow the `status_url` field in the response to
+this endpoint.
+
+This operation is performed by calling function `getZipDownloadStatus`.
+
+See the endpoint docs at
+[API Reference](https://developer.box.com/reference/get-zip-downloads-id-status/).
+
+
+```
+client.getZipDownloads().getZipDownloadStatus(zipDownload.getStatusUrl())
+```
+
+### Arguments
+
+- statusUrl `String`
+ - The URL that can be used to get the status of the `zip` archive being downloaded. Example: `https://dl.boxcloud.com/2.0/zip_downloads/29l00nfxDyHOt7RphI9zT_w==nDnZEDjY2S8iEWWCHEEiptFxwoWojjlibZjJ6geuE5xnXENDTPxzgbks_yY=/status`
+- headers `GetZipDownloadStatusHeaders`
+ - Headers of getZipDownloadStatus method
+
+
+### Returns
+
+This function returns a value of type `ZipDownloadStatus`.
+
+Returns the status of the `zip` archive that is being downloaded.
+
+
+## Download ZIP
+
+Creates a zip and downloads its content
+
+This operation is performed by calling function `downloadZip`.
+
+
+
+```
+client.getZipDownloads().downloadZip(new ZipDownloadRequest.Builder(Arrays.asList(new ZipDownloadRequestItemsField(ZipDownloadRequestItemsTypeField.FILE, file1.getId()), new ZipDownloadRequestItemsField(ZipDownloadRequestItemsTypeField.FILE, file2.getId()), new ZipDownloadRequestItemsField(ZipDownloadRequestItemsTypeField.FOLDER, folder1.getId()))).downloadFileName("zip").build())
+```
+
+### Arguments
+
+- requestBody `ZipDownloadRequest`
+ - Zip download request body
+- headers `DownloadZipHeaders`
+ - Headers of zip download method
+
+
+### Returns
+
+This function returns a value of type `InputStream`.
+
+
+
+
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 000000000..384f02a41
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,15 @@
+libraryJavaVersion=1.8
+spotlessVersion=6.2.0
+jacksonAnnotationVersion=2.21
+jacksonCoreVersion=2.21.4
+jacksonDatabindVersion=2.21.4
+okhttpVersion=4.12.0
+okioVersion=3.5.0
+jose4jVersion=0.9.6
+bouncyCastleBcprovJdk18onVersion=1.84
+bouncyCastleBcpkixJdk18onVersion=1.84
+junitApiVersion=5.10.0
+junitEngineVersion=5.10.0
+googleJavaFormatVersion=1.7
+coverallsJacocoVersion=1.2.14
+testRetryVersion=1.5.6
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index d64cd4917..a4b76b953 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 002b867c4..0aaefbcaf 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
index 1aa94a426..f5feea6d6 100755
--- a/gradlew
+++ b/gradlew
@@ -15,6 +15,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
+# SPDX-License-Identifier: Apache-2.0
+#
##############################################################################
#
@@ -55,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
-# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -84,7 +86,8 @@ done
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
-APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
+' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
diff --git a/gradlew.bat b/gradlew.bat
index 6689b85be..9b42019c7 100644
--- a/gradlew.bat
+++ b/gradlew.bat
@@ -13,6 +13,8 @@
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
+@rem SPDX-License-Identifier: Apache-2.0
+@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@@ -43,11 +45,11 @@ set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
-echo.
-echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
@@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
+echo. 1>&2
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
+echo. 1>&2
+echo Please set the JAVA_HOME variable in your environment to match the 1>&2
+echo location of your Java installation. 1>&2
goto fail
diff --git a/migration-guides/from-box-java-sdk-gen-v0-to-box-java-sdk.md b/migration-guides/from-box-java-sdk-gen-v0-to-box-java-sdk.md
new file mode 100644
index 000000000..33d6b8bc0
--- /dev/null
+++ b/migration-guides/from-box-java-sdk-gen-v0-to-box-java-sdk.md
@@ -0,0 +1,248 @@
+# Migration guide from beta release (v0.X.Y) of the `box-java-sdk-gen` to the `box-java-sdk`
+
+Note: This guide applies only to migrations targeting Box Java SDK v5.X.Y or v10.X.Y.
+It does not apply to other major versions (e.g., v6.X, v11.X).
+
+
+
+
+- [Introduction](#introduction)
+- [Installation](#installation)
+ - [How to migrate](#how-to-migrate)
+ - [Maven](#maven)
+ - [Gradle](#gradle)
+- [Union classes name changes](#union-classes-name-changes)
+ - [How to migrate](#how-to-migrate-1)
+- [Removed unused models from schemas namespace](#removed-unused-models-from-schemas-namespace)
+ - [How to migrate](#how-to-migrate-2)
+- [Usage](#usage)
+ - [Using the Box Java SDK v10](#using-the-box-java-sdk-v10)
+ - [Using the Box Java SDK v5](#using-the-box-java-sdk-v5)
+
+
+
+## Introduction
+
+From the `box-java-sdk-gen` you can migrate either to v5 or v10 of the Box Java SDK.
+Your choice should depend on whether you want to continue using the manually maintained SDK (Box Java SDK v4) alongside the generated one or not.
+
+The v5 version of the Box Java SDK consolidates both the legacy SDK package `com.box.sdk` and the generated one `com.box.sdkgen`.
+
+- If previously you were using both artifacts `box-java-sdk` v4 and `box-java-sdk-gen` v0, migrate to v5 version of the Box Java SDK which consolidates `com.box.sdk` and `com.box.sdkgen` packages.
+- If you were only using the generated artifact `box-java-sdk-gen`, migrate to v10 version of the Box Java SDK which contains only the generated `com.box.sdkgen` package.
+
+| Scenario | Your current usage | Recommended target | Packages included in target | Why this choice | Notes |
+| -------------------------------------------- | ---------------------------------------------------------- | ------------------ | ----------------------------------------------------- | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ |
+| Using both manual and generated SDK together | `com.box.sdk` v4 + `com.box.sdkgen` v0 in the same project | v5.X.Y | `com.box.sdk` (manual) + `com.box.sdkgen` (generated) | Keep existing v4 code while adopting new features from the generated SDK | Run both modules side by side; use type aliases to avoid name conflicts if necessary |
+| Using only the generated SDK | `com.box.sdkgen` v0 only | v10.X.Y | `com.box.sdkgen` (generated) only | Clean upgrade path with no legacy module; simpler dependency surface | Best when you don’t need the manual `com.box.sdk` package |
+
+## Installation
+
+In order to start using v5 or v10 version of the Box Java SDK, you need to change the dependency in your project.
+The artifact name has changed from `com.box:box-java-sdk-gen` to `com.box:box-java-sdk`.
+You also need to set the version to `5.X.Y` if you are migrating to v5 or `10.X.Y` if you are migrating to v10.
+You can find the latest version on [Maven Central](https://search.maven.org/artifact/com.box/box-java-sdk).
+
+### How to migrate
+
+#### Maven
+
+To start using v5 or v10 version of Box Java SDK in your Maven project replace the dependency in your `pom.xml` file.
+
+**Old (`box-java-sdk-gen-v0`)**
+
+```xml
+
+ com.box
+ box-java-sdk-gen
+ 0.8.0
+
+```
+
+**New (`box-java-sdk-v10`)**
+
+```xml
+
+ com.box
+ box-java-sdk
+ 10.0.0
+
+```
+
+**New (`box-java-sdk-v5`)**
+
+```xml
+
+ com.box
+ box-java-sdk
+ 5.0.0
+
+```
+
+#### Gradle
+
+To start using v5 or v10 version of Box Java SDK in your Gradle project replace the dependency in your `build.gradle` file.
+
+**Old (`box-java-sdk-gen-v0`)**
+
+```groovy
+implementation 'com.box:box-java-sdk-gen:0.8.0'
+```
+
+**New (`box-java-sdk-v10`)**
+
+```groovy
+implementation 'com.box:box-java-sdk:10.0.0'
+```
+
+**New (`box-java-sdk-v5`)**
+
+```groovy
+implementation 'com.box:box-java-sdk:5.0.0'
+```
+
+## Union classes name changes
+
+In the beta version of the `box-java-sdk-gen` our `OneOf` class names (representing unions from the OpenAPI specification)
+were fully auto-generated based on the included variants. This often resulted in overly long names that were difficult
+to work with in tools like Git. For example: `MetadataFieldFilterDateRangeOrMetadataFieldFilterFloatRangeOrArrayOfStringOrNumberOrString`.
+Additionally, every time the new variant was added to the `OneOf`, the class name itself changed.
+Starting in v10, the names of `OneOf` classes are defined directly in the specification. This ensures that they are meaningful, short, and stable over time.
+
+### How to migrate
+
+If your code references any of the renamed classes, replace the old name with the new one.
+If you were not explicitly using the type names, no changes are needed, since only the class names changed and their behavior remains the same.
+
+List of changed `OneOf` classes and types associated with them:
+
+| Old name | New name |
+| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ |
+| AiAgentAskOrAiAgentExtractOrAiAgentExtractStructuredOrAiAgentTextGen | AiAgent |
+| AiAgentAskOrAiAgentReference | AiAskAgent |
+| AiAgentExtractOrAiAgentReference | AiExtractAgent |
+| AiAgentExtractStructuredOrAiAgentReference | AiExtractStructuredAgent |
+| AiAgentReferenceOrAiAgentTextGen | AiTextGenAgent |
+| AppItemEventSourceOrEventSourceOrFileOrFolderOrGenericSourceOrUser | EventSourceResource |
+| FileBaseOrFolderBaseOrWebLinkBase | AppItemAssociatedItem |
+| FileFullOrFolderFull | MetadataQueryResultItem |
+| FileFullOrFolderFullOrWebLink | SearchResultWithSharedLinkItem/RecentItemResource/SearchResultItem |
+| FileFullOrFolderMiniOrWebLink | Item |
+| FileMiniOrFolderMini | Resource |
+| FileOrFolderOrWebLink | LegalHoldPolicyAssignedItem/CollaborationItem |
+| FileOrFolderScope | ResourceScope |
+| FileOrFolderScopeScopeField | ResourceScopeScopeField |
+| FileReferenceOrFolderReferenceOrWeblinkReferenceV2025R0 | HubItemReferenceV2025R0 |
+| GroupMiniOrUserCollaborations | CollaborationAccessGrantee |
+| IntegrationMappingPartnerItemSlackUnion | IntegrationMappingPartnerItemSlack |
+| IntegrationMappingPartnerItemTeamsUnion | IntegrationMappingPartnerItemTeams |
+| KeywordSkillCardOrStatusSkillCardOrTimelineSkillCardOrTranscriptSkillCard | SkillCard |
+| MetadataFieldFilterDateRangeOrMetadataFieldFilterFloatRangeOrArrayOfStringOrNumberOrString | MetadataFilterValue |
+| SearchResultsOrSearchResultsWithSharedLinks | SearchResultsResponse |
+
+Some classes were split into multiple ones depending on context.
+
+Manager functions affected by these changes:
+
+| Function | Old return type | New return type |
+| -------------------------------------- | -------------------------------------------------------------------- | --------------------- |
+| AiManager.getAiAgentDefaultConfig(...) | AiAgentAskOrAiAgentExtractOrAiAgentExtractStructuredOrAiAgentTextGen | AiAgent |
+| SearchManager.searchForContent(...) | SearchResultsOrSearchResultsWithSharedLinks | SearchResultsResponse |
+
+## Removed unused models from schemas namespace
+
+Several unused types (classes and enums) have been removed from the schemas because they were not used by any SDK functions or by the Box API.
+
+### How to migrate
+
+Here is the full list of removed types:
+
+| Removed classes/enums |
+| ------------------------------------------ |
+| FileOrFolder |
+| HubActionV2025R0 |
+| MetadataQueryIndex |
+| MetadataQueryIndexFieldsField |
+| MetadataQueryIndexFieldsSortDirectionField |
+| MetadataQueryIndexStatusField |
+| RetentionPolicyAssignmentBase |
+| RetentionPolicyAssignmentBaseTypeField |
+| SkillInvocation |
+| SkillInvocationEnterpriseField |
+| SkillInvocationEnterpriseTypeField |
+| SkillInvocationSkillField |
+| SkillInvocationSkillTypeField |
+| SkillInvocationStatusField |
+| SkillInvocationStatusStateField |
+| SkillInvocationTokenField |
+| SkillInvocationTokenReadField |
+| SkillInvocationTokenReadTokenTypeField |
+| SkillInvocationTokenWriteField |
+| SkillInvocationTokenWriteTokenTypeField |
+| SkillInvocationTypeField |
+| WebhookInvocation |
+| WebhookInvocationTriggerField |
+| WebhookInvocationTypeField |
+| WorkflowFull |
+
+If your code references any of these types, remove those references.
+
+## Usage
+
+### Using the Box Java SDK v10
+
+After migration from `box-java-sdk-gen` to the `box-java-sdk` v10, you can still use the `com.box.sdkgen` package in the same way as before.
+To access the client for interacting with the Box API, simply import `BoxClient` and any other necessary classes from the `com.box.sdkgen` package.
+
+```java
+import com.box.sdkgen.client.BoxClient;
+import com.box.sdkgen.box.developertokenauth.BoxDeveloperTokenAuth;
+
+BoxDeveloperTokenAuth auth = new BoxDeveloperTokenAuth("DEVELOPER_TOKEN");
+BoxClient client = new BoxClient(auth);
+client.folders.getFolderItems("0").getEntries().forEach(item -> {
+ System.out.println(item.toString());
+ });
+```
+
+### Using the Box Java SDK v5
+
+After migration to Box Java SDK v5, you can use both the manual Box Java SDK package `com.box.sdk` and the generated one `com.box.sdkgen`.
+You just need to import the required classes from the appropriate package depending on which SDK you intend to use.
+If both packages contain classes with the same name, you can use fully qualified names to resolve any naming conflicts.
+
+```java
+import com.box.sdk.BoxConfig;
+import com.box.sdk.BoxDeveloperEditionAPIConnection;
+
+import com.box.sdk.BoxFolder;
+import com.box.sdkgen.box.jwtauth.BoxJWTAuth;
+import com.box.sdkgen.box.jwtauth.JWTConfig;
+import com.box.sdkgen.client.BoxClient;
+import com.box.sdkgen.managers.folders.UpdateFolderByIdRequestBody;
+import com.box.sdkgen.schemas.folder.Folder;
+
+import java.io.FileReader;
+import java.io.Reader;
+
+public class Main {
+ public static void main(String[] args) throws Exception {
+
+ Reader reader = new FileReader("src/example/config/config.json");
+ BoxConfig boxConfig = BoxConfig.readFrom(reader);
+ BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig);
+
+ JWTConfig config = JWTConfig.fromConfigFile("src/example/config/config.json");
+ BoxJWTAuth auth = new BoxJWTAuth(config);
+ BoxClient client = new BoxClient(auth);
+
+ BoxFolder rootFolder = new BoxFolder(api, "0");
+ BoxFolder.Info subfolder = rootFolder.createFolder("My Subfolder");
+ Folder updatedFolder = client.getFolders().updateFolderById(
+ subfolder.getID(),
+ new UpdateFolderByIdRequestBody.Builder().name("My Updated Subfolder").build()
+ );
+ System.out.println("Created folder with ID " + subfolder.getID() + " has been updated to " + updatedFolder.getName());
+ }
+}
+```
diff --git a/migration-guides/from-com-box-sdk-to-com-box-sdkgen.md b/migration-guides/from-com-box-sdk-to-com-box-sdkgen.md
new file mode 100644
index 000000000..54e72aa20
--- /dev/null
+++ b/migration-guides/from-com-box-sdk-to-com-box-sdkgen.md
@@ -0,0 +1,685 @@
+# Migration guide: migrate from `com.box.sdk` to `com.box.sdkgen` package
+
+
+
+
+- [Introduction](#introduction)
+ - [Who is this for?](#who-is-this-for)
+- [Key differences](#key-differences)
+ - [Manager approach](#manager-approach)
+ - [Immutable design](#immutable-design)
+ - [Consistent method signature](#consistent-method-signature)
+- [Authentication](#authentication)
+ - [Developer Token](#developer-token)
+ - [JWT Auth](#jwt-auth)
+ - [Using JWT configuration file](#using-jwt-configuration-file)
+ - [Providing JWT configuration manually](#providing-jwt-configuration-manually)
+ - [Authenticate user](#authenticate-user)
+ - [Client Credentials Grant](#client-credentials-grant)
+ - [Obtaining Service Account token](#obtaining-service-account-token)
+ - [Obtaining User token](#obtaining-user-token)
+ - [Switching between Service Account and User](#switching-between-service-account-and-user)
+ - [OAuth 2.0 Auth](#oauth-20-auth)
+ - [Get Authorization URL](#get-authorization-url)
+ - [Authenticate](#authenticate)
+ - [Store token and retrieve token callbacks](#store-token-and-retrieve-token-callbacks)
+ - [Downscope token](#downscope-token)
+ - [Revoke token](#revoke-token)
+- [Configuration](#configuration)
+ - [As-User header](#as-user-header)
+ - [Custom Base URLs](#custom-base-urls)
+- [Convenience methods](#convenience-methods)
+ - [Webhook validation](#webhook-validation)
+ - [Chunked upload of big files](#chunked-upload-of-big-files)
+
+
+
+## Introduction
+
+Version availability:
+
+- v4: ships only `com.box.sdk` package
+- v5: ships both `com.box.sdk` and `com.box.sdkgen` packages (side-by-side)
+- v10+: ships only `com.box.sdkgen` module
+
+This document focuses on helping you migrate code from the manually maintained `com.box.sdk` package to the generated `com.box.sdkgen` package.
+Many APIs were redesigned for consistency and modern Java patterns, so this guide calls out how to adopt the new shapes safely and incrementally.
+
+Supported migration paths:
+
+- v4 → v5: adopt `com.box.sdkgen` gradually while keeping existing `com.box.sdk` usage
+- v4 → v10+: migrate directly to `com.box.sdkgen` package only
+- v5 (within the same version): move usage from `com.box.sdk` to `com.box.sdkgen` gradually
+
+For comprehensive API docs with sample code for all methods, see the repository documentation in the root `docs` directory: [`docs/`](../docs/).
+
+We recommend using `com.box.sdkgen` as the preferred SDK going forward. This SDK is automatically generated from the
+Box OpenAPI specification, ensuring consistency, reliability, and full API coverage.
+
+Key Benefits:
+
+- Comprehensive Coverage: Supports all Box API endpoints with consistent and predictable method signatures.
+- Rapid Feature Availability: Automatically includes new features as soon as they are released in the Box API.
+- Explicit Data Models: Includes clear, well-defined models for all API resources to improve readability and maintainability.
+- Immutable Design: Built for immutability, making code behavior more predictable and easier to reason about.
+- Rich Documentation: Offers detailed usage examples for every API method to help developers get started quickly.
+
+### Who is this for?
+
+- Developers with existing code using `com.box.sdk` who want to start using `com.box.sdkgen` APIs.
+- Developers using v5 of Box Java SDK that want to transition usage from `com.box.sdk` to `com.box.sdkgen` within the same app.
+
+## Key differences
+
+### Manager approach
+
+The main difference between the manual `com.box.sdk` package and the nextgen generated one,
+is the way how API methods are aggregated into objects.
+
+**Old (`com.box.sdk`)**
+
+Firstly, in the `com.box.sdk` to be able to perform any action on an API object, e.g. `User`, you first had to create its class.
+To do it is required to call:
+
+```java
+BoxUser user = new BoxUser(api, "12345");
+```
+
+to create a class representing an already existing User with id '12345', or create a new one with a call:
+
+```java
+BoxUser.Info createdUserInfo = BoxUser.createAppUser(api, "A User");
+BoxUser user = new BoxUser(api, createdUserInfo.getID());
+```
+
+Then, you could perform any action on created class, which will affect the user, e.g.
+
+```java
+BoxUser.Info info = user.new Info();
+info.setName(name);
+user.updateInfo(info);
+```
+
+**New (`com.box.sdkgen`)**
+
+In the `com.box.sdkgen` package, the API methods are grouped into dedicated manager classes, e.g. `User` object
+has dedicated `UserManager` class. Each manager class instance is available in `BoxClient` object.
+The fields storing references to the managers are named in the plural form of the resource that the
+manager handles - `client.users` for `UsersManager`. If you want to perform any operation
+connected with a `User` you need to call a respective method of `UserManager`.
+For example, to get info about existing user you need to call:
+
+```java
+UserFull user = client.users.getUsersById("12345");
+```
+
+or to create a new user:
+
+```java
+CreateUserRequestBody requestBody =
+ new CreateUserRequestBody.Builder("John Doe").build();
+UserFull user = client.users.createUser(requestBody);
+```
+
+The `UserFull` object returned by both of these methods is a data class - it does not contain any methods to call.
+To perform any action on `User` object, you need to still use a `UserManager` method for that.
+Usually these methods have a first argument, which accepts id of the object you want to access,
+e.g. to update a user name, call method:
+
+```java
+UpdateUserByIdRequestBody requestBody =
+ new UpdateUserByIdRequestBody.Builder().name("Mary").build();
+UserFull updatedUser = client.users.updateUserById(user.getId(), requestBody);
+```
+
+### Immutable design
+
+The `com.box.sdkgen` is designed to be mostly immutable. This means that methods,
+which used to modify the existing object in `com.box.sdk` now return a new instance of the class with the modified state.
+This design pattern is used to avoid side effects and make the code more predictable and easier to reason about.
+Methods, which returns a new modified instance of an object, will always have a prefix `with` in their names, e.g.
+
+**New (`com.box.sdkgen`)**
+
+```java
+BoxClient client = new BoxClient(auth);
+BoxClient asUserClient = client.withAsUserHeader("USER_ID");
+```
+
+### Consistent method signature
+
+To facilitate easier work with the new SDK, we have changed the API method signatures to be consistent and unified.
+
+**Old (`com.box.sdk`)**
+
+In the manual version, API methods had numerous parameters, which were not grouped into any objects and were passed as separate arguments, e.g. the method for creating a sign request looked like this:
+
+```java
+public static BoxSignRequest.Info createSignRequest(BoxAPIConnection api, List sourceFiles,
+ List signers, String parentFolderId,
+ BoxSignRequestCreateParams optionalParams)
+```
+
+**New (`com.box.sdkgen`)**
+
+In `com.box.sdkgen`, we have adopted an approach of aggregating parameters into types based on their nature (path, body, query, headers).
+This can be seen in the example corresponding to the above:
+
+```java
+public SignRequest createSignRequest(
+ SignRequestCreateRequest requestBody, CreateSignRequestHeaders headers)
+```
+
+According to the convention, if an API endpoint requires a parameter placed in the URL path,
+it will appear at the beginning of our method, such as `fileId` in this case.
+When a request allows for a body, as in `POST` or `PUT`, the method includes a parameter named `requestBody`.
+Following that, the method signature may include the `queryParams` parameter, followed by `headers`.
+The types of parameters `requestBody`, `queryParams`, and `headers` are specific to each endpoint and, in their definition,
+encompass all fields allowed by the API.
+It's worth noting here that when all fields of a particular type are optional, the entire parameter becomes optional as well.
+This allows us to pass only the parameters we actually want to provide when calling a given method,
+without the risk of not providing a sufficient number of parameters.
+
+## Authentication
+
+The `com.box.sdkgen` package offers the same authentication methods as the `com.box.sdk` one.
+Let's see the differences of their usage:
+
+### Developer Token
+
+**Old (`com.box.sdk`)**
+
+```java
+BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
+```
+
+The `com.box.sdkgen` package provides a convenient `BoxDeveloperTokenAuth`, which allows authenticating
+using developer token without necessity to provide a Client ID and Client Secret
+
+**New (`com.box.sdkgen`)**
+
+```java
+BoxDeveloperTokenAuth auth = new BoxDeveloperTokenAuth("YOUR-DEVELOPER-TOKEN");
+BoxClient client = new BoxClient(auth);
+```
+
+### JWT Auth
+
+#### Using JWT configuration file
+
+**Old (`com.box.sdk`)**
+
+The static method, which reads the JWT configuration file has been changed:
+
+```java
+Reader reader = new FileReader("src/example/config/config.json");
+BoxConfig boxConfig = BoxConfig.readFrom(reader);
+IAccessTokenCache tokenCache = new InMemoryLRUAccessTokenCache(100);
+BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig, tokenCache);
+```
+
+**New (`com.box.sdkgen`)**
+
+```java
+TokenStorage tokenStorage = new InMemoryTokenStorage(); // or any other implementation of TokenStorage
+JWTConfig config = JWTConfig.fromConfigFile("src/example/config/config.json", tokenStorage);
+BoxJWTAuth auth = new BoxJWTAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+#### Providing JWT configuration manually
+
+Some params in `JWTConfig` constructor have slightly different names than one in old `JWTAuth` class.
+
+**Old (`com.box.sdk`)**
+
+```java
+JWTEncryptionPreferences jwtPreferences = new JWTEncryptionPreferences();
+jwtPreferences.setPublicKeyID("PUBLIC-KEY-ID");
+jwtPreferences.setPrivateKeyPassword("PRIVATE-KEY-PASSWORD");
+jwtPreferences.setPrivateKey("PRIVATE-KEY");
+jwtPreferences.setEncryptionAlgorithm(EncryptionAlgorithm.RSA_SHA_256);
+
+IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(100);
+BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection
+ .getUserConnection("USER-ID", "CLIENT-ID","CLIENT-SECRET", jwtPreferences, accessTokenCache);
+
+BoxUser.Info userInfo = BoxUser.getCurrentUser(api).getInfo();
+```
+
+**New (`com.box.sdkgen`)**
+
+```java
+TokenStorage tokenStorage = new InMemoryTokenStorage();
+JWTConfig config = new JWTConfig.Builder("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", "JWT_KEY_ID", "PRIVATE_KEY", "PRIVATE_KEY_PASSWORD")
+ .enterpriseId("123456")
+ .tokenStorage(tokenStorage)
+ .build();
+BoxJWTAuth auth = new BoxJWTAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+#### Authenticate user
+
+In `com.box.sdk` package method for user authentication was named `BoxDeveloperEditionAPIConnection getUserConnection(String userId, BoxConfig boxConfig, IAccessTokenCache accessTokenCache)`
+and was accepting user id. The method was returning a new instance of `BoxDeveloperEditionAPIConnection` class, which was exchanging the existing token with the one with the user access.
+
+**Old (`com.box.sdk`)**
+
+```java
+BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getUserConnection("USER_ID", boxConfig, tokenCache);
+```
+
+**New (`com.box.sdkgen`)**
+
+In `com.box.sdkgen`, to authenticate as user you need to call
+`public BoxJWTAuth withUserSubject(String userId, TokenStorage tokenStorage)` method with id of the user
+to authenticate. The method returns a new instance of `BoxJWTAuth` class, which will perform authentication call
+in scope of the user on the first API call. The `tokenStorage` parameter is optional and allows to provide a custom
+token storage for the new instance of `BoxJWTAuth` class. The new auth instance can be used to create a new user client
+instance.
+
+```java
+BoxJWTAuth userAuth = auth.withUserSubject("USER_ID");
+BoxClient userClient = new BoxClient(userAuth);
+```
+
+### Client Credentials Grant
+
+#### Obtaining Service Account token
+
+To authenticate as enterprise, the only difference between `com.box.sdk` and `com.box.sdkgen` packages is using the `CCGConfig` as a middle step.
+
+**Old (`com.box.sdk`)**
+
+```java
+BoxCCGAPIConnection api = BoxCCGAPIConnection.applicationServiceAccountConnection(
+ "client_id",
+ "client_secret",
+ "enterprise_id"
+);
+```
+
+**New (`com.box.sdkgen`)**
+
+```java
+CCGConfig config = new CCGConfig.Builder("YOUR_CLIENT", "YOUR_CLIENT_SECRET")
+ .enterpriseId("ENTERPRISE_ID")
+ .build();
+BoxCCGAuth auth = new BoxCCGAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+#### Obtaining User token
+
+To authenticate as user, the only difference between the versions is using the `CCGConfig` as a middle step.
+
+**Old (`com.box.sdk`)**
+
+```java
+BoxCCGAPIConnection api = BoxCCGAPIConnection.userConnection(
+ "client_id",
+ "client_secret",
+ "user_id"
+);
+```
+
+**New (`com.box.sdkgen`)**
+
+```java
+CCGConfig config = new CCGConfig.Builder("YOUR_CLIENT", "YOUR_CLIENT_SECRET")
+ .userId("USER_ID")
+ .build();
+BoxCCGAuth auth = new BoxCCGAuth(config);
+BoxClient client = new BoxClient(auth);
+```
+
+### Switching between Service Account and User
+
+In `com.box.sdk` package, if you want to switch between the Service Account and User, you need to create another API connection.
+
+In `com.box.sdkgen`, to keep the immutability design, the methods switching authenticated subject were replaced with methods
+returning a new instance of `BoxCCGAuth` class. The new instance will fetch a new token on the next API call.
+The new auth instance can be used to create a new client instance. You can also specify `tokenStorage` parameter
+to provide a custom token storage for the new instance.
+The old instance of `BoxCCGAuth` class will remain unchanged and will still use the old token.
+
+**New (`com.box.sdkgen`)**
+
+```java
+BoxCCGAuth userAuth = auth.withUserSubject("USER_ID");
+BoxClient userClient = new BoxClient(userAuth);
+```
+
+```java
+BoxCCGAuth entAuth = auth.withEnterpriseSubject("ENTERPRISE_ID");
+BoxClient entClient = new BoxClient(entAuth);
+```
+
+### OAuth 2.0 Auth
+
+#### Get Authorization URL
+
+To get authorization url in the `com.box.sdkgen` package, you need to first create the `BoxOAuth` class using
+`OAuthConfig` class. Then to get authorization url, call `public String getAuthorizeUrl(GetAuthorizeUrlOptions options)`.
+Note that this method accepts the instance of `GetAuthorizeUrlOptions` class, which allows specifying extra options to API call.
+
+**Old (`com.box.sdk`)**
+
+In `com.box.sdk`, we did not have any method to get the authorization URL. Instead, we had to manually create the URL.
+
+```java
+String authorizationUrl = "https://account.box.com/api/oauth2/authorize?client_id=[CLIENT_ID]&response_type=code";
+```
+
+**New (`com.box.sdkgen`)**
+
+```java
+BoxOAuth auth = new BoxOAuth(new OAuthConfig.Builder("CLIENT_ID", "CLIENT_SECRET").build());
+String authorizationUrl = auth.getAuthorizeUrl();
+```
+
+#### Authenticate
+
+The method for authenticating using the authorization code has been changed. With the `com.box.sdk` package of the SDK,
+you had to provide the authorization code to the `BoxAPIConnection` class constructor. In the `com.box.sdkgen` package,
+you need to call the `public AccessToken getTokensAuthorizationCodeGrant(String authorizationCode)` method of the `BoxOAuth` class.
+The method now returns an AccessToken object with `accessToken` and `refreshToken` fields,
+while the old one was creating a new instance of `BoxAPIConnection` class.
+
+**Old (`com.box.sdk`)**
+
+```java
+BoxAPIConnection client = new BoxAPIConnection(
+ "[CLIENT_ID]",
+ "[CLIENT_SECRET]",
+ "[CODE]"
+);
+```
+
+**New (`com.box.sdkgen`)**
+
+```java
+auth.getTokensAuthorizationCodeGrant("AUTHORIZATION_CODE");
+BoxClient client = new BoxClient(auth);
+```
+
+### Store token and retrieve token callbacks
+
+In the `com.box.sdkgen` package you can define your own class delegated for storing and retrieving a token. It has to inherit from
+`TokenStorage` and implement all of its abstract methods. Next step would be to pass an instance of this class to the
+AuthConfig constructor.
+
+**New (`com.box.sdkgen`)**
+
+```java
+TokenStorage customTokenStorage = new TokenStorage() {
+ @Override
+ public void store(AccessToken accessToken) {
+ // Store the access token
+ }
+
+ @Override
+ public AccessToken get() {
+ // Retrieve the access token
+ return null;
+ }
+
+ @Override
+ public void clear() {
+ // Clear the access token
+ }
+};
+
+OAuthConfig config = new OAuthConfig.Builder("CLIENT_ID", "CLIENT_SECRET")
+ .tokenStorage(customTokenStorage)
+ .build();
+BoxOAuth auth = new BoxOAuth(config);
+```
+
+or reuse one of the provided implementations: `InMemoryTokenStorage`:
+
+```java
+TokenStorage tokenStorage = new InMemoryTokenStorage();
+OAuthConfig config = new OAuthConfig.Builder("CLIENT_ID", "CLIENT_SECRET")
+ .tokenStorage(tokenStorage)
+ .build();
+BoxOAuth auth = new BoxOAuth(config);
+```
+
+### Downscope token
+
+The process of downscoping token in the new version is similar to the old one. The main difference is that in the new version
+you need to call `downscopeToken` method of the `BoxOAuth` class instead of `getLowerScopedToken` method of the `BoxAPIConnection` class.
+
+**Old (`com.box.sdk`)**
+
+```java
+BoxAPIConnection api = new BoxAPIConnection("YOUR-ACCESS-TOKEN");
+
+String resource = "https://api.box.com/2.0/files/RESOURCE-ID";
+List scopes = new ArrayList();
+scopes.add("item_preview");
+scopes.add("item_content_upload");
+
+ScopedToken token = api.getLowerScopedToken(scopes, resource);
+```
+
+**New (`com.box.sdkgen`)**
+
+```java
+String resource = "https://api.box.com/2.0/files/123456789";
+List scopes = List.of("item_preview");
+AccessToken downscopedToken = auth.downscopeToken(scopes, resource, null, null);
+BoxDeveloperTokenAuth downscopedAuth = new BoxDeveloperTokenAuth(downscopedToken.getAccessToken());
+BoxClient downscopedClient = new BoxClient(downscopedAuth);
+```
+
+### Revoke token
+
+To revoke current client's tokens in the `com.box.sdkgen` package, you need to call `revokeToken` method of the auth class instead of
+`revoke` method.
+
+**Old (`com.box.sdk`)**
+
+```java
+BoxAPIConnection api = new BoxAPIConnection("YOUR-ACCESS-TOKEN");
+api.revokeToken();
+```
+
+**New (`com.box.sdkgen`)**
+
+```java
+client.auth.revokeToken()
+```
+
+## Configuration
+
+### As-User header
+
+The As-User header is used by enterprise admins to make API calls on behalf of their enterprise's users.
+This requires the API request to pass an `As-User: USER-ID` header. The following examples assume that the client has
+been instantiated with an access token with appropriate privileges to make As-User calls.
+
+In `com.box.sdk` package you could call client `asUser(String userID)` method to create a new client to impersonate the provided user.
+
+**Old (`com.box.sdk`)**
+
+```java
+BoxAPIConnection api = new BoxAPIConnection("YOUR-ACCESS-TOKEN");
+api.asUser("USER-ID");
+```
+
+**New (`com.box.sdkgen`)**
+
+In the new version, the method was renamed to `withAsUserHeader` in the `BoxClient` class,
+and returns a new instance of `BoxClient` class with the As-User header appended to all API calls made by the client.
+The method accepts only user id as a parameter.
+
+```java
+BoxClient userClient = client.withAsUserHeader("USER-ID");
+```
+
+Additionally `BoxClient` offers a `withExtraHeaders(Map extraHeaders)`
+method, which allows you to specify the custom set of headers, which will be included in every API call made by client.
+Calling the `client.withExtraHeaders()` method creates a new client, leaving the original client unmodified.
+
+```java
+BoxClient clientWithExtraHeaders = client.withExtraHeaders(new HashMap<>() {{
+ put("X-My-Header", "124");
+}});
+
+```
+
+### Custom Base URLs
+
+**Old (`com.box.sdk`)**
+
+In `com.box.sdk` you could specify the custom base URLs, which will be used for API calls made by setting
+the new values of static variables of the `API` class.
+
+```java
+BoxAPIConnection api = new BoxAPIConnection("YOUR-DEVELOPER-TOKEN");
+api.setBaseAppUrl("https://example.app.com");
+api.setBaseURL("https://example.com");
+api.setUploadURL("https://upload.example.com");
+api.setTokenURL("https://example.com/token");
+```
+
+**New (`com.box.sdkgen`)**
+
+In `com.box.sdkgen` this functionality has been implemented as part of the `BoxClient` class.
+By calling the `client.withCustomBaseUrls()` method, you can specify the custom base URLs that will be used for API
+calls made by client. Following the immutability pattern, this call creates a new client, leaving the original client unmodified.
+
+```java
+BaseUrls baseUrls = new BaseUrls.Builder()
+ .baseUrl("https://new-base-url.com")
+ .uploadUrl("https://my-company-upload-url.com")
+ .oauth2Url("https://my-company.com/oauth2")
+ .build();
+BoxClient clientWithCustomBaseUrl = client.withCustomBaseUrls(baseUrls);
+```
+
+## Convenience methods
+
+### Webhook validation
+
+Webhook validation is used to validate a webhook message by verifying the signature and the delivery timestamp.
+
+**Old (`com.box.sdk`)**
+
+In `com.box.sdk`, when you receive a webhook message from Box, to validate that it actually came from Box
+you need to call `BoxWebHookSignatureVerifier#verify(String sigVersion, String sigAlgorithm, String primarySignature, String secondarySignature, String payload, String deliveryTimestamp)` method.
+It would return a `boolean` value indicating whether the message was valid.
+
+```java
+// Webhook message contents are shown for demonstration purposes
+// Normally these would come from your HTTP handler
+
+// Webhook message HTTP body
+String messagePayload = "{"
++ "\"type\":\"webhook_event","
++ "\"webhook\":{"
++ "\"id\":\"1234567890\""
++ "},"
++ "\"trigger\":\"FILE.UPLOADED\","
++ "\"source\":{"
++ "\"id\":\"1234567890\","
++ "\"type\":\"file\","
++ "\"name\":\"Test.txt\""
++ "}}";
+
+// Webhook message HTTP headers
+Map messageHeaders = new HashMap();
+headers.put("BOX-DELIVERY-ID", "f96bb54b-ee16-4fc5-aa65-8c2d9e5b546f");
+headers.put("BOX-DELIVERY-TIMESTAMP", "2020-01-01T00:00:00-07:00");
+headers.put("BOX-SIGNATURE-ALGORITHM", "HmacSHA256");
+headers.put("BOX-SIGNATURE-PRIMARY", "6TfeAW3A1PASkgboxxA5yqHNKOwFyMWuEXny/FPD5hI=");
+headers.put("BOX-SIGNATURE-SECONDARY", "v+1CD1Jdo3muIcbpv5lxxgPglOqMfsNHPV899xWYydo=");
+headers.put("BOX-SIGNATURE-VERSION", "1");
+
+// Your application's webhook keys, obtained from the Box Developer Console
+String primaryKey = "4py2I9eSFb0ezXH5iPeQRcFK1LRLCdip";
+String secondaryKey = "Aq5EEEjAu4ssbz8n9UMu7EerI0LKj2TL";
+
+BoxWebHookSignatureVerifier verifier = new BoxWebHookSignatureVerifier(primaryKey, secondaryKey);
+boolean isValidMessage = verifier.verify(
+ headers.get("BOX-SIGNATURE-VERSION"),
+ headers.get("BOX-SIGNATURE-ALGORITHM"),
+ headers.get("BOX-SIGNATURE-PRIMARY"),
+ headers.get("BOX-SIGNATURE-SECONDARY"),
+ messagePayload,
+ headers.get("BOX-DELIVERY-TIMESTAMP")
+);
+```
+
+**New (`com.box.sdkgen`)**
+
+In the `com.box.sdkgen` package of ths SDK, the `WebhooksManager.validateMessage()` method requires the `messagePayload` to be of type `string`,
+map of headers to be of type `Map`, and the primary and secondary keys to be of type `String`.
+
+```java
+// Webhook message HTTP body
+String messagePayload = "{"
+ + "\"type\":\"webhook_event","
+ + "\"webhook\":{"
+ + "\"id\":\"1234567890\""
+ + "},"
+ + "\"trigger\":\"FILE.UPLOADED\","
+ + "\"source\":{"
+ + "\"id\":\"1234567890\","
+ + "\"type\":\"file\","
+ + "\"name\":\"Test.txt\""
+ + "}}";
+
+// Webhook message HTTP headers
+Map messageHeaders = new HashMap();
+headers.put("BOX-DELIVERY-ID", "f96bb54b-ee16-4fc5-aa65-8c2d9e5b546f");
+headers.put("BOX-DELIVERY-TIMESTAMP", "2020-01-01T00:00:00-07:00");
+headers.put("BOX-SIGNATURE-ALGORITHM", "HmacSHA256");
+headers.put("BOX-SIGNATURE-PRIMARY", "6TfeAW3A1PASkgboxxA5yqHNKOwFyMWuEXny/FPD5hI=");
+headers.put("BOX-SIGNATURE-SECONDARY", "v+1CD1Jdo3muIcbpv5lxxgPglOqMfsNHPV899xWYydo=");
+headers.put("BOX-SIGNATURE-VERSION", "1");
+
+// Your application's webhook keys, obtained from the Box Developer Console
+String primaryKey = "4py2I9eSFb0ezXH5iPeQRcFK1LRLCdip";
+String secondaryKey = "Aq5EEEjAu4ssbz8n9UMu7EerI0LKj2TL";
+
+boolean isValidMessage = WebhooksManager.validateMessage(
+ messagePayload, messageHeaders, primaryKey, secondaryKey);
+)
+```
+
+### Chunked upload of big files
+
+For large files or in cases where the network connection is less reliable, you may want to upload the file in parts.
+This allows a single part to fail without aborting the entire upload, and failed parts are being retried automatically.
+
+**Old (`com.box.sdk`)**
+
+In `com.box.sdk`, you could use the `uploadLargeFile` method of the `BoxFolder` class to upload a large file.
+This method accepted a `FileInputStream` as the input stream and the file size as a parameter. The method also required
+
+```java
+File myFile = new File("My Large_File.txt");
+FileInputStream stream = new FileInputStream(myFile);
+
+BoxFolder rootFolder = BoxFolder.getRootFolder(api);
+BoxFile.Info fileInfo = rootFolder.uploadLargeFile(inputStream, "My_Large_File.txt", myFile.length());
+```
+
+**New (`com.box.sdkgen`)**
+
+In `com.box.sdkgen`, the equivalent method is `chunked_uploads.uploadBigFile()`. It accepts a file-like object
+as the `file` parameter, and the `fileName` and `fileSize` parameters are now passed as arguments.
+The `parentFolderId` parameter is also required to specify the folder where the file will be uploaded.
+
+```java
+InputStream file = new FileInputStream(myFile);
+String fileName = "My_Large_File.txt";
+long fileSize = 1234556L;
+String parentFolderId = "123456789";
+
+File uploadedFile = client.getChunkedUploads().uploadBigFile(file, fileName, fileSize, parentFolderId);
+```
diff --git a/migration-guides/from-v3-to-v4.md b/migration-guides/from-v3-to-v4.md
new file mode 100644
index 000000000..5bcf2f164
--- /dev/null
+++ b/migration-guides/from-v3-to-v4.md
@@ -0,0 +1,243 @@
+# Migration guide for versions 3.x.x -> 4.x.x
+
+
+
+
+- [Configuration changes](#configuration-changes)
+ - [BoxDeveloperEditionAPIConnection](#boxdevelopereditionapiconnection)
+ - [MaxRequestAttempts](#maxrequestattempts)
+- [Removed deprecated methods and classes](#removed-deprecated-methods-and-classes)
+- [Replaced methods and classes](#replaced-methods-and-classes)
+ - [Shared links](#shared-links)
+ - [Retention Policies](#retention-policies)
+ - [Enterprise Events](#enterprise-events)
+ - [Search](#search)
+ - [BoxGroup](#boxgroup)
+ - [MetadataTemplate](#metadatatemplate)
+ - [Others](#others)
+
+
+
+The most important change this release includes is the replacement of the HTTP library from a native one to
+OkHttp which allows SDK to:
+
+- Support the HTTP2 version of the HTTP protocol.
+- Support proxies that do not use only basic authentication method. For details on creating custom proxy authenticators and an example of
+ NTLM proxy authentication, see [here](https://github.com/box/box-java-sdk/blob/kb/ok-http/doc/configuration.md#custom-proxy-authenticator).
+
+# Configuration changes
+
+## BoxDeveloperEditionAPIConnection
+
+Replaced `com.box.sdk.BoxDeveloperEditionAPIConnection#getAppUserConnection`with `com.box.sdk.BoxDeveloperEditionAPIConnection#getUserConnection`.
+
+### Example
+
+To create `com.box.sdk.BoxDeveloperEditionAPIConnection` configured for user access:
+
+```java
+Reader reader = new FileReader("some-config.json");
+BoxConfig boxConfig = BoxConfig.readFrom(reader);
+
+BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getUserConnection(boxConfig);
+```
+
+### Documentation
+
+You can read more on BoxDeveloperEditionAPIConnection [here](../../README.md#boxdevelopereditionapiconnectionasenterpriseuser).
+
+## MaxRequestAttempts
+
+The `MaxRequestAttempts` are removed from `com.box.sdk.BoxGlobalSettings` and replaced with `MaxRetryAttempts`.
+However, if you have API connection stored with the deprecated `MaxRequestAttempts` value it will be restored into `MaxRetryAttempts`.
+
+# Removed deprecated methods and classes
+
+1. `com.box.sdk.BoxAPIRequest.BoxAPIRequest(java.net.URL, java.lang.String)` - use constuctor that accepts `com.box.sdk.BoxAPIConnection`.
+2. `com.box.sdk.BoxUser.moveFolderToUser` - this method is removed as this operation is not allowed by API. You can only transfer root folder to another user using `com.box.sdk.BoxUser.transferContent`.
+
+# Replaced methods and classes
+
+## Getting thumbnail
+
+Method `com.box.sdk.BoxFile.getThumbnail` was removed. To get any file representation use `com.box.sdk.BoxFile.getRepresentationContent(java.lang.String, java.io.OutputStream)`
+or `com.box.sdk.BoxFile.getRepresentationContent(java.lang.String, java.lang.String, java.io.OutputStream)`.
+
+### Example
+
+To read the PDF representation of file with id `12345`:
+
+```java
+ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+BoxFile file = new BoxFile(api, "12345");
+file.getRepresentationContent("[pdf]", output);
+```
+
+### Documentation
+
+For more details on getting representation content go [here](../files.md#get-representation-content).
+
+## Shared links
+
+Removed variant of methods that do not use `com.box.sdk.sharedlink.BoxSharedLinkRequest`:
+
+1. `com.box.sdk.BoxItem.createSharedLink`
+2. `com.box.sdk.BoxFile.createSharedLink`
+3. `com.box.sdk.BoxFolder.createSharedLink`
+4. `com.box.sdk.BoxWebLink.createSharedLink`
+
+### Example
+
+If you want to create a shared link, first create `com.box.sdk.sharedlink.BoxSharedLinkRequest`:
+
+```java
+Date unsharedDate = ...
+BoxFile file = new BoxFile(api, "id");
+BoxSharedLinkRequest sharedLinkRequest = new BoxSharedLinkRequest()
+ .access(OPEN)
+ .permissions(true, true)
+ .unsharedDate(unsharedDate);
+
+BoxSharedLink sharedLink = file.createSharedLink(sharedLinkRequest);
+```
+
+### Documentation
+
+For details on shared links, see:
+
+1. [Create shared link for file](../files.md#create-a-shared-link)
+2. [Create shared link for folder](../folders.md#create-a-shared-link)
+3. [Create shared link for web link](../weblinks.md#create-shared-link)
+
+## Retention Policies
+
+Removed variant of methods that were not using `com.box.sdk.BoxRetentionPolicy.BoxRetentionPolicyAction`:
+
+1. `com.box.sdk.BoxRetentionPolicy.createFinitePolicy`
+
+### Example
+
+If you want to create a finite retention policy:
+
+```java
+BoxRetentionPolicy.createFinitePolicy(api, "My 30 days retention policy", 30, BoxRetentionPolicyAction.PermanentlyDelete);
+```
+
+### Documentation
+
+You can read more on creating retention policies [here](../retention_policies.md#create-retention-policy).
+
+## Enterprise Events
+
+Removed variant of methods that were not using `com.box.sdk.EnterpriseEventsRequest`:
+
+1. `com.box.sdk.EventLog.getEnterpriseEvents`
+
+### Example
+
+If you want to get historical enterprise events, first create `com.box.sdk.EnterpriseEventsRequest`:
+
+```java
+EnterpriseEventsRequest request = new EnterpriseEventsRequest().limit(20);
+EventLog.getEnterpriseEvents(api, request1);
+// process recieved events
+```
+
+### Documentation
+
+You can read more on getting enterprise events [here](../events.md#enterprise--admin--events).
+
+## Search
+
+Method `com.box.sdk.BoxFolder.search` is replaced with class `com.box.sdk.BoxSearch`.
+
+### Example
+
+If you would like to find the first 10 files matching "taxes":
+
+```java
+long offsetValue = 0;
+long limitValue = 10;
+BoxSearchParameters searchParams = new BoxSearchParameters();
+searchParams.setQuery("taxes");
+searchParams.setType("file");
+
+BoxSearch boxSearch = new BoxSearch(api);
+boxSearch.searchRange(offsetValue, limitValue, searchParams);
+```
+
+### Documentation
+
+You can read more on search [here](../search.md).
+
+## BoxGroup
+
+All methods that use `com.box.sdk.BoxGroupMembership.Role` were removed. Use ones that use `com.box.sdk.BoxGroupMembership.GroupRole`.
+Also `com.box.sdk.BoxGroupMembership.Role` was replaced with `com.box.sdk.BoxGroupMembership.GroupRole`.
+
+### Example
+
+To add a new member to a group with specific role:
+
+```java
+BoxUser user = ...
+BoxGroup boxGroup = new BoxGroup(api, "group_id");
+boxGroup.addMembership(user, BoxGroupMembership.GroupRole.ADMIN);
+```
+
+To get membership role use `com.box.sdk.BoxGroupMembership.Info.getGroupRole`:
+
+```java
+BoxGroupMembership membership = new BoxGroupMembership(api, "membership_id");
+membership.getInfo().getGroupRole();
+```
+
+To change membership role use `com.box.sdk.BoxGroupMembership.Info.setGroupRole`:
+
+```java
+BoxGroupMembership membership = new BoxGroupMembership(api, "membership_id");
+BoxGroupMembership.Info membershipInfo = membership.getInfo();
+membershipInfo.setGroupRole(BoxGroupMembership.GroupRole.MEMBER);
+membership.updateInfo(membershipInfo);
+```
+
+### Documentation
+
+You can read more on groups [here](../groups.md).
+
+## MetadataTemplate
+
+In `com.box.sdk.MetadataTemplate` methods that do not use `com.box.sdk.MetadataQuery` were removed.
+
+### Example
+
+To execute a metadata query first create `com.box.sdk.MetadataQuery` instance.
+
+```java
+MetadataQuery mQuery = new MetadataQuery("enterprise_341532.test");
+mQuery.setQuery("testfield = :arg");
+mQuery.setAncestorFolderId("0");
+mQuery.setOrderBy(
+ MetadataQuery.OrderBy.ascending("primarySortKey"),
+ MetadataQuery.OrderBy.ascending("secondarySortKey")
+);
+mQuery.addParameter("arg", "test");
+mQuery.setFields("metadata.enterprise_341532.test.customField");
+MetadataTemplate.executeMetadataQuery(api, mQuery);
+```
+
+### Documentation
+
+You can read more on how to execute metadata query [here](../metadata_template.md#execute-metadata-query).
+
+## Others
+
+| Old | New |
+| :---------------------------------------------------- | :-------------------------------------------------- |
+| `com.box.sdk.BoxEvent.getType` | `com.box.sdk.BoxEvent.getEventType` |
+| `com.box.sdk.BoxEvent.Type` | `com.box.sdk.BoxEvent.EventType` |
+| `com.box.sdk.BoxFile.uploadVersion` | `com.box.sdk.BoxFile.uploadNewVersion` |
+| `com.box.sdk.BoxGlobalSettings.getMaxRequestAttempts` | `com.box.sdk.BoxGlobalSettings.getMaxRetryAttempts` |
+| `com.box.sdk.BoxGlobalSettings.setMaxRequestAttempts` | `com.box.sdk.BoxGlobalSettings.setMaxRetryAttempts` |
+| `com.box.sdk.BoxTask.Info.getAction` | `com.box.sdk.BoxTask.Info.getTaskType` |
diff --git a/migration-guides/from-v4-to-v10.md b/migration-guides/from-v4-to-v10.md
new file mode 100644
index 000000000..23c3773b5
--- /dev/null
+++ b/migration-guides/from-v4-to-v10.md
@@ -0,0 +1,67 @@
+# Migration guide from v4 to v10 version of `box-java-sdk`
+
+
+
+
+- [Introduction](#introduction)
+- [Installation](#installation)
+ - [Maven](#maven)
+ - [Gradle](#gradle)
+- [Supported Environments](#supported-environments)
+- [Highlighting the Key Differences](#highlighting-the-key-differences)
+
+
+
+## Introduction
+
+The v10 release of `box-java-sdk` library helps Java developers to conveniently integrate with Box API.
+In the contrary to the previous versions (v4 or lower), it is not manually maintained, but auto-generated
+based on Open API Specification. This means you can leverage the most up-to-date Box API features in your
+applications without delay. We introduced this major version bump to reflect the significant codebase changes
+and to align with other Box SDKs, which will also adopt generated code starting from their v10 releases.
+More information and benefits of using the new can be found in the
+[README](../README.md) file.
+
+## Installation
+
+To install v10 version of Box Java SDK, you can use Maven or Gradle. The library is available in the
+[Maven Central Repository](https://search.maven.org/artifact/com.box/box-java-sdk).
+
+We have also introduced v5 version of Box Java SDK that consolidates both the manually maintained
+`com.box.sdk` package from v4 and the new, auto-generated `com.box.sdkgen` package from v10.
+If you would like to use a feature available only in the new SDK, you won't need to necessarily migrate all your code
+to use generated SDK at once. You will be able to use a new feature from the `com.box.sdkgen` package,
+while keeping the rest of your code unchanged. However, we recommend to fully migrate to the v10 of the SDK eventually.
+More information about v4 version can be found in the [migration guide from v4 to v5](./from-v4-to-v5.md).
+
+### Maven
+
+To start using generated version of the SDK in you Maven project just bump the version of the Box Java SDK library
+in `pom.xml`to 10.0.0 or higher:
+
+```xml
+
+ com.box
+ box-java-sdk
+ 10.0.0
+
+```
+
+### Gradle
+
+To bump a dependency in your Gradle project, bump the version used in your `build.gradle` file:
+
+```groovy
+implementation 'com.box:box-java-sdk:10.0.0'
+```
+
+## Supported Environments
+
+Both v4 and v10 of the Box Java SDK share the same Java version requirement: Java 8 or higher.
+No changes to your environment are needed when upgrading from v4 to v10.
+
+## Highlighting the Key Differences
+
+There are important differences between the `com.box.sdk` (v4) and the generated `com.box.sdkgen` (v10) packages.
+We have prepared a separate document that presents the main differences and provides guidance to help you migrate.
+For side-by-side code examples, see: [Migration guide: migrate from `com.box.sdk` to `com.box.sdkgen` package](./from-com-box-sdk-to-com-box-sdkgen.md).
diff --git a/migration-guides/from-v4-to-v5.md b/migration-guides/from-v4-to-v5.md
new file mode 100644
index 000000000..ce7e0e127
--- /dev/null
+++ b/migration-guides/from-v4-to-v5.md
@@ -0,0 +1,109 @@
+# Migration guide from v4 to v5 version of `box-java-sdk`
+
+
+
+
+- [Introduction](#introduction)
+- [Installation](#installation)
+ - [Maven](#maven)
+ - [Gradle](#gradle)
+- [Supported Environments](#supported-environments)
+- [Highlighting the Key Differences](#highlighting-the-key-differences)
+ - [Using the Box Java SDK v5](#using-the-box-java-sdk-v5)
+
+
+
+## Introduction
+
+The v5 release of the Box Java SDK is a transitional version designed to help developers migrate from
+the manually maintained v4 SDK to the modern, auto-generated v10+ SDK.
+
+This release combines two packages into a single artifact:
+
+- `com.box.sdk` - the manually maintained package from v4.
+- `com.box.sdkgen` - the new, auto-generated module built from the official OpenAPI specification (and the sole component of the v10 SDK).
+
+This hybrid approach allows you to gradually adopt the new `com.box.sdkgen` features
+while continuing to use your existing v4 integration, eliminating the need for an immediate full rewrite.
+
+## Installation
+
+To install v5 version of Box Java SDK, you can use Maven or Gradle. The library is available in the
+[Maven Central Repository](https://search.maven.org/artifact/com.box/box-java-sdk).
+
+### Maven
+
+To upgrade from v4 to v5, in you Maven project just bump the version of the Box Java SDK library
+in `pom.xml`to 5.0.0 or higher:
+
+```xml
+
+ com.box
+ box-java-sdk
+ 5.0.0
+
+```
+
+### Gradle
+
+To upgrade from v4 to v5 of the Box Java SDK, simply update the library version in your Maven project’s `pom.xml` file
+to 5.0.0 or higher:
+
+```groovy
+implementation 'com.box:box-java-sdk:5.0.0'
+```
+
+## Supported Environments
+
+Both v4 and v5 of the Box Java SDK share the same Java version requirement: Java 8 or higher.
+No changes to your environment are needed when upgrading from v4 to v5.
+
+## Highlighting the Key Differences
+
+The `com.box.sdk` package usage in v5 remains the same as in v4 and is not covered in this document.
+If you are migrating code from `com.box.sdk` to `com.box.sdkgen`, which we recommend,
+the key differences between the packages are documented in:
+
+- [Migration guide: com.box.sdk → com.box.sdkgen](./from-com-box-sdk-to-com-box-sdkgen.md)
+
+### Using the Box Java SDK v5
+
+After migration to Box Java SDK v5, you can use both the manual Box Java SDK package `com.box.sdk` and the generated one `com.box.sdkgen`.
+You just need to import the required classes from the appropriate package depending on which SDK you intend to use.
+If both packages contain classes with the same name, you can use fully qualified names to resolve any naming conflicts.
+
+```java
+import com.box.sdk.BoxConfig;
+import com.box.sdk.BoxDeveloperEditionAPIConnection;
+
+import com.box.sdk.BoxFolder;
+import com.box.sdkgen.box.jwtauth.BoxJWTAuth;
+import com.box.sdkgen.box.jwtauth.JWTConfig;
+import com.box.sdkgen.client.BoxClient;
+import com.box.sdkgen.managers.folders.UpdateFolderByIdRequestBody;
+import com.box.sdkgen.schemas.folder.Folder;
+
+import java.io.FileReader;
+import java.io.Reader;
+
+public class Main {
+ public static void main(String[] args) throws Exception {
+
+ Reader reader = new FileReader("src/example/config/config.json");
+ BoxConfig boxConfig = BoxConfig.readFrom(reader);
+ BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig);
+
+ JWTConfig config = JWTConfig.fromConfigFile("src/example/config/config.json");
+ BoxJWTAuth auth = new BoxJWTAuth(config);
+ BoxClient client = new BoxClient(auth);
+
+ BoxFolder rootFolder = new BoxFolder(api, "0");
+ BoxFolder.Info subfolder = rootFolder.createFolder("My Subfolder");
+ Folder updatedFolder = client.getFolders().updateFolderById(
+ subfolder.getID(),
+ new UpdateFolderByIdRequestBody.Builder().name("My Updated Subfolder").build()
+ );
+ System.out.println("Created folder with ID " + subfolder.getID() + " has been updated to " + updatedFolder.getName());
+ }
+}
+```
diff --git a/migration-guides/from-v5-to-v10.md b/migration-guides/from-v5-to-v10.md
new file mode 100644
index 000000000..91210c8dd
--- /dev/null
+++ b/migration-guides/from-v5-to-v10.md
@@ -0,0 +1,61 @@
+# Migration guide from v5 to v10 version of `box-java-sdk`
+
+
+
+
+- [Introduction](#introduction)
+- [Installation](#installation)
+ - [Maven](#maven)
+ - [Gradle](#gradle)
+- [Supported Environments](#supported-environments)
+- [Migration Scope and Module Compatibility](#migration-scope-and-module-compatibility)
+
+
+
+## Introduction
+
+Version 10 of the Box Java SDK is a modern, fully auto-generated SDK built entirely from the `com.box.sdkgen` package.
+In version 5, the SDK included two packages side by side: the manually maintained `com.box.sdk` and the generated `com.box.sdkgen`.
+Starting with version 10, the `com.box.sdk` package has been removed, and only the `com.box.sdkgen` package remains.
+
+If you are migrating code from `com.box.sdk` to `com.box.sdkgen` package, detailed instructions are available in the dedicated
+[Migration guide: migrate from `com.box.sdk` to `com.box.sdkgen` package](./from-com-box-sdk-to-com-box-sdkgen.md).
+
+## Installation
+
+To install v10 version of Box Java SDK, you can use Maven or Gradle. The library is available in the
+[Maven Central Repository](https://search.maven.org/artifact/com.box/box-java-sdk).
+
+### Maven
+
+To start using generated version of the SDK in you Maven project just bump the version of the Box Java SDK library
+in `pom.xml`to 10.0.0 or higher:
+
+```xml
+
+ com.box
+ box-java-sdk
+ 10.0.0
+
+```
+
+### Gradle
+
+To bump a dependency in your Gradle project, bump the version used in your `build.gradle` file:
+
+```groovy
+implementation 'com.box:box-java-sdk:10.0.0'
+```
+
+## Supported Environments
+
+Both v5 and v10 of the Box Java SDK share the same Java version requirement: Java 8 or higher.
+No changes to your environment are needed when upgrading from v5 to v10.
+
+## Migration Scope and Module Compatibility
+
+If your project only uses the `com.box.sdkgen` package from v5, no code changes are required to migrate to v10.
+The generated `com.box.sdkgen` package is the same in both v5 and v10.
+
+If your project still includes code that uses the legacy `com.box.sdk` module, follow the dedicated guide to update it:
+[Migration guide: migrate from `com.box.sdk` to `com.box.sdkgen` package](./from-com-box-sdk-to-com-box-sdkgen.md).
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 000000000..264c73a60
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = "box-java-sdk"
diff --git a/src/example/config/config.json b/src/example/config/config.json
deleted file mode 100644
index b430e777f..000000000
--- a/src/example/config/config.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "boxAppSettings": {
- "clientID": "",
- "clientSecret": "",
- "appAuth": {
- "publicKeyID": "",
- "privateKey": "",
- "passphrase": ""
- }
- },
- "enterpriseID": ""
-}
diff --git a/src/example/java/com/box/sdk/example/AccessAsAppUser.java b/src/example/java/com/box/sdk/example/AccessAsAppUser.java
deleted file mode 100644
index c9aee4890..000000000
--- a/src/example/java/com/box/sdk/example/AccessAsAppUser.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.box.sdk.example;
-
-import com.box.sdk.BoxConfig;
-import com.box.sdk.BoxDeveloperEditionAPIConnection;
-import com.box.sdk.BoxFolder;
-import com.box.sdk.BoxItem;
-import com.box.sdk.BoxLogger;
-import com.box.sdk.BoxUser;
-import com.box.sdk.IAccessTokenCache;
-import com.box.sdk.InMemoryLRUAccessTokenCache;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-
-
-public final class AccessAsAppUser {
-
- private static final String USER_ID = "";
- private static final int MAX_DEPTH = 1;
- private static final int MAX_CACHE_ENTRIES = 100;
-
- private AccessAsAppUser() {
- }
-
- public static void main(String[] args) throws IOException {
- // Limit logging messages to prevent polluting the output.
- BoxLogger.defaultLogger().setLevelToWarning();
-
- //It is a best practice to use an access token cache to prevent unneeded requests to Box for access tokens.
- //For production applications it is recommended to use a distributed cache like Memcached or Redis, and to
- //implement IAccessTokenCache to store and retrieve access tokens appropriately for your environment.
- IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(MAX_CACHE_ENTRIES);
-
- Reader reader = new FileReader("src/example/config/config.json");
- BoxConfig boxConfig = BoxConfig.readFrom(reader);
-
- BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection
- .getUserConnection(USER_ID, boxConfig, accessTokenCache);
-
- BoxUser.Info userInfo = BoxUser.getCurrentUser(api).getInfo();
- System.out.format("Welcome, %s!\n\n", userInfo.getName());
-
- BoxFolder rootFolder = BoxFolder.getRootFolder(api);
- listFolder(rootFolder, 0);
- }
-
- private static void listFolder(BoxFolder folder, int depth) {
- for (BoxItem.Info itemInfo : folder) {
- StringBuilder indent = new StringBuilder();
- for (int i = 0; i < depth; i++) {
- indent.append(" ");
- }
-
- System.out.println(indent + itemInfo.getName());
- if (itemInfo instanceof BoxFolder.Info) {
- BoxFolder childFolder = (BoxFolder) itemInfo.getResource();
- if (depth < MAX_DEPTH) {
- listFolder(childFolder, depth + 1);
- }
- }
- }
- }
-}
diff --git a/src/example/java/com/box/sdk/example/BoxDeveloperEditionAPIConnectionAsEnterpriseUser.java b/src/example/java/com/box/sdk/example/BoxDeveloperEditionAPIConnectionAsEnterpriseUser.java
deleted file mode 100644
index c36a50206..000000000
--- a/src/example/java/com/box/sdk/example/BoxDeveloperEditionAPIConnectionAsEnterpriseUser.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.box.sdk.example;
-
-import com.box.sdk.BoxConfig;
-import com.box.sdk.BoxDeveloperEditionAPIConnection;
-import com.box.sdk.BoxLogger;
-import com.box.sdk.BoxUser;
-import com.box.sdk.DeveloperEditionEntityType;
-import com.box.sdk.IAccessTokenCache;
-import com.box.sdk.InMemoryLRUAccessTokenCache;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-
-public final class BoxDeveloperEditionAPIConnectionAsEnterpriseUser {
-
- private static final String USER_ID = "";
- private static final int MAX_DEPTH = 1;
- private static final int MAX_CACHE_ENTRIES = 100;
-
- private static BoxDeveloperEditionAPIConnection api;
-
- private BoxDeveloperEditionAPIConnectionAsEnterpriseUser() {
- }
-
- public static void main(String[] args) throws IOException {
- // Limit logging messages to prevent polluting the output.
- BoxLogger.defaultLogger().setLevelToWarning();
-
- //It is a best practice to use an access token cache to prevent unneeded requests to Box for access tokens.
- //For production applications it is recommended to use a distributed cache like Memcached or Redis, and to
- //implement IAccessTokenCache to store and retrieve access tokens appropriately for your environment.
- IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(MAX_CACHE_ENTRIES);
-
- Reader reader = new FileReader("src/example/config/config.json");
- BoxConfig boxConfig = BoxConfig.readFrom(reader);
-
- api = new BoxDeveloperEditionAPIConnection(USER_ID, DeveloperEditionEntityType.USER, boxConfig,
- accessTokenCache);
-
- BoxUser.Info userInfo = BoxUser.getCurrentUser(api).getInfo();
- System.out.format("Welcome, %s!\n\n", userInfo.getName());
- }
-}
diff --git a/src/example/java/com/box/sdk/example/CreateAppUser.java b/src/example/java/com/box/sdk/example/CreateAppUser.java
deleted file mode 100644
index 00ba03a63..000000000
--- a/src/example/java/com/box/sdk/example/CreateAppUser.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.box.sdk.example;
-
-import com.box.sdk.BoxConfig;
-import com.box.sdk.BoxDeveloperEditionAPIConnection;
-import com.box.sdk.BoxLogger;
-import com.box.sdk.BoxUser;
-import com.box.sdk.CreateUserParams;
-import com.box.sdk.IAccessTokenCache;
-import com.box.sdk.InMemoryLRUAccessTokenCache;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-
-
-public final class CreateAppUser {
-
- private static final String APP_USER_NAME = "";
- private static final String EXTERNAL_APP_USER_ID = "";
- private static final int MAX_CACHE_ENTRIES = 100;
-
- private CreateAppUser() {
- }
-
- public static void main(String[] args) throws IOException {
- // Limit logging messages to prevent polluting the output.
- BoxLogger.defaultLogger().setLevelToWarning();
-
-
- //It is a best practice to use an access token cache to prevent unneeded requests to Box for access tokens.
- //For production applications it is recommended to use a distributed cache like Memcached or Redis, and to
- //implement IAccessTokenCache to store and retrieve access tokens appropriately for your environment.
- IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(MAX_CACHE_ENTRIES);
-
- Reader reader = new FileReader("src/example/config/config.json");
- BoxConfig boxConfig = BoxConfig.readFrom(reader);
-
- BoxDeveloperEditionAPIConnection api = BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(
- boxConfig, accessTokenCache);
-
- CreateUserParams params = new CreateUserParams();
- params.setSpaceAmount(1073741824); //1 GB
- //This optional param can be used to store any id, like an email, of the user
- //for which the associated app user is being created.
- params.setExternalAppUserId(EXTERNAL_APP_USER_ID);
- BoxUser.Info user = BoxUser.createAppUser(api, APP_USER_NAME, params);
-
- System.out.format("User created with name %s and id %s\n\n", APP_USER_NAME, user.getID());
- }
-}
diff --git a/src/example/java/com/box/sdk/example/Main.java b/src/example/java/com/box/sdk/example/Main.java
deleted file mode 100644
index 5cbc33f72..000000000
--- a/src/example/java/com/box/sdk/example/Main.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.box.sdk.example;
-
-import com.box.sdk.BoxAPIConnection;
-import com.box.sdk.BoxFolder;
-import com.box.sdk.BoxItem;
-import com.box.sdk.BoxLogger;
-import com.box.sdk.BoxUser;
-
-public final class Main {
- private static final String DEVELOPER_TOKEN = "";
- private static final int MAX_DEPTH = 1;
-
- private Main() {
- }
-
- public static void main(String[] args) {
- // Limit logging messages to prevent polluting the output.
- BoxLogger.defaultLogger().setLevelToWarning();
-
- BoxAPIConnection api = new BoxAPIConnection(DEVELOPER_TOKEN);
-
- BoxUser.Info userInfo = BoxUser.getCurrentUser(api).getInfo();
- System.out.format("Welcome, %s <%s>!\n\n", userInfo.getName(), userInfo.getLogin());
-
- BoxFolder rootFolder = BoxFolder.getRootFolder(api);
- listFolder(rootFolder, 0);
- }
-
- private static void listFolder(BoxFolder folder, int depth) {
- for (BoxItem.Info itemInfo : folder) {
- StringBuilder indent = new StringBuilder();
- for (int i = 0; i < depth; i++) {
- indent.append(" ");
- }
-
- System.out.println(indent + itemInfo.getName());
- if (itemInfo instanceof BoxFolder.Info) {
- BoxFolder childFolder = (BoxFolder) itemInfo.getResource();
- if (depth < MAX_DEPTH) {
- listFolder(childFolder, depth + 1);
- }
- }
- }
- }
-}
diff --git a/src/example/java/com/box/sdk/example/SearchExamplesAsAppUser.java b/src/example/java/com/box/sdk/example/SearchExamplesAsAppUser.java
deleted file mode 100644
index f69dc92ce..000000000
--- a/src/example/java/com/box/sdk/example/SearchExamplesAsAppUser.java
+++ /dev/null
@@ -1,355 +0,0 @@
-package com.box.sdk.example;
-
-import com.box.sdk.BoxConfig;
-import com.box.sdk.BoxDeveloperEditionAPIConnection;
-import com.box.sdk.BoxItem;
-import com.box.sdk.BoxMetadataFilter;
-import com.box.sdk.BoxSearch;
-import com.box.sdk.BoxSearchParameters;
-import com.box.sdk.BoxUser;
-import com.box.sdk.DateRange;
-import com.box.sdk.IAccessTokenCache;
-import com.box.sdk.InMemoryLRUAccessTokenCache;
-import com.box.sdk.PartialCollection;
-import com.box.sdk.SizeRange;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-public final class SearchExamplesAsAppUser {
-
- private static final String USER_ID = "";
- private static final int MAX_CACHE_ENTRIES = 100;
-
- private static BoxDeveloperEditionAPIConnection api;
-
- private SearchExamplesAsAppUser() {
- }
-
- public static void main(String[] args) throws IOException {
- // Limit logging messages to prevent polluting the output.
- Logger.getLogger("com.box.sdk").setLevel(Level.WARNING);
-
- //It is a best practice to use an access token cache to prevent unneeded requests to Box for access tokens.
- //For production applications it is recommended to use a distributed cache like Memcached or Redis, and to
- //implement IAccessTokenCache to store and retrieve access tokens appropriately for your environment.
- IAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(MAX_CACHE_ENTRIES);
-
- Reader reader = new FileReader("src/example/config/config.json");
- BoxConfig boxConfig = BoxConfig.readFrom(reader);
-
- api = BoxDeveloperEditionAPIConnection.getUserConnection(USER_ID, boxConfig, accessTokenCache);
-
- BoxUser.Info userInfo = BoxUser.getCurrentUser(api).getInfo();
- System.out.format("Welcome, %s!\n\n", userInfo.getName());
-
- BoxSearch boxSearch = new BoxSearch(api);
-
- searchExample(boxSearch);
- }
-
- private static void searchExample(BoxSearch bs) {
- /**
- * Use this class to specify all the different search parameters that you may want to use.
- * Examples include: type, contentType, folderId's, metadata filters, created, updated.
- * Also shows how to incrementally crawl result sets.
- */
- BoxSearchParameters bsp = new BoxSearchParameters();
-
- fileExtensionExample(bsp, bs);
- ownerIdFilterExample(bsp, bs);
- contentTypeFilterExample(bsp, bs);
- createdDateFilterExample(bsp, bs);
- updatedDateFilterExample(bsp, bs);
- metaDataFilterDropdownExample(bsp, bs);
- metaDataFilterGreaterThanNumberExample(bsp, bs);
- metaDataFilterLessThanNumberExample(bsp, bs);
- metaDataFilterGreaterThanDateExample(bsp, bs);
- metaDataFilterLessThanDateExample(bsp, bs);
- metaDataFilterGreaterLessThanDateExample(bsp, bs);
-
- }
-
- public static void crawlSearchResultExample(BoxSearchParameters bsp, BoxSearch bs) {
- /**
- * Example of how to crawl more than 1000+ results in a search query
- */
-
- //Setup Result Partial Object
- PartialCollection searchResults;
-
- //Starting point of the result set
- long offset = 0;
- //Number of results that would be pulled back
- long limit = 1000;
-
- //Storing the full size of the results
- long fullSizeOfResult = 0;
-
- while (offset <= fullSizeOfResult) {
- searchResults = bs.searchRange(offset, limit, bsp);
- fullSizeOfResult = searchResults.fullSize();
-
- print("offset: " + offset + " of fullSizeOfResult: " + fullSizeOfResult);
- printSearchResults(searchResults);
-
- offset += limit;
- }
- }
-
- public static void fileExtensionExample(BoxSearchParameters bsp, BoxSearch bs) {
-
- print("******File Extension Search******");
- List fileExtensions = new ArrayList<>();
- fileExtensions.add("png");
- fileExtensions.add("docx");
-
- List ancestorFolderIds = new ArrayList<>();
- ancestorFolderIds.add("6725599265");
-
- bsp.setFileExtensions(fileExtensions);
- bsp.setAncestorFolderIds(ancestorFolderIds);
- bsp.setQuery("Testing");
-
- crawlSearchResultExample(bsp, bs);
- }
-
- public static void ownerIdFilterExample(BoxSearchParameters bsp, BoxSearch bs) {
-
- print("******Owner Id's Filter Search******");
- List ownerUserIds = new ArrayList<>();
- ownerUserIds.add("268117237");
-
- bsp.clearParameters();
- bsp.setQuery("Assemble");
- bsp.setOwnerUserIds(ownerUserIds);
-
- crawlSearchResultExample(bsp, bs);
-
- }
-
- public static void contentTypeFilterExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("*****Description Search******");
- List contentTypes = new ArrayList<>();
- contentTypes.add("description");
-
- bsp.clearParameters();
- bsp.setContentTypes(contentTypes);
- bsp.setQuery("test");
-
- crawlSearchResultExample(bsp, bs);
- }
-
- public static void createdDateFilterExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("*****Created Date Range Search******");
- bsp.clearParameters();
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("M-dd-yyyy hh:mm:ss");
- String createdFromDateString = "01-31-2016 00:00:00";
- String createdToDateString = "04-01-2016 00:00:00";
-
- Date createdFromDate = sdf.parse(createdFromDateString);
- Date createdToDate = sdf.parse(createdToDateString);
-
- DateRange createdRange = new DateRange(createdFromDate, createdToDate);
-
- bsp.setCreatedRange(createdRange);
- bsp.setQuery("File");
-
- crawlSearchResultExample(bsp, bs);
-
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- public static void updatedDateFilterExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("*****Updated Date Range Search******");
- bsp.clearParameters();
- try {
- SimpleDateFormat sdf = new SimpleDateFormat("M-dd-yyyy hh:mm:ss");
- String updatedFromDateString = "01-31-2016 00:00:00";
- String updatedToDateString = "05-01-2016 00:00:00";
-
- Date updatedFromDate = sdf.parse(updatedFromDateString);
- Date updatedToDate = sdf.parse(updatedToDateString);
-
-
- DateRange updatedRange = new DateRange(updatedFromDate, updatedToDate);
-
- bsp.setUpdatedRange(updatedRange);
- bsp.setQuery("File");
-
- crawlSearchResultExample(bsp, bs);
-
- } catch (ParseException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- public static void metaDataFilterDropdownExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("******Metadata Filter Search Dropdown Value Check******");
- bsp.clearParameters();
-
- BoxMetadataFilter bmf = new BoxMetadataFilter();
- bmf.setScope("enterprise");
- bmf.setTemplateKey("test");
-
- SizeRange sizeRange = new SizeRange(12, 19);
- bmf.addNumberRangeFilter("testnumber", sizeRange);
-
- bmf.addFilter("test", "example");
-
- bsp.setMetadataFilter(bmf);
-
- crawlSearchResultExample(bsp, bs);
- }
-
- public static void metaDataFilterGreaterThanNumberExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("******Metadata Filter Search Numbers Greater Than******");
- bsp.clearParameters();
-
- BoxMetadataFilter bmf = new BoxMetadataFilter();
- bmf.setScope("enterprise");
- bmf.setTemplateKey("test");
-
- SizeRange sizeRange = new SizeRange(20, 0);
- bmf.addNumberRangeFilter("testnumber", sizeRange);
-
- bsp.setMetadataFilter(bmf);
-
- crawlSearchResultExample(bsp, bs);
- }
-
- public static void metaDataFilterLessThanNumberExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("******Metadata Filter Search Numbers Less Than******");
- bsp.clearParameters();
-
- BoxMetadataFilter bmf = new BoxMetadataFilter();
- bmf.setScope("enterprise");
- bmf.setTemplateKey("test");
-
- SizeRange sizeRange = new SizeRange(0, 20);
- bmf.addNumberRangeFilter("testnumber", sizeRange);
-
- bsp.setMetadataFilter(bmf);
-
- crawlSearchResultExample(bsp, bs);
- }
-
- public static void metaDataFilterGreaterThanDateExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("******Metadata Filter Search Date Greater Than******");
- try {
- bsp.clearParameters();
-
- BoxMetadataFilter bmf = new BoxMetadataFilter();
- bmf.setScope("enterprise");
- bmf.setTemplateKey("test");
-
- SimpleDateFormat sdf = new SimpleDateFormat("M-dd-yyyy hh:mm:ss");
- String dateGreaterThanString = "03-01-2016 00:00:00";
-
- Date dateGreaterThan = sdf.parse(dateGreaterThanString);
-
- DateRange dr = new DateRange(dateGreaterThan, null);
-
- bmf.addDateRangeFilter("testDate", dr);
-
- bsp.setMetadataFilter(bmf);
-
- crawlSearchResultExample(bsp, bs);
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
-
- }
-
- public static void metaDataFilterLessThanDateExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("******Metadata Filter Search Date Less Than******");
- try {
- bsp.clearParameters();
-
- BoxMetadataFilter bmf = new BoxMetadataFilter();
- bmf.setScope("enterprise");
- bmf.setTemplateKey("test");
-
- SimpleDateFormat sdf = new SimpleDateFormat("M-dd-yyyy hh:mm:ss");
- String dateLessThanString = "05-03-2016 00:00:00";
-
-
- Date dateLessThan = sdf.parse(dateLessThanString);
-
- DateRange dr = new DateRange(null, dateLessThan);
-
- bmf.addDateRangeFilter("testDate", dr);
-
- bsp.setMetadataFilter(bmf);
-
- crawlSearchResultExample(bsp, bs);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- public static void metaDataFilterGreaterLessThanDateExample(BoxSearchParameters bsp, BoxSearch bs) {
- print("******Metadata Filter Search Date Range Both GT and LT******");
- try {
- bsp.clearParameters();
-
- BoxMetadataFilter bmf = new BoxMetadataFilter();
- bmf.setScope("enterprise");
- bmf.setTemplateKey("test");
-
- SimpleDateFormat sdf = new SimpleDateFormat("M-dd-yyyy hh:mm:ss");
- String dateLessThanString = "05-15-2016 00:00:00";
- String dateGreaterThanString = "03-01-2016 00:00:00";
-
- Date dateGreaterThan = sdf.parse(dateGreaterThanString);
- Date dateLessThan = sdf.parse(dateLessThanString);
-
- DateRange dr = new DateRange(dateGreaterThan, dateLessThan);
-
- bmf.addDateRangeFilter("testDate", dr);
-
- bsp.setMetadataFilter(bmf);
-
- crawlSearchResultExample(bsp, bs);
-
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- private static void printSearchResults(PartialCollection searchResults) {
- //Crawl the folder
- System.out.println("--==Results fullResultSize: " + searchResults.fullSize() + "==--");
-
- for (BoxItem.Info itemInfo : searchResults) {
- System.out.println("File Found: " + itemInfo.getName() + ", Owner: " + itemInfo.getOwnedBy().getID());
- }
-
- System.out.println();
- }
-
- /**
- * Used for a simple print function, leverages System.out.println.
- *
- * @param s string to be used as a print.
- */
- private static void print(String s) {
- System.out.println(s);
- }
-}
diff --git a/src/intTest/README.md b/src/intTest/README.md
deleted file mode 100644
index 38d0beabd..000000000
--- a/src/intTest/README.md
+++ /dev/null
@@ -1,123 +0,0 @@
-# Integration Tests
-
-## Running integration tests locally
-
-### Create Platform Application
-To run integration tests locally you will need a `Custom App` created at https://cloud.app.box.com/developers/console
-with `Server Authentication (with JWT)` selected as authentication method.
-Once created you can edit properties of the application.
-
-In section `App Access Level` select `App + Enterprise Access`.
-
-You can enable all `Application Scopes`.
-
-In section `Advanced Features` enable `Make API calls using the as-user header` and `Generate user access tokens`.
-
-Now select `Authorization` and submit application to be reviewed by account admin.
-
-Next part is to obtain application settings. Select `Configuration` tab and in the bottom in the section `App Settings`
-download them as Json.
-
-### Export configuration
-
-You will need to create environment variables in your system or IDE:
- - JAVA_COLLABORATOR_ID - you can find this in `General Settings` tab as `Collaborators`
- - JAVA_COLLABORATOR - you can find this in `General Settings` tab in field `User ID`
- - JAVA_ENTERPRISE_ID - you can find this in `General Settings` tab in field `Enterprise ID`
- - JAVA_JWT_CONFIG - contains Base64 of your configuration file. You can generate this in command line. On Linux/Mac OS you can use `base64 -i path_to_json_file`.
-
-### Running Tests
-
-You can run tests from command line:
-```bash
-./gradlew integrationTest
-```
-just remember that you need environment variables exported in previous step to be accessible.
-
-## Useful help classes
-
-### BoxApiProvider
-To obtain new API connection configured with provided JWT configuration use `BoxApiProvider`
-
-```java
-BoxAPIConnection api = BoxApiProvider.jwtApiForServiceAccount();
-```
-
-### UniqueTestFolder
-`UniqueTestFolder` contains method that can help setup and remove unique folder for tests and upload files.
-
-To use new unique folder:
-```java
-UniqueTestFolder.setupUniqeFolder(); // this will create a new test folder that can be used in tests
-UniqueTestFolder.getUniqueFolder(api); // this will retrieve unique folder
-UniqueTestFolder.removeUniqueFolder(); // this will remove unique folder with all subfolders and files
-```
-
-To upload files to root of the unique folder:
-```java
-// to upload file with specified content
-BoxFile fileWithSpecifiedContent = UniqueTestFolder.uploadFileToUniqueFolder(api, "File Name", "Your content");
-
-// to upload a file with some content
-BoxFile fileWithSomeContent = UniqueTestFolder.uploadFileToUniqueFolderWithSomeContent(api, "File Name");
-```
-
-You can also upload file to some specified folder:
-```java
-BoxFolder destinationFolder = UniqueTestFolder.getUniqueFolder(api); // obtain folder to upload file to
-BoxFile fileWithSomeContent = UniqueTestFolder.uploadFileWithSomeContent("File Name", destinationFolder);
-```
-
-### Retry
-Sometimes API request can take some time to be processed and you might want to retry some logic when error occurs:
-
-```java
-Retry.retry(
- () -> {
- BoxSignRequest signRequestGetByID = new BoxSignRequest(api, "signRequestId");
- // do an API call, assert response - if call fails it will be repated
- BoxSignRequest.Info cancelationIfo = signRequestGetByID.cancel();
- },
- 5, // how many times retry the call
- 1000 // how long to wait between calls in miliseconds
-);
-```
-
-## Putting this all together
-
-Here is a sample test that uses some of the utility classes shown above:
-
-```java
-public class BoxFolderIT {
-
- @BeforeClass
- public static void setup() {
- // create unique folder for all tests
- UniqueTestFolder.setupUniqeFolder();
- }
-
- @AfterClass
- public static void tearDown() {
- // remove unique folder after all tests run
- UniqueTestFolder.removeUniqueFolder();
- }
-
- @Test
- public void creatingAndDeletingFolderSucceeds() {
- // given
- BoxAPIConnection api = BoxApiProvider.jwtApiForServiceAccount();
- BoxFolder rootFolder = UniqueTestFolder.getUniqueFolder(api);
-
- // expect new folder can be found
- // create subfolder in unique test folder
- BoxFolder childFolder = rootFolder.createFolder("My Folder").getResource();
- assertThat(rootFolder,
- hasItem(Matchers.hasProperty("ID", equalTo(childFolder.getID()))));
-
- // expect folder cannot be found after deletion
- childFolder.delete(false);
- assertThat(rootFolder,
- not(hasItem(Matchers.hasProperty("ID", equalTo(childFolder.getID())))));
- }
-}
-```
\ No newline at end of file
diff --git a/src/intTest/java/com/box/sdk/BoxAIIT.java b/src/intTest/java/com/box/sdk/BoxAIIT.java
deleted file mode 100644
index 6bc1efa9c..000000000
--- a/src/intTest/java/com/box/sdk/BoxAIIT.java
+++ /dev/null
@@ -1,337 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static com.box.sdk.CleanupTools.deleteFile;
-import static com.box.sdk.Retry.retry;
-import static com.box.sdk.UniqueTestFolder.removeUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.setupUniqeFolder;
-import static com.box.sdk.UniqueTestFolder.uploadFileToUniqueFolder;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.notNullValue;
-
-import com.eclipsesource.json.Json;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-
-/**
- * {@link BoxGroup} related integration tests.
- */
-public class BoxAIIT {
-
- @BeforeClass
- public static void setup() {
- setupUniqeFolder();
- }
-
- @AfterClass
- public static void afterClass() {
- removeUniqueFolder();
- }
-
-
- @Test
- public void askAISingleItem() throws InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[askAISingleItem] Test File.txt";
- BoxFile uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
-
- try {
- BoxFile.Info uploadedFileInfo = uploadedFile.getInfo();
- // When a file has been just uploaded, AI service may not be ready to return text response
- // and 412 is returned
- retry(() -> {
- BoxAIResponse response = BoxAI.sendAIRequest(
- api,
- "What is the name of the file?",
- Collections.singletonList(new BoxAIItem(uploadedFileInfo.getID(), BoxAIItem.Type.FILE)),
- BoxAI.Mode.SINGLE_ITEM_QA
- );
- assertThat(response.getAnswer(), containsString("Test file"));
- assert response.getCreatedAt().before(new Date(System.currentTimeMillis()));
- assertThat(response.getCompletionReason(), equalTo("done"));
- }, 2, 2000);
-
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void askAIMultipleItems() throws InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName1 = "[askAIMultipleItems] Test File.txt";
- BoxFile uploadedFile1 = uploadFileToUniqueFolder(api, fileName1, "Test file");
-
- try {
- String fileName2 = "[askAIMultipleItems] Weather forecast.txt";
- BoxFile uploadedFile2 = uploadFileToUniqueFolder(api, fileName2, "Test file");
-
- try {
- BoxFile.Info uploadedFileInfo1 = uploadedFile1.getInfo();
- BoxFile.Info uploadedFileInfo2 = uploadedFile2.getInfo();
-
- List items = new ArrayList<>();
- items.add(new BoxAIItem(uploadedFileInfo1.getID(), BoxAIItem.Type.FILE));
- items.add(new BoxAIItem(uploadedFileInfo2.getID(), BoxAIItem.Type.FILE));
-
- // When a file has been just uploaded, AI service may not be ready to return text response
- // and 412 is returned
- retry(() -> {
- BoxAIResponse response = BoxAI.sendAIRequest(
- api,
- "What is the content of these files?",
- items,
- BoxAI.Mode.MULTIPLE_ITEM_QA
- );
- assertThat(response.getAnswer(), containsString("Test file"));
- assert response.getCreatedAt().before(new Date(System.currentTimeMillis()));
- assertThat(response.getCompletionReason(), equalTo("done"));
- }, 2, 2000);
- } finally {
- deleteFile(uploadedFile2);
- }
-
- } finally {
- deleteFile(uploadedFile1);
- }
- }
-
- @Test
- public void askAITextGenItemWithDialogueHistory() throws ParseException, InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[askAITextGenItemWithDialogueHistory] Test File.txt";
- Date date1 = BoxDateFormat.parse("2021-01-01T00:00:00Z");
- Date date2 = BoxDateFormat.parse("2021-02-01T00:00:00Z");
-
- BoxFile uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- try {
- // When a file has been just uploaded, AI service may not be ready to return text response
- // and 412 is returned
- retry(() -> {
- BoxFile.Info uploadedFileInfo = uploadedFile.getInfo();
- assertThat(uploadedFileInfo.getName(), is(equalTo(fileName)));
-
- List dialogueHistory = new ArrayList<>();
- dialogueHistory.add(
- new BoxAIDialogueEntry("What is the name of the file?", "Test file", date1)
- );
- dialogueHistory.add(
- new BoxAIDialogueEntry("What is the size of the file?", "10kb", date2)
- );
- BoxAIResponse response = BoxAI.sendAITextGenRequest(
- api,
- "What is the name of the file?",
- Collections.singletonList(new BoxAIItem(uploadedFileInfo.getID(), BoxAIItem.Type.FILE)),
- dialogueHistory
- );
- assertThat(response.getAnswer(), containsString("name"));
- assert response.getCreatedAt().before(new Date(System.currentTimeMillis()));
- assertThat(response.getCompletionReason(), equalTo("done"));
- }, 2, 2000);
-
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void getAIAgentDefaultConfiguration() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxAIAgent agent = BoxAI.getAiAgentDefaultConfig(api, BoxAIAgent.Mode.ASK);
- BoxAIAgentAsk askAgent = (BoxAIAgentAsk) agent;
-
- assertThat(askAgent.getType(), is(equalTo(BoxAIAgentAsk.TYPE)));
- assertThat(askAgent.getBasicText().getModel(), is(notNullValue()));
-
- BoxAIAgent agent2 = BoxAI.getAiAgentDefaultConfig(api, BoxAIAgent.Mode.TEXT_GEN);
- BoxAIAgentTextGen textGenAgent = (BoxAIAgentTextGen) agent2;
-
- assertThat(textGenAgent.getType(), is(equalTo(BoxAIAgentTextGen.TYPE)));
- assertThat(textGenAgent.getBasicGen().getModel(), is(notNullValue()));
- }
-
- @Test
- public void askAISingleItemWithAgent() throws InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[askAISingleItem] Test File.txt";
- BoxFile uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- BoxAIAgent agent = BoxAI.getAiAgentDefaultConfig(api, BoxAIAgent.Mode.ASK);
- BoxAIAgentAsk askAgent = (BoxAIAgentAsk) agent;
-
- try {
- BoxFile.Info uploadedFileInfo = uploadedFile.getInfo();
- // When a file has been just uploaded, AI service may not be ready to return text response
- // and 412 is returned
- retry(() -> {
- BoxAIResponse response = BoxAI.sendAIRequest(
- api,
- "What is the name of the file?",
- Collections.singletonList(new BoxAIItem(uploadedFileInfo.getID(), BoxAIItem.Type.FILE)),
- BoxAI.Mode.SINGLE_ITEM_QA,
- null,
- askAgent,
- true
- );
- assertThat(response.getAnswer(), containsString("Test file"));
- assert response.getCreatedAt().before(new Date(System.currentTimeMillis()));
- assertThat(response.getCompletionReason(), equalTo("done"));
- }, 2, 2000);
-
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void aiExtract() throws InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxAIAgent agent = BoxAI.getAiAgentDefaultConfig(api, BoxAIAgent.Mode.EXTRACT);
- BoxAIAgentExtract agentExtract = (BoxAIAgentExtract) agent;
- // AI team is going to move away from supporting overriding embeddings model
- agentExtract.getLongText().setEmbeddings(null);
-
- BoxFile uploadedFile = uploadFileToUniqueFolder(api, "[aiExtract] Test File.txt",
- "My name is John Doe. I live in San Francisco. I was born in 1990. I work at Box.");
-
- try {
- // When a file has been just uploaded, AI service may not be ready to return text response
- // and 412 is returned
- retry(() -> {
- BoxAIResponse response = BoxAI.extractMetadataFreeform(api,
- "firstName, lastName, location, yearOfBirth, company",
- Collections.singletonList(new BoxAIItem(uploadedFile.getID(), BoxAIItem.Type.FILE)),
- agentExtract);
- assertThat(response.getAnswer(), containsString("John"));
- assertThat(response.getCompletionReason(), equalTo("done"));
- }, 2, 2000);
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void aiExtractStructuredWithFields() throws InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxAIAgent agent = BoxAI.getAiAgentDefaultConfig(api, BoxAIAgent.Mode.EXTRACT_STRUCTURED);
- BoxAIAgentExtractStructured agentExtractStructured = (BoxAIAgentExtractStructured) agent;
- // AI team is going to move away from supporting overriding embeddings model
- agentExtractStructured.getLongText().setEmbeddings(null);
-
- BoxFile uploadedFile = uploadFileToUniqueFolder(api, "[aiExtractStructuredWithFields] Test File.txt",
- "My name is John Doe. I was born in 4th July 1990. I am 34 years old. My hobby is guitar.");
-
- try {
- // When a file has been just uploaded, AI service may not be ready to return text response
- // and 412 is returned
- retry(() -> {
- BoxAIExtractStructuredResponse response = BoxAI.extractMetadataStructured(api,
- Collections.singletonList(new BoxAIItem(uploadedFile.getID(), BoxAIItem.Type.FILE)),
- Arrays.asList(
- new BoxAIExtractField("firstName"),
- new BoxAIExtractField("lastName"),
- new BoxAIExtractField("date",
- "Person date of birth",
- "Birth date",
- "dateOfBirth",
- null,
- "What is the date of your birth?"),
- new BoxAIExtractField("float",
- "Person age",
- "Age",
- "age",
- null,
- "How old are you?"),
- new BoxAIExtractField("multiSelect",
- "Person hobby",
- "Hobby",
- "hobby",
- Collections.singletonList(new BoxAIExtractFieldOption("guitar")),
- "What is your hobby?")
- ),
- agentExtractStructured);
- assertThat(response.getSourceJson().get("answer"), is(equalTo(response.getAnswer())));
-
- assertThat(response.getAnswer().get("firstName").asString(), is(equalTo("John")));
- assertThat(response.getAnswer().get("lastName").asString(), is(equalTo("Doe")));
- assertThat(response.getAnswer().get("dateOfBirth").asString(), is(equalTo("1990-07-04")));
- assertThat(response.getAnswer().get("age").asInt(), is(equalTo(34)));
- assertThat(response.getAnswer().get("hobby").asArray().get(0).asString(), is(equalTo("guitar")));
-
- assertThat(response.getCompletionReason(), equalTo("done"));
- assertThat(response.getCreatedAt(), is(notNullValue()));
- }, 2, 2000);
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void aiExtractStructuredWithMetadataTemplate() throws InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxAIAgent agent = BoxAI.getAiAgentDefaultConfig(api, BoxAIAgent.Mode.EXTRACT_STRUCTURED);
- BoxAIAgentExtractStructured agentExtractStructured = (BoxAIAgentExtractStructured) agent;
- // AI team is going to move away from supporting overriding embeddings model
- agentExtractStructured.getLongText().setEmbeddings(null);
-
- BoxFile uploadedFile = uploadFileToUniqueFolder(api, "[aiExtractStructuredWithMetadataTemplate] Test File.txt",
- "My name is John Doe. I was born in 4th July 1990. I am 34 years old. My hobby is guitar.");
- String templateKey = "key" + java.util.UUID.randomUUID();
- MetadataTemplate template = MetadataTemplate.createMetadataTemplate(api,
- "enterprise",
- templateKey,
- templateKey,
- false,
- Arrays.asList(
- new MetadataTemplate.Field(Json.parse(
- "{\"key\":\"firstName\",\"displayName\":\"First name\","
- + "\"description\":\"Person first name\",\"type\":\"string\"}").asObject()),
- new MetadataTemplate.Field(Json.parse(
- "{\"key\":\"lastName\",\"displayName\":\"Last name\","
- + "\"description\":\"Person last name\",\"type\":\"string\"}").asObject()),
- new MetadataTemplate.Field(Json.parse(
- "{\"key\":\"dateOfBirth\",\"displayName\":\"Birth date\","
- + "\"description\":\"Person date of birth\",\"type\":\"date\"}").asObject()),
- new MetadataTemplate.Field(Json.parse(
- "{\"key\":\"age\",\"displayName\":\"Age\","
- + "\"description\":\"Person age\",\"type\":\"float\"}").asObject()),
- new MetadataTemplate.Field(Json.parse(
- "{\"key\":\"hobby\",\"displayName\":\"Hobby\","
- + "\"description\":\"Person hobby\",\"type\":\"multiSelect\","
- + " \"options\":[{\"key\": \"guitar\"}, {\"key\": \"books\"}]}").asObject())
- ));
-
- try {
- // When a file has been just uploaded, AI service may not be ready to return text response
- // and 412 is returned
- retry(() -> {
- BoxAIExtractStructuredResponse response = BoxAI.extractMetadataStructured(api,
- Collections.singletonList(new BoxAIItem(uploadedFile.getID(), BoxAIItem.Type.FILE)),
- new BoxAIExtractMetadataTemplate(templateKey, "enterprise"),
- agentExtractStructured);
- assertThat(response.getSourceJson().get("answer"), is(equalTo(response.getAnswer())));
-
- assertThat(response.getAnswer().get("firstName").asString(), is(equalTo("John")));
- assertThat(response.getAnswer().get("lastName").asString(), is(equalTo("Doe")));
- assertThat(response.getAnswer().get("dateOfBirth").asString(), is(equalTo("1990-07-04T00:00:00Z")));
- assertThat(response.getAnswer().get("age").asInt(), is(equalTo(34)));
- assertThat(response.getAnswer().get("hobby").asArray().get(0).asString(), is(equalTo("guitar")));
- assertThat(response.getCompletionReason(), equalTo("done"));
- assertThat(response.getCreatedAt(), is(notNullValue()));
- }, 2, 2000);
- } finally {
- deleteFile(uploadedFile);
- MetadataTemplate.deleteMetadataTemplate(api, template.getScope(), template.getTemplateKey());
- }
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxAPIConnectionIT.java b/src/intTest/java/com/box/sdk/BoxAPIConnectionIT.java
deleted file mode 100644
index f52631887..000000000
--- a/src/intTest/java/com/box/sdk/BoxAPIConnectionIT.java
+++ /dev/null
@@ -1,294 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static com.box.sdk.BoxApiProvider.jwtBoxConfig;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertEquals;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
-import org.junit.Ignore;
-import org.junit.Test;
-
-
-public class BoxAPIConnectionIT {
-
- @Test
- public void requestIsSentNormallyWhenInterceptorReturnsNullResponse() throws MalformedURLException {
- BoxAPIConnection api = new BoxAPIConnection("");
-
- api.setRequestInterceptor(request -> null);
-
- BoxAPIRequest request = new BoxAPIRequest(api, new URL("https://box.com"), "GET");
- try (BoxAPIResponse response = request.send()) {
- assertThat(response.getResponseCode(), is(200));
- }
- }
-
- @Test
- public void refreshSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String originalAccessToken = api.getAccessToken();
-
- api.refresh();
-
- String actualAccessToken = api.getAccessToken();
-
- assertThat(originalAccessToken, not(equalTo(actualAccessToken)));
- }
-
- @Test
- public void refreshesWhenGetAccessTokenIsCalledAndTokenHasExpired() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String originalAccessToken = api.getAccessToken();
- api.setExpires(-1);
-
- String actualAccessToken = api.getAccessToken();
-
- assertThat(originalAccessToken, not(equalTo(actualAccessToken)));
- }
-
- @Test
- public void doesNotRefreshWhenGetAccessTokenIsCalledAndTokenHasNotExpired() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String originalAccessToken = api.getAccessToken();
- api.setExpires(Long.MAX_VALUE);
-
- String actualAccessToken = api.getAccessToken();
-
- assertThat(originalAccessToken, equalTo(actualAccessToken));
- }
-
- @Test
- public void successfullySavesAndRestoresConnection() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String state = api.save();
- BoxConfig boxConfig = jwtBoxConfig();
-
- BoxAPIConnection restoredAPI = BoxAPIConnection.restore(
- boxConfig.getClientId(), boxConfig.getClientSecret(), state
- );
- assertThat(BoxFolder.getRootFolder(restoredAPI).getInfo().getID(), is("0"));
- }
-
- @Test
- public void revokeToken() {
- BoxAPIConnection api = jwtApiForServiceAccount();
-
- BoxFolder.getRootFolder(api);
-
- api.revokeToken();
-
- try {
- BoxFolder.getRootFolder(api);
- } catch (BoxAPIException ex) {
- assertEquals(401, ex.getResponseCode());
- }
- }
-
- @Test
- public void appAndDeveloperEditionApiConnectionWorks() {
- BoxDeveloperEditionAPIConnection appAuthConnection = jwtApiForServiceAccount();
-
- final String name = "app user name two";
- BoxUser.Info createdUserInfo = BoxUser.createAppUser(appAuthConnection, name);
- final String appUserId = createdUserInfo.getID();
-
- InMemoryLRUAccessTokenCache accessTokenCache = new InMemoryLRUAccessTokenCache(1);
- BoxDeveloperEditionAPIConnection api =
- BoxDeveloperEditionAPIConnection.getUserConnection(appUserId, jwtBoxConfig(), accessTokenCache);
- BoxUser appUser = new BoxUser(api, appUserId);
-
- assertThat(api.getAccessToken(), not(equalTo(null)));
-
- BoxUser.Info info = appUser.getInfo();
-
- assertThat(info.getID(), equalTo(appUserId));
- assertThat(info.getName(), equalTo(name));
-
- api.refresh();
-
- BoxUser appUserFromAdmin = new BoxUser(appAuthConnection, appUserId);
- appUserFromAdmin.delete(false, true);
- }
-
- @Test
- @Ignore("Takes too long to run")
- public void appUsersAutomaticallyPaginatesCorrectly() {
- BoxDeveloperEditionAPIConnection api = jwtApiForServiceAccount();
-
- assertThat(api.getAccessToken(), not(equalTo(null)));
-
- long timestamp = Calendar.getInstance().getTimeInMillis();
- final String name = "appUsersAutomaticallyPaginate ";
- final String externalAppUserId = "@example.com";
-
- // Must be greater than the default response page size (100) to ensure a second page of results
- final int totalCreatedTestAppUsers = 105;
-
- // Create Test App Users
- System.out.println("Creating Test App Users");
- for (int i = 1; i <= totalCreatedTestAppUsers; i++) {
- CreateUserParams params = new CreateUserParams();
- params.setExternalAppUserId(timestamp + "_" + i + externalAppUserId);
- BoxUser.createAppUser(api, name + timestamp + " " + i, params);
- }
-
- // Get App Users
- Iterable users = BoxUser.getAppUsersByExternalAppUserID(api,
- null, "external_app_user_id", "name");
-
- // Iterate over the returned App Users
- int totalReturnedTestAppUsers = 0;
- System.out.println("Cleanup (delete) Test App Users");
- for (BoxUser.Info userInfo : users) {
- System.out.println(userInfo.getName());
- BoxUser appUser = new BoxUser(api, userInfo.getID());
-
- // Count the Test App Users just created.
- if (userInfo.getName().startsWith(name + timestamp)) {
- totalReturnedTestAppUsers++;
- }
-
- // Delete the Test App Users just created.
- // Deletes Test App Users created in previous test run, as well.
- if (userInfo.getName().startsWith(name)) {
- appUser.delete(false, true);
- }
- }
-
- assertEquals(totalCreatedTestAppUsers, totalReturnedTestAppUsers);
- api.refresh();
- }
-
- @Test
- @Ignore("Takes too long to run")
- public void appUsersManuallyPaginatesCorrectly() {
- BoxDeveloperEditionAPIConnection api = jwtApiForServiceAccount();
-
- assertThat(api.getAccessToken(), not(equalTo(null)));
-
- final long timestamp = Calendar.getInstance().getTimeInMillis();
- final String name = "appUsersManuallyPaginate ";
- final String externalAppUserId = "@example.com";
-
- // Must be greater than defaultNetworkResponsePageSize to ensure a second page of results
- final int totalCreatedTestAppUsers = 105;
-
- // Must be equal to default response limit (usually 100)
- final int defaultNetworkResponsePageSize = 100;
-
- // Create Test App Users
- System.out.println("Creating Test App Users");
- for (int i = 1; i <= totalCreatedTestAppUsers; i++) {
- CreateUserParams params = new CreateUserParams();
- params.setExternalAppUserId(timestamp + "_" + i + externalAppUserId);
- BoxUser.createAppUser(api, name + timestamp + " " + i, params);
- }
-
- // Get App Users
- BoxResourceIterable users =
- (BoxResourceIterable) BoxUser.getAppUsersByExternalAppUserID(
- api,
- null,
- true,
- null,
- "external_app_user_id", "name");
-
- // Grab the marker to be able to resume iterating at some point in the future...
- String marker = users.getNextMarker();
-
- // As we iterate over the page of results, pageCursor is used to keep track
- // of the current item in the page, so that iteration can be picked up where you left
- // off later on.
- int pageCursor = 0;
-
- int totalReturnedTestAppUsers = 0;
-
- // Count App Users and stop iterating once we get to the last item on the first page of results
- System.out.println("===FIRST PAGE===");
- for (BoxUser.Info userInfo : users) {
- System.out.println(userInfo.getName());
-
- // Count the Test App Users just created.
- if (userInfo.getName().startsWith(name + timestamp)) {
- totalReturnedTestAppUsers++;
- }
-
- // Stop iterating once we get to the last item on the page of results.
- // If we were to keep iterating in this loop, then BoxResourceIterable would
- // automatically make the request to get the next page of results.
- if (pageCursor == defaultNetworkResponsePageSize - 1) {
- break;
- }
-
- pageCursor++;
- }
-
- // Manually get the second page of results, by passing the nextMarker from the last response.
- // This simulates the scenario where we no longer have the users collection, so we need to
- // make a new request, using the preserved marker value which points to the page containing
- // the next item in the collection.
- users = (BoxResourceIterable) BoxUser.getAppUsersByExternalAppUserID(api,
- null, true, marker, "external_app_user_id", "name");
-
- // We're now starting with the first item on the second page of results,
- // so we reset pageCursor
- pageCursor = 0;
-
- // Continue counting App Users
- // If there are more pages of results, this loop uses the automatic pagination by continuously
- // retrieving the next item and letting BoxResourceIterable determine and manage getting new
- // pages.
- System.out.println("===SECOND PAGE===");
- for (BoxUser.Info userInfo : users) {
- System.out.println(userInfo.getName());
-
- // Count the users just created.
- if (userInfo.getName().startsWith(name + timestamp)) {
- totalReturnedTestAppUsers++;
- }
-
- pageCursor++;
- }
-
- // Get App Users for post-test clean up
- users = (BoxResourceIterable) BoxUser.getAppUsersByExternalAppUserID(api,
- null, true, null, "external_app_user_id", "name");
-
- // Clean up
- System.out.println("Cleanup (delete) Test App Users");
- for (BoxUser.Info userInfo : users) {
- BoxUser appUser = new BoxUser(api, userInfo.getID());
-
- // Deletes users created in previous test run, as well.
- if (userInfo.getName().startsWith(name)) {
- appUser.delete(false, true);
- }
- }
-
- assertEquals(totalCreatedTestAppUsers, totalReturnedTestAppUsers);
- api.refresh();
- }
-
- @Test
- public void getLowerScopedTokenWorks() {
- BoxDeveloperEditionAPIConnection api = jwtApiForServiceAccount();
-
- String originalToken = api.getAccessToken();
- List scopes = new ArrayList<>();
- scopes.add("item_preview");
- scopes.add("item_content_upload");
-
- ScopedToken newToken = api.getLowerScopedToken(scopes, null);
- assertThat(newToken, notNullValue());
- assertThat(newToken.getAccessToken(), not(originalToken));
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxAPIRequestIT.java b/src/intTest/java/com/box/sdk/BoxAPIRequestIT.java
deleted file mode 100644
index f1b5098e3..000000000
--- a/src/intTest/java/com/box/sdk/BoxAPIRequestIT.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static org.junit.Assert.fail;
-
-import org.junit.Test;
-
-/**
- * Integration test for BoxAPIRequest
- */
-public class BoxAPIRequestIT {
-
- @Test
- public void loggingWorks() {
- BoxLogger.defaultLogger().setLevelToAll();
- try {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxUser.getCurrentUser(api);
- } catch (Exception e) {
- e.printStackTrace();
- fail("Exception occured");
- } finally {
- BoxLogger.defaultLogger().resetToDefaultLevel();
- }
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxApiProvider.java b/src/intTest/java/com/box/sdk/BoxApiProvider.java
deleted file mode 100644
index 55495a910..000000000
--- a/src/intTest/java/com/box/sdk/BoxApiProvider.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.box.sdk;
-
-import static java.lang.String.format;
-
-import java.util.Base64;
-import java.util.Map;
-import java.util.Optional;
-
-final class BoxApiProvider {
-
- private static final String JWT_CONFIG_ENV_NAME = "JAVA_JWT_CONFIG";
-
- private BoxApiProvider() {
- // hiding constructor
- }
-
- static BoxDeveloperEditionAPIConnection jwtApiForServiceAccount() {
- BoxConfig boxConfig = jwtBoxConfig();
- InMemoryLRUAccessTokenCache tokenCache = new InMemoryLRUAccessTokenCache(10);
- return BoxDeveloperEditionAPIConnection.getAppEnterpriseConnection(boxConfig, tokenCache);
- }
-
- static BoxConfig jwtBoxConfig() {
- Map environmentProperties = System.getenv();
- String jwtConfigEncoded = getEnvProperty(environmentProperties, JWT_CONFIG_ENV_NAME);
- byte[] decodedJwtConfig = Base64.getDecoder().decode(jwtConfigEncoded);
- return BoxConfig.readFrom(new String(decodedJwtConfig));
- }
-
- private static String getEnvProperty(Map environmentProperties, String name) {
- return Optional.ofNullable(environmentProperties.get(name))
- .orElseThrow(() -> new RuntimeException(format("Missing '%s' environmental variable", name)));
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxClassificationTemplateIT.java b/src/intTest/java/com/box/sdk/BoxClassificationTemplateIT.java
deleted file mode 100644
index 2f416db37..000000000
--- a/src/intTest/java/com/box/sdk/BoxClassificationTemplateIT.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static org.junit.Assert.assertEquals;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.junit.Test;
-
-public class BoxClassificationTemplateIT {
-
- public MetadataTemplate getOrCreateClassificationTemplate(BoxAPIConnection api) {
- try {
- return MetadataTemplate.getMetadataTemplate(api, Metadata.CLASSIFICATION_TEMPLATE_KEY);
- } catch (BoxAPIException e) {
- assertEquals(e.getResponseCode(), 404);
- }
-
- MetadataTemplate.Field classification = new MetadataTemplate.Field();
- classification.setType("enum");
- classification.setKey("Box__Security__Classification__Key");
- classification.setDisplayName("Classification");
- classification.setIsHidden(false);
-
- List options = new ArrayList();
- options.add("sensitive");
- classification.setOptions(options);
-
- List fields = new ArrayList();
- fields.add(classification);
-
- return MetadataTemplate.createMetadataTemplate(api, Metadata.ENTERPRISE_METADATA_SCOPE,
- Metadata.CLASSIFICATION_TEMPLATE_KEY, "Classification", false, fields);
- }
-
- @Test
- public void getUpdateClassificationTemplate() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- MetadataTemplate template = getOrCreateClassificationTemplate(api);
- String fieldKey = template.getFields().get(0).getKey();
- String optionKey = template.getFields().get(0).getOptionsObjects().get(0).getKey();
-
- List updates = new ArrayList();
- String update = "{\n"
- + " \"op\": \"editEnumOption\",\n"
- + " \"fieldKey\": \"" + fieldKey + "\",\n"
- + " \"enumOptionKey\": \"" + optionKey + "\",\n"
- + " \"data\": {\n"
- + " \"key\": \"" + optionKey + "\",\n"
- + " \"staticConfig\": {\n"
- + " \"classification\": {\n"
- + " \"classificationDefinition\": \"Sensitive information.\",\n"
- + " \"colorID\": 4\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + "}";
- updates.add(new MetadataTemplate.FieldOperation(update));
-
- MetadataTemplate updatedTemplate = MetadataTemplate.updateMetadataTemplate(api,
- Metadata.ENTERPRISE_METADATA_SCOPE, Metadata.CLASSIFICATION_TEMPLATE_KEY, updates);
- MetadataTemplate.Option updatedOption = updatedTemplate.getFields().get(0).getOptionsObjects().get(0);
- assertEquals(updatedOption.getKey(), "Sensitive");
- assertEquals(
- updatedOption.getStaticConfig().getClassification().getString("classificationDefinition",
- "null"),
- "Sensitive information.");
- assertEquals(updatedOption.getStaticConfig().getClassification().getInt("colorID", 0),
- 4);
- update = "{\n"
- + " \"op\": \"editEnumOption\",\n"
- + " \"fieldKey\": \"" + fieldKey + "\",\n"
- + " \"enumOptionKey\": \"" + optionKey + "\",\n"
- + " \"data\": {\n"
- + " \"key\": \"" + optionKey + "\",\n"
- + " \"staticConfig\": {\n"
- + " \"classification\": {\n"
- + " \"classificationDefinition\": \"Top Sensitive information.\",\n"
- + " \"colorID\": 5\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + "}";
- updates.clear();
- updates.add(new MetadataTemplate.FieldOperation(update));
-
- updatedTemplate = MetadataTemplate.updateMetadataTemplate(api, Metadata.ENTERPRISE_METADATA_SCOPE,
- Metadata.CLASSIFICATION_TEMPLATE_KEY, updates);
- updatedOption = updatedTemplate.getFields().get(0).getOptionsObjects().get(0);
- assertEquals(updatedOption.getKey(), "Sensitive");
- assertEquals(updatedOption.getStaticConfig().getClassification().getString("classificationDefinition",
- "null"), "Top Sensitive information.");
- assertEquals(updatedOption.getStaticConfig().getClassification().getInt("colorID", 0), 5);
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxCollaborationAllowlistIT.java b/src/intTest/java/com/box/sdk/BoxCollaborationAllowlistIT.java
deleted file mode 100644
index 9ee46585b..000000000
--- a/src/intTest/java/com/box/sdk/BoxCollaborationAllowlistIT.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static com.box.sdk.CleanupTools.removeAllowedDomains;
-import static com.box.sdk.UniqueTestFolder.randomizeName;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.junit.Assert.assertEquals;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.hamcrest.Matchers;
-import org.junit.Before;
-import org.junit.Test;
-
-public class BoxCollaborationAllowlistIT {
- private static final String DOMAIN_NAME = randomizeName("test") + ".com";
-
- @Before
- public void beforeClass() {
- removeAllowedDomains(DOMAIN_NAME);
- }
-
- @Test
- public void createCollaborationAllowlistSucceeds() {
- final String type = "collaboration_whitelist_entry";
-
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxCollaborationAllowlist.Info domainAllowlist = BoxCollaborationAllowlist.create(
- api,
- "createCollaborationAllowlistSucceeds." + DOMAIN_NAME,
- BoxCollaborationAllowlist.AllowlistDirection.BOTH
- );
-
- assertThat(domainAllowlist, is(notNullValue()));
- assertEquals(domainAllowlist.getDirection(), BoxCollaborationAllowlist.AllowlistDirection.BOTH);
- assertEquals(domainAllowlist.getType(), type);
- }
-
- @Test
- public void getAllCollaborationAllowlistsSucceeds() {
- final String whitelistType = "collaboration_whitelist_entry";
-
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxCollaborationAllowlist.create(
- api,
- "getAllCollaborationAllowlistsSucceeds." + DOMAIN_NAME,
- BoxCollaborationAllowlist.AllowlistDirection.BOTH
- );
-
- Iterable whitelists = BoxCollaborationAllowlist.getAll(api);
- List whitelistList = newArrayList(whitelists);
-
- assertThat(whitelistList, is(not(Matchers.empty())));
- for (BoxCollaborationAllowlist.Info whitelistInfo : whitelistList) {
- assertThat(whitelistInfo, is(notNullValue()));
- assertEquals(whitelistInfo.getType(), whitelistType);
- }
- }
-
- @Test
- public void getAllCollaborationAllowlistsAdditionalParamsSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
-
- BoxCollaborationAllowlist.create(
- api,
- "getAllCollaborationAllowlistsAdditionalParamsSucceeds." + DOMAIN_NAME,
- BoxCollaborationAllowlist.AllowlistDirection.BOTH
- );
-
- Iterable whitelists = BoxCollaborationAllowlist.getAll(api, 10);
- List whitelistList = newArrayList(whitelists);
- assertThat(whitelistList, is(not(Matchers.empty())));
- }
-
- private List newArrayList(Iterable iterable) {
- List result = new ArrayList<>();
- for (T i : iterable) {
- result.add(i);
- }
- return result;
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxCollaborationIT.java b/src/intTest/java/com/box/sdk/BoxCollaborationIT.java
deleted file mode 100644
index a0eb957dc..000000000
--- a/src/intTest/java/com/box/sdk/BoxCollaborationIT.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static com.box.sdk.BoxCollaborationAllowlist.AllowlistDirection.INBOUND;
-import static com.box.sdk.CleanupTools.deleteFolder;
-import static com.box.sdk.UniqueTestFolder.getUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.removeUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.setupUniqeFolder;
-import static com.box.sdk.UniqueTestFolder.uploadFileToUniqueFolderWithSomeContent;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import com.eclipsesource.json.JsonObject;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import org.hamcrest.Matchers;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class BoxCollaborationIT {
-
- @BeforeClass
- public static void setup() {
- setupUniqeFolder();
- }
-
- @AfterClass
- public static void tearDown() {
- removeUniqueFolder();
- }
-
- @Test
- public void updateInfoSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String folderName = "[addCollaborationToFolderSucceeds] Test Folder";
- String collaboratorLogin = TestConfig.getCollaborator();
- BoxCollaboration.Role originalRole = BoxCollaboration.Role.VIEWER;
- BoxCollaboration.Role newRole = BoxCollaboration.Role.EDITOR;
- BoxFolder rootFolder = getUniqueFolder(api);
- BoxFolder folder = null;
- try {
- folder = rootFolder.createFolder(folderName).getResource();
- BoxCollaboration.Info collabInfo = folder.collaborate(collaboratorLogin, originalRole);
-
- assertThat(collabInfo.getRole(), is(equalTo(originalRole)));
- assertNotNull(collabInfo.getIsAccessOnly());
-
- BoxCollaboration collab = collabInfo.getResource();
- collabInfo.setRole(newRole);
- collab.updateInfo(collabInfo);
-
- assertThat(collabInfo.getRole(), is(equalTo(newRole)));
- Collection collabCollection = folder.getCollaborations();
-
- assertEquals(collabCollection.size(), 1);
-
- Iterator collabs = collabCollection.iterator();
- BoxCollaboration.Info remoteCollab = collabs.next();
- assertThat(remoteCollab.getRole(), is(equalTo(newRole)));
- } finally {
- deleteFolder(folder);
- }
- }
-
- @Test
- public void deleteSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String folderName = "[deleteSucceeds] Test Folder";
- String collaboratorLogin = TestConfig.getCollaborator();
- BoxCollaboration.Role collaboratorRole = BoxCollaboration.Role.EDITOR;
- BoxFolder rootFolder = UniqueTestFolder.getUniqueFolder(api);
- BoxFolder folder = null;
- try {
- folder = rootFolder.createFolder(folderName).getResource();
- BoxCollaboration.Info collabInfo = folder.collaborate(collaboratorLogin, collaboratorRole);
- BoxCollaboration collab = collabInfo.getResource();
-
- collab.delete();
-
- assertThat(folder.getCollaborations(), Matchers.hasSize(0));
- } finally {
- deleteFolder(folder);
- }
- }
-
- @Test
- public void singleFileCollabSucceeds() {
- HashMap collabsMap = new HashMap<>();
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[singleFileCollabSucceeds] Test File.txt";
- BoxFile uploadedFile = null;
- BoxCollaborationAllowlist allowList = null;
-
- try {
- uploadedFile = uploadFileToUniqueFolderWithSomeContent(api, fileName);
-
- String collaboratorLogin = TestConfig.getCollaborator();
- BoxCollaboration.Role originalRole = BoxCollaboration.Role.VIEWER;
- BoxCollaboration.Role newRole = BoxCollaboration.Role.EDITOR;
-
- BoxCollaboration.Info collabInfo =
- uploadedFile.collaborate(collaboratorLogin, originalRole, true, false);
-
- collabsMap.put(collabInfo.getID(), collabInfo);
-
- assertThat(collabInfo.getRole(), is(equalTo(originalRole)));
-
- BoxCollaboration collab = collabInfo.getResource();
- collabInfo.setRole(newRole);
- collab.updateInfo(collabInfo);
-
- assertThat(collabInfo.getRole(), is(equalTo(newRole)));
-
- BoxCollaboration remoteCollab = new BoxCollaboration(api, collab.getID());
- BoxCollaboration.Info remoteInfo = remoteCollab.getInfo();
- assertThat(remoteInfo.getRole(), is(equalTo(newRole)));
- assertThat(remoteInfo.getCreatedBy().getID(), is(collabInfo.getCreatedBy().getID()));
-
-
- allowList = BoxCollaborationAllowlist.create(api, "gmail.com", INBOUND).getResource();
- BoxCollaboration.Info collab2Info =
- uploadedFile.collaborate("davidsmaynard@gmail.com", originalRole, false, false);
-
- collabsMap.put(collab2Info.getID(), collab2Info);
-
- BoxResourceIterable collabs = uploadedFile.getAllFileCollaborations();
- Iterator collabIterator = collabs.iterator();
- int numCollabs = 0;
-
- while (collabIterator.hasNext()) {
- numCollabs++;
- BoxCollaboration.Info fileCollabInfo = collabIterator.next();
- BoxCollaboration.Info localFileCollabInfor = collabsMap.get(fileCollabInfo.getID());
-
- assertEquals(fileCollabInfo.getID(), localFileCollabInfor.getID());
- assertEquals(fileCollabInfo.getCreatedBy().getID(), localFileCollabInfor.getCreatedBy().getID());
- assertEquals(fileCollabInfo.getCreatedBy().getName(), localFileCollabInfor.getCreatedBy().getName());
-
- assertEquals(fileCollabInfo.getAccessibleBy().getID(), localFileCollabInfor.getAccessibleBy().getID());
- assertEquals(fileCollabInfo.getAccessibleBy().getName(),
- localFileCollabInfor.getAccessibleBy().getName());
-
- assertEquals(fileCollabInfo.getRole(), localFileCollabInfor.getRole());
- assertEquals(fileCollabInfo.getStatus(), localFileCollabInfor.getStatus());
- }
-
- assertEquals(2, numCollabs);
- } finally {
- CleanupTools.deleteFile(uploadedFile);
- if (allowList != null) {
- allowList.delete();
- }
- }
- }
-
- @Test
- public void acceptPendingCollaboration() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- Collection pendingCollabs = BoxCollaboration.getPendingCollaborations(api);
- for (BoxCollaboration.Info collabInfo : pendingCollabs) {
- // Accept the pending collaboration
- collabInfo.setStatus(BoxCollaboration.Status.ACCEPTED);
- collabInfo.getResource().updateInfo(collabInfo);
- }
- }
-
- @Test
- public void singleFileCollabWithAccessOnlySucceeds() {
- HashMap collabsMap = new HashMap<>();
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[singleFileCollabSucceeds] Test File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolderWithSomeContent(api, fileName);
- JsonObject user = new JsonObject()
- .add("login", TestConfig.getCollaborator())
- .add("type", "user");
- JsonObject file = new JsonObject()
- .add("id", uploadedFile.getID())
- .add("type", "file");
-
- BoxCollaboration.Role originalRole = BoxCollaboration.Role.VIEWER;
- BoxCollaboration.Info collabInfo = BoxCollaboration.create(api, user, file, originalRole,
- false, false, null, true);
-
- assertThat(collabInfo.getRole(), is(equalTo(originalRole)));
- assertTrue(collabInfo.getIsAccessOnly());
- } finally {
- CleanupTools.deleteFile(uploadedFile);
- }
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxCollectionIT.java b/src/intTest/java/com/box/sdk/BoxCollectionIT.java
deleted file mode 100644
index 174387b83..000000000
--- a/src/intTest/java/com/box/sdk/BoxCollectionIT.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-
-import java.util.ArrayList;
-import org.junit.Test;
-
-public class BoxCollectionIT {
-
- @Test
- public void getAllCollectionsReturnsFavorites() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- ArrayList collectionList = new ArrayList<>();
- for (BoxCollection.Info info : BoxCollection.getAllCollections(api)) {
- collectionList.add(info);
- }
-
- assertThat(collectionList.size(), is(equalTo(1)));
- BoxCollection.Info firstCollection = collectionList.get(0);
- assertThat(firstCollection.getName(), is(equalTo("Favorites")));
- assertThat(firstCollection.getCollectionType(), is(equalTo("favorites")));
- }
-
-}
diff --git a/src/intTest/java/com/box/sdk/BoxCommentIT.java b/src/intTest/java/com/box/sdk/BoxCommentIT.java
deleted file mode 100644
index c62fa54b8..000000000
--- a/src/intTest/java/com/box/sdk/BoxCommentIT.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static com.box.sdk.CleanupTools.deleteFile;
-import static com.box.sdk.UniqueTestFolder.getUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.randomizeName;
-import static com.box.sdk.UniqueTestFolder.removeUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.setupUniqeFolder;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-public class BoxCommentIT {
-
- @BeforeClass
- public static void setup() {
- setupUniqeFolder();
- }
-
- @AfterClass
- public static void tearDown() {
- removeUniqueFolder();
- }
- @Test
- public void replyToCommentSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- String fileName = randomizeName("[replyToCommentSucceeds] Test File.txt");
- byte[] fileBytes = "Non-empty string".getBytes(StandardCharsets.UTF_8);
- String firstMessage = "First message";
- String replyMessage = "Reply message";
-
- InputStream uploadStream = new ByteArrayInputStream(fileBytes);
- BoxFile uploadedFile = rootFolder.uploadFile(uploadStream, fileName).getResource();
- try {
- BoxComment.Info firstCommentInfo = uploadedFile.addComment(firstMessage);
- BoxComment firstComment = firstCommentInfo.getResource();
-
- BoxComment.Info replyCommentInfo = firstComment.reply(replyMessage);
-
- assertThat(replyCommentInfo.getMessage(), is(equalTo(replyMessage)));
- assertThat(replyCommentInfo.getIsReplyComment(), is(true));
- assertThat(replyCommentInfo.getItem().getID(), is(equalTo(uploadedFile.getID())));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void getCommentInfoSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- String fileName = randomizeName("[getCommentInfoSucceeds] Test File.txt");
- byte[] fileBytes = "Non-empty string".getBytes(StandardCharsets.UTF_8);
- String message = "Comment message";
-
- InputStream uploadStream = new ByteArrayInputStream(fileBytes);
- BoxFile uploadedFile = rootFolder.uploadFile(uploadStream, fileName).getResource();
- try {
- BoxComment.Info commentInfo = uploadedFile.addComment(message);
- BoxComment comment = commentInfo.getResource();
- commentInfo = comment.getInfo();
-
- assertThat(commentInfo.getMessage(), is(equalTo(message)));
- assertThat(commentInfo.getItem().getID(), is(equalTo(uploadedFile.getID())));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void changeCommentMessageSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- String fileName = randomizeName("[changeCommentMessageSucceeds] Test File.txt");
- byte[] fileBytes = "Non-empty string".getBytes(StandardCharsets.UTF_8);
- String originalMessage = "Original message";
- String changedMessage = "Changed message";
-
- InputStream uploadStream = new ByteArrayInputStream(fileBytes);
- BoxFile uploadedFile = rootFolder.uploadFile(uploadStream, fileName).getResource();
- try {
- BoxComment.Info commentInfo = uploadedFile.addComment(originalMessage);
- BoxComment comment = commentInfo.getResource();
- commentInfo = comment.changeMessage(changedMessage);
-
- assertThat(commentInfo.getMessage(), is(equalTo(changedMessage)));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void deleteCommentSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- String fileName = randomizeName("[deleteCommentSucceeds] Test File.txt");
- byte[] fileBytes = "Non-empty string".getBytes(StandardCharsets.UTF_8);
- String message = "Comment message";
-
- InputStream uploadStream = new ByteArrayInputStream(fileBytes);
- BoxFile uploadedFile = rootFolder.uploadFile(uploadStream, fileName).getResource();
- try {
- BoxComment.Info commentInfo = uploadedFile.addComment(message);
- BoxComment comment = commentInfo.getResource();
- comment.delete();
- } finally {
- deleteFile(uploadedFile);
- }
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxFileIT.java b/src/intTest/java/com/box/sdk/BoxFileIT.java
deleted file mode 100644
index 15ee91809..000000000
--- a/src/intTest/java/com/box/sdk/BoxFileIT.java
+++ /dev/null
@@ -1,1297 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BinaryBodyUtils.writeStream;
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static com.box.sdk.BoxFile.ALL_VERSION_FIELDS;
-import static com.box.sdk.BoxFile.CONTENT_URL_TEMPLATE;
-import static com.box.sdk.BoxRetentionPolicyAssignment.createAssignmentToFolder;
-import static com.box.sdk.BoxSharedLink.Access.OPEN;
-import static com.box.sdk.CleanupTools.deleteFile;
-import static com.box.sdk.CleanupTools.deleteFolder;
-import static com.box.sdk.UniqueTestFolder.getUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.randomizeName;
-import static com.box.sdk.UniqueTestFolder.removeUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.setupUniqeFolder;
-import static com.box.sdk.UniqueTestFolder.uploadFileToUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.uploadFileToUniqueFolderWithSomeContent;
-import static com.box.sdk.UniqueTestFolder.uploadFileWithContentToSpecifiedFolder;
-import static com.box.sdk.UniqueTestFolder.uploadFileWithSomeContent;
-import static com.box.sdk.UniqueTestFolder.uploadSampleFileToUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.uploadTwoFileVersionsToUniqueFolder;
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static java.time.ZoneOffset.UTC;
-import static java.util.UUID.randomUUID;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.emptyOrNullString;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.Matchers.notNullValue;
-import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.Mockito.atLeastOnce;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.hamcrest.MockitoHamcrest.longThat;
-
-import com.box.sdk.sharedlink.BoxSharedLinkRequest;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-import java.security.DigestInputStream;
-import java.security.MessageDigest;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import org.hamcrest.Matchers;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-/**
- * {@link BoxFile} related integration tests.
- */
-public class BoxFileIT {
-
- @BeforeClass
- public static void setup() {
- setupUniqeFolder();
- }
-
- @AfterClass
- public static void tearDown() {
- removeUniqueFolder();
- }
-
- protected static byte[] readAllBytes(String fileName) {
- try (RandomAccessFile f = new RandomAccessFile(fileName, "r")) {
- byte[] b = new byte[(int) f.length()];
- f.read(b);
- return b;
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Test
- public void getInfoWithRepresentationsIntegrationTestWithSimpleHint() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadSampleFileToUniqueFolder(api, "red_100x100.png");
- List representations =
- uploadedFile.getInfoWithRepresentations("[png]").getRepresentations();
- assertTrue("There should be at least one representation", representations.size() > 0);
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void getInfoWithRepresentationsIntegrationTestWithComplexHint() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadSampleFileToUniqueFolder(api, "red_100x100.png");
- List representations = uploadedFile.getInfoWithRepresentations(
- "[jpg,png?dimensions=1024x1024][pdf]").getRepresentations();
- assertTrue("There should be at least one representation", representations.size() > 0);
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void getRepresentationContentSucceeds() throws InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "smalltest.pdf";
- BoxFile file = null;
- try {
- file = uploadSampleFileToUniqueFolder(api, fileName);
- final String fileId = file.getID();
- String representationHint = "[jpg?dimensions=32x32]";
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- Retry.retry(() -> {
- new BoxFile(api, fileId).getRepresentationContent(representationHint, outputStream);
- byte[] downloadedRepresentationContent = outputStream.toByteArray();
-
- assertNotNull(downloadedRepresentationContent);
- }, 5, 100);
- } finally {
- deleteFile(file);
- }
- }
-
- @Test
- public void getRepresentationContentWithExtractedTextSucceeds() throws InterruptedException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "text.pdf";
- BoxFile file = null;
- try {
- file = uploadSampleFileToUniqueFolder(api, fileName);
- final String fileId = file.getID();
- String representationHint = "[extracted_text]";
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- Retry.retry(() -> {
- new BoxFile(api, fileId).getRepresentationContent(representationHint, outputStream);
- byte[] downloadedRepresentationContent = outputStream.toByteArray();
- String text = new String(downloadedRepresentationContent, StandardCharsets.UTF_8);
- assertTrue(text.contains("Lorem ipsum"));
- }, 5, 100);
- } finally {
- deleteFile(file);
- }
- }
-
- @Test
- public void uploadFileStreamSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder folder = getUniqueFolder(api);
-
- byte[] fileContent = new byte[10000];
- new Random().nextBytes(fileContent);
-
- BoxFile uploadedFile = null;
- try {
- InputStream uploadStream = new ByteArrayInputStream(fileContent);
- BoxFile.Info uploadedFileInfo = folder.uploadFile(uploadStream, BoxFileIT.generateString());
- uploadedFile = uploadedFileInfo.getResource();
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- uploadedFile.download(downloadStream);
- byte[] downloadedFileContent = downloadStream.toByteArray();
-
- assertThat(downloadedFileContent, is(equalTo(fileContent)));
- assertThat(folder, hasItem(Matchers.hasProperty("ID", equalTo(uploadedFile.getID()))));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void uploadAndDownloadFileSucceeds() throws IOException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder folder = getUniqueFolder(api);
- String fileName = "red_100x100.png";
- URL fileURL = this.getClass().getResource("/sample-files/" + fileName);
- String filePath = URLDecoder.decode(fileURL.getFile(), "utf-8");
- long fileSize = new File(filePath).length();
- byte[] fileContent = readAllBytes(filePath);
- BoxFile uploadedFile = null;
- try {
- InputStream uploadStream = Files.newInputStream(Paths.get(filePath));
- ProgressListener mockUploadListener = mock(ProgressListener.class);
- BoxFile.Info uploadedFileInfo = folder.uploadFile(
- uploadStream, BoxFileIT.generateString(), fileSize, mockUploadListener
- );
- uploadedFile = uploadedFileInfo.getResource();
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- ProgressListener mockDownloadListener = mock(ProgressListener.class);
- uploadedFile.download(downloadStream, mockDownloadListener);
- byte[] downloadedFileContent = downloadStream.toByteArray();
-
- assertThat(downloadedFileContent, is(equalTo(fileContent)));
- assertThat(folder, hasItem(Matchers.hasProperty("ID", equalTo(uploadedFile.getID()))));
- verify(mockUploadListener, atLeastOnce()).onProgressChanged(anyLong(), longThat(is(equalTo(fileSize))));
- verify(mockDownloadListener, atLeastOnce()).onProgressChanged(anyLong(), longThat(is(equalTo(fileSize))));
- } finally {
- deleteFile(uploadedFile);
- }
-
- }
-
- @Test
- public void downloadFileUseZstdSucceeds() throws IOException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- api.setUseZstdCompression(true);
-
- String fileName = "smalltest.pdf";
- URL fileURL = this.getClass().getResource("/sample-files/" + fileName);
- String filePath = URLDecoder.decode(fileURL.getFile(), "utf-8");
- byte[] fileContent = readAllBytes(filePath);
- BoxFile file = null;
- try {
- file = uploadSampleFileToUniqueFolder(api, fileName);
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- ProgressListener mockDownloadListener = mock(ProgressListener.class);
-
- URL url = CONTENT_URL_TEMPLATE.build(api.getBaseURL(), file.getID());
- BoxAPIRequest request = new BoxAPIRequest(api, url, "GET");
- BoxAPIResponse response = request.send();
- writeStream(response, downloadStream, mockDownloadListener);
-
- byte[] downloadedFileContent = downloadStream.toByteArray();
- assertThat(response.getHeaders().get("X-Content-Encoding").get(0), is(equalTo("zstd")));
- assertThat(downloadedFileContent, is(equalTo(fileContent)));
- } finally {
- deleteFile(file);
- }
- }
-
- @Test
- public void uploadAndDownloadFileDisabledZstdSucceeds() throws IOException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- api.setUseZstdCompression(false);
-
- String fileName = "smalltest.pdf";
- URL fileURL = this.getClass().getResource("/sample-files/" + fileName);
- String filePath = URLDecoder.decode(fileURL.getFile(), "utf-8");
- byte[] fileContent = readAllBytes(filePath);
- BoxFile file = null;
- try {
- file = uploadSampleFileToUniqueFolder(api, fileName);
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- ProgressListener mockDownloadListener = mock(ProgressListener.class);
-
- URL url = CONTENT_URL_TEMPLATE.build(api.getBaseURL(), file.getID());
- BoxAPIRequest request = new BoxAPIRequest(api, url, "GET");
- BoxAPIResponse response = request.send();
- writeStream(response, downloadStream, mockDownloadListener);
-
- byte[] downloadedFileContent = downloadStream.toByteArray();
- assertThat(response.getHeaders().get("X-Content-Encoding"), is(nullValue()));
- assertThat(downloadedFileContent, is(equalTo(fileContent)));
- } finally {
- deleteFile(file);
- }
- }
-
- @Test
- public void downloadFileRangeSucceeds() throws IOException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "red_100x100.png";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadSampleFileToUniqueFolder(api, fileName);
- BoxFile.Info uplodedFileInfo = uploadedFile.getInfo();
- long firstHalf = uplodedFileInfo.getSize() / 2;
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- uploadedFile.downloadRange(downloadStream, 0, firstHalf);
- uploadedFile.downloadRange(downloadStream, firstHalf + 1);
- byte[] downloadedFileContent = downloadStream.toByteArray();
-
- assertThat(downloadedFileContent, is(equalTo(this.readFileContent(fileName))));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void getInfoWithOnlyTheNameField() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[getInfoWithOnlyTheNameField] Test File.txt";
- BoxFile uploadedFile = null;
-
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- BoxFile.Info uploadedFileInfo = uploadedFile.getInfo("name");
-
- assertThat(uploadedFileInfo.getName(), is(equalTo(fileName)));
- assertThat(uploadedFileInfo.getDescription(), is(nullValue()));
- assertThat(uploadedFileInfo.getSize(), is(equalTo(0L)));
- } finally {
- deleteFile(uploadedFile);
- }
-
- }
-
- @Test
- public void fileLockAndUnlockSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[getInfoWithOnlyTheLockField] Test File" + Calendar.getInstance().getTimeInMillis() + ".txt";
- BoxFile uploadedFile = null;
-
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
-
- Calendar calendar = Calendar.getInstance();
- calendar.add(Calendar.DAY_OF_YEAR, 1);
- Date expiresAt = calendar.getTime();
- uploadedFile.lock(expiresAt, false);
-
- BoxFile.Info uploadedFileInfo = uploadedFile.getInfo("lock", "created_by");
- BoxLock fileLock = uploadedFileInfo.getLock();
-
- assertThat(fileLock, is(instanceOf(BoxLock.class)));
- assertThat(fileLock.getExpiresAt().toString(), is(equalTo(expiresAt.toString())));
- assertThat(fileLock.getIsDownloadPrevented(), is(equalTo(false)));
- assertThat(fileLock.getCreatedBy().getID(), is(equalTo(uploadedFileInfo.getCreatedBy().getID())));
-
- uploadedFile.unlock();
-
- BoxFile.Info updatedFileInfo = uploadedFile.getInfo("lock");
- assertThat(updatedFileInfo.getLock(), is(nullValue()));
-
- uploadedFile.lock(true);
-
- uploadedFileInfo = uploadedFile.getInfo("lock", "created_by");
- fileLock = uploadedFileInfo.getLock();
-
- assertThat(fileLock, is(instanceOf(BoxLock.class)));
- assertNull(fileLock.getExpiresAt());
- assertThat(fileLock.getIsDownloadPrevented(), is(equalTo(true)));
- assertThat(fileLock.getCreatedBy().getID(), is(equalTo(uploadedFileInfo.getCreatedBy().getID())));
-
- uploadedFile.unlock();
-
- uploadedFile.lock();
-
- uploadedFileInfo = uploadedFile.getInfo("lock", "created_by");
- fileLock = uploadedFileInfo.getLock();
-
- assertThat(fileLock, is(instanceOf(BoxLock.class)));
- assertNull(fileLock.getExpiresAt());
- assertThat(fileLock.getIsDownloadPrevented(), is(equalTo(false)));
- assertThat(fileLock.getCreatedBy().getID(), is(equalTo(uploadedFileInfo.getCreatedBy().getID())));
-
- uploadedFile.unlock();
- } finally {
- deleteFile(uploadedFile);
- }
-
- }
-
- @Test
- public void getInfoWithAllFields() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[getInfoWithAllFields] Test File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- BoxFile.Info uploadedFileInfo = uploadedFile.getInfo(BoxFile.ALL_FIELDS);
-
- assertThat(uploadedFileInfo.getName(), is(equalTo(fileName)));
- assertThat(uploadedFileInfo.getVersionNumber(), is(equalTo("1")));
- assertThat(uploadedFileInfo.getCommentCount(), is(equalTo(0L)));
- assertThat(uploadedFileInfo.getExtension(), is(equalTo("txt")));
- assertThat(uploadedFileInfo.getIsPackage(), is(false));
- assertThat(uploadedFileInfo.getItemStatus(), is(equalTo("active")));
- assertThat(uploadedFileInfo.getVersion(), not(nullValue()));
- assertThat(uploadedFileInfo.getVersion().getVersionID(), not(nullValue()));
- assertThat(uploadedFileInfo.getPermissions(), hasItem(BoxFile.Permission.CAN_INVITE_COLLABORATOR));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void updateFileWithSpecialCharsInNameSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String originalFileName = "[updateFileWithSpecialCharsInNameSucceeds] abc\";def.txt";
-
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, originalFileName, "Test file");
- assertThat(uploadedFile.getInfo().getName(), is(equalTo(originalFileName)));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void updateFileInfoSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String originalFileName = "[updateFileInfoSucceeds] Original Name.txt";
- String newFileName = "[updateFileInfoSucceeds] New Name.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, originalFileName, "Test file");
-
- BoxFile.Info newInfo = uploadedFile.new Info();
- newInfo.setName(newFileName);
- uploadedFile.updateInfo(newInfo);
-
- assertThat(uploadedFile.getInfo().getName(), is(equalTo(newFileName)));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void renameFileSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String originalFileName = "[renameFileSucceeds] Original Name.txt";
- String newFileName = "[renameFileSucceeds] New Name.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, originalFileName, "Test file");
-
- uploadedFile.rename(newFileName);
- BoxFile.Info newInfo = uploadedFile.getInfo();
-
- assertThat(newInfo.getName(), is(equalTo(newFileName)));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void uploadAndDownloadMultipleVersionsSucceeds() throws UnsupportedEncodingException {
- BoxFile uploadedFile = null;
- String fileName = "[uploadAndDownloadMultipleVersionsSucceeds] Multi-version File.txt";
- String version1Content = "Version 1";
- String version1Sha = "db3cbc01da600701b9fe4a497fe328e71fa7022f";
- String version2Content = "Version 2";
- ProgressListener mockUploadListener = mock(ProgressListener.class);
- try {
- uploadedFile = uploadTwoFileVersionsToUniqueFolder(fileName, version1Content,
- version2Content, mockUploadListener);
- Collection versions = uploadedFile.getVersions();
- BoxFileVersion previousVersion = versions.iterator().next();
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- ProgressListener mockDownloadListener = mock(ProgressListener.class);
- previousVersion.download(downloadStream, mockDownloadListener);
- String downloadedContent = downloadStream.toString(StandardCharsets.UTF_8.name());
-
- assertThat(versions, hasSize(1));
- assertThat(previousVersion.getSha1(), is(equalTo(version1Sha)));
- assertThat(downloadedContent, equalTo(version1Content));
- verify(mockDownloadListener, atLeastOnce()).onProgressChanged(anyLong(), anyLong());
- long version1Size = version1Content.getBytes(StandardCharsets.UTF_8).length;
- verify(mockUploadListener, atLeastOnce()).onProgressChanged(anyLong(),
- longThat(is(equalTo(version1Size))));
-
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void uploadNewVersionSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "Multi-version File.txt";
- String updatedFileName = "[uploadNewVersionSucceeds] Multi-version File.txt";
- Date contentModifiedAt = new Date(10000);
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Version 1");
- InputStream uploadStream = this.getFileContent("Version 1");
- BoxFile.Info newVersion = uploadedFile.uploadNewVersion(
- uploadStream,
- null,
- contentModifiedAt,
- updatedFileName,
- 0,
- null
- );
-
- assertEquals(updatedFileName, newVersion.getName());
- assertEquals(contentModifiedAt, newVersion.getContentModifiedAt());
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void getVersionSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[getVersionByIdSucceeds] Multi-version File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- uploadedFile.uploadNewVersion(this.getFileContent("Version 2"));
-
- Collection versions = uploadedFile.getVersions();
- BoxFileVersion versionFromGetVersions = versions.iterator().next();
-
- BoxFileVersion versionFromGetById = uploadedFile.getVersionByID(versionFromGetVersions.getID());
-
- assertThat(versionFromGetVersions.getVersionID(), equalTo(versionFromGetById.getVersionID()));
- assertThat(versionFromGetVersions.getFileID(), equalTo(versionFromGetById.getFileID()));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void deleteVersionSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[deleteVersionSucceeds] Multi-version File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- uploadedFile.uploadNewVersion(this.getFileContent("Version 2"));
-
- Collection versions = uploadedFile.getVersions();
- BoxFileVersion previousVersion = versions.iterator().next();
- previousVersion.delete();
-
- Collection versionsAfterRemove = uploadedFile.getVersions();
- assertThat(versionsAfterRemove, Matchers.hasSize(1));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void shouldReturnTrashedAtForADeleteVersion() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[deleteVersionSucceeds] Multi-version File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- uploadedFile.uploadNewVersion(this.getFileContent("Version 2"));
- Collection versions = uploadedFile.getVersions();
- assertThat(versions, Matchers.hasSize(1));
-
- BoxFileVersion version = versions.iterator().next();
- assertThat(version.getTrashedAt(), is(nullValue()));
-
- version.delete();
-
- BoxFileVersion trashedVersion = uploadedFile.getVersions().iterator().next();
- assertThat(trashedVersion.getTrashedAt(), is(notNullValue()));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void promoteVersionsSucceeds() throws UnsupportedEncodingException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[promoteVersionsSucceeds] Multi-version File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- uploadedFile.uploadNewVersion(this.getFileContent("Version 1"));
- uploadedFile.uploadNewVersion(this.getFileContent("Version 2"));
-
- Iterator iterator = uploadedFile.getVersions().iterator();
- BoxFileVersion version1 = iterator.next();
- version1.promote();
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- uploadedFile.download(downloadStream);
- String downloadedContent = downloadStream.toString(StandardCharsets.UTF_8.name());
- assertThat(downloadedContent, equalTo("Version 1"));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void canListVersions() {
- BoxFile uploadedFile = null;
- String fileName = "[canListVersions] Multi-version File.txt";
- try {
-
- uploadedFile = uploadTwoFileVersionsToUniqueFolder(
- fileName, "Version 1", "Version 2", mock(ProgressListener.class)
- );
-
- Collection versions = uploadedFile.getVersions();
- assertThat(versions.size(), is(1));
- BoxFileVersion version = versions.iterator().next();
- assertThat(version.getName(), is(notNullValue()));
- assertThat(version.getFileID(), is(notNullValue()));
- assertThat(version.getCreatedAt(), is(notNullValue()));
- assertThat(version.getVersionNumber(), is(nullValue()));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void canPaginateOverListOfVersions() {
- BoxFile uploadedFile = null;
- String fileName = "[canPaginateOverListOfVersions] Multi-version File.txt";
- try {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder uniqueFolder = getUniqueFolder(api);
- uploadedFile = uploadFileWithContentToSpecifiedFolder(fileName, "Version 1", uniqueFolder);
-
- byte[] fileBytes = "Version 2".getBytes(StandardCharsets.UTF_8);
- uploadedFile.uploadNewVersion(
- new ByteArrayInputStream(fileBytes), null, fileBytes.length, mock(ProgressListener.class));
-
- fileBytes = "Version 3".getBytes(StandardCharsets.UTF_8);
- uploadedFile.uploadNewVersion(
- new ByteArrayInputStream(fileBytes), null, fileBytes.length, mock(ProgressListener.class));
-
- Collection versionsPart1 = uploadedFile.getVersionsRange(0, 1);
- assertThat(versionsPart1.size(), is(1));
- BoxFileVersion boxFileVersion1 = versionsPart1.iterator().next();
-
- Collection versionsPart2 = uploadedFile.getVersionsRange(1, 2);
- assertThat(versionsPart2.size(), is(1));
- BoxFileVersion boxFileVersion2 = versionsPart2.iterator().next();
-
- Collection allVersions = uploadedFile.getVersionsRange(0, 10);
- assertThat(allVersions.size(), is(2));
- Iterator iterator = allVersions.iterator();
- assertThat(iterator.next(), is(boxFileVersion1));
- assertThat(iterator.next(), is(boxFileVersion2));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void canListVersionsWithSpecificFields() {
- BoxFile uploadedFile = null;
- String fileName = "[canListVersionsWithSpecificFields] Multi-version File.txt";
- try {
-
- uploadedFile = uploadTwoFileVersionsToUniqueFolder(
- fileName, "Version 1", "Version 2", mock(ProgressListener.class)
- );
-
- Collection versions = uploadedFile.getVersions("name", "version_number");
- assertThat(versions.size(), is(1));
- BoxFileVersion version = versions.iterator().next();
- assertThat(version.getName(), is(notNullValue()));
- assertThat(version.getFileID(), is(notNullValue()));
- assertThat(version.getCreatedAt(), is(nullValue()));
- assertThat(version.getVersionNumber(), is(1L));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void canListVersionsWithAllFields() {
- BoxFile uploadedFile = null;
- String fileName = "[canListVersionsWithAllFields] Multi-version File.txt";
- try {
- // given
- uploadedFile = uploadTwoFileVersionsToUniqueFolder(
- fileName, "Version 1", "Version 2", mock(ProgressListener.class)
- );
- BoxFileVersion version1 = uploadedFile.getVersions().iterator().next();
- version1.promote();
- version1.delete();
-
- // when
- Collection versions = uploadedFile.getVersions(ALL_VERSION_FIELDS);
-
- //then
- assertThat(versions.size(), is(2));
- Iterator iterator = versions.iterator();
- iterator.next();
- BoxFileVersion version = iterator.next();
- assertThat(version.getID(), is(notNullValue()));
- assertThat(version.getSha1(), is(notNullValue()));
- assertThat(version.getName(), is(notNullValue()));
- assertThat(version.getSize(), is(notNullValue()));
- assertThat(version.getUploaderDisplayName(), is(notNullValue()));
- assertThat(version.getCreatedAt(), is(notNullValue()));
- assertThat(version.getModifiedAt(), is(notNullValue()));
- assertThat(version.getModifiedBy(), is(notNullValue()));
- assertThat(version.getTrashedAt(), is(notNullValue()));
- assertThat(version.getTrashedBy(), is(notNullValue()));
- assertThat(version.getPurgedAt(), is(notNullValue()));
- assertThat(version.getFileID(), is(uploadedFile.getID()));
- assertThat(version.getVersionNumber(), is(notNullValue()));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void copyFileSucceeds() throws UnsupportedEncodingException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder uploadFolder = getUniqueFolder(api);
- String originalFileName = "[copyFileSucceeds] Original File.txt";
- String newFileName = "[copyFileSucceeds] New File.txt";
- String fileContent = "Test file";
- BoxFile uploadedFile = null;
- BoxFile copiedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, originalFileName, fileContent);
- copiedFile = uploadedFile.copy(uploadFolder, newFileName).getResource();
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- copiedFile.download(downloadStream);
- String downloadedContent = downloadStream.toString(StandardCharsets.UTF_8.name());
- assertThat(downloadedContent, equalTo(fileContent));
- } finally {
- deleteFile(uploadedFile);
- deleteFile(copiedFile);
- }
- }
-
- @Test
- public void moveFileSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[moveFileSucceeds] Test File.txt";
- String folderName = "[moveFileSucceeds] Destination Folder";
- BoxFile uploadedFile = null;
- BoxFolder destinationFolder = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
-
- destinationFolder = getUniqueFolder(api).createFolder(folderName).getResource();
- uploadedFile.move(destinationFolder);
-
- assertThat(destinationFolder,
- hasItem(Matchers.hasProperty("ID", equalTo(uploadedFile.getID()))));
- } finally {
- deleteFile(uploadedFile);
- deleteFolder(destinationFolder);
- }
- }
-
- @Test
- public void createAndUpdateSharedLinkSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[createAndUpdateSharedLinkSucceeds] Test File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- assertThat(
- uploadedFile.getInfo("is_accessible_via_shared_link").getIsAccessibleViaSharedLink(),
- is(false)
- );
- BoxSharedLink sharedLink = uploadedFile.createSharedLink(
- new BoxSharedLinkRequest()
- .access(OPEN)
- .permissions(true, true, true)
- );
-
- assertThat(sharedLink.getURL(), not(is(emptyOrNullString())));
-
- sharedLink.getPermissions().setCanDownload(false);
- BoxFile.Info info = uploadedFile.new Info();
- info.setSharedLink(sharedLink);
- uploadedFile.updateInfo(info);
-
- BoxFile.Info updatedInfo = uploadedFile.getInfo("shared_link", "is_accessible_via_shared_link");
- assertThat(updatedInfo.getSharedLink().getPermissions().getCanDownload(), is(false));
- assertThat(updatedInfo.getIsAccessibleViaSharedLink(), is(true));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void downloadpdateSharedLinkSucceeds() throws IOException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[downloadpdateSharedLinkSucceeds] Test File.txt";
- String fileContent = "Test file";
- String password = "Secret123@";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, fileContent);
- assertThat(
- uploadedFile.getInfo("is_accessible_via_shared_link").getIsAccessibleViaSharedLink(),
- is(false)
- );
- BoxSharedLink sharedLink = uploadedFile.createSharedLink(
- new BoxSharedLinkRequest()
- .access(OPEN)
- .password(password)
- .permissions(true, true, true)
- );
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- BoxFile.downloadFromSharedLink(api, downloadStream, sharedLink.getURL(), password);
- downloadStream.close();
- byte[] downloadedFileContent = downloadStream.toByteArray();
- assertThat(downloadedFileContent, is(equalTo(fileContent.getBytes())));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void createEditableSharedLinkSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[createEditableSharedLinkSucceeds] Test File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- uploadedFile.createSharedLink(
- new BoxSharedLinkRequest()
- .permissions(true, true, true)
- );
-
- BoxSharedLink.Permissions createdPermissions = uploadedFile.getInfo().getSharedLink().getPermissions();
- assertThat(createdPermissions.getCanPreview(), is(true));
- assertThat(createdPermissions.getCanDownload(), is(true));
- assertThat(createdPermissions.getCanEdit(), is(true));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void addCommentSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[addCommentSucceeds] Test File.txt";
- String commentMessage = "Non-empty message";
- BoxFile uploadedFile = null;
-
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- BoxComment.Info addedCommentInfo = uploadedFile.addComment(commentMessage);
-
- assertThat(addedCommentInfo.getMessage(), is(equalTo(commentMessage)));
- assertThat(uploadedFile.getComments(),
- hasItem(Matchers.hasProperty("ID", equalTo(addedCommentInfo.getID()))));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void addCommentWithMentionSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[addCommentWithMentionSucceeds] Test File.txt";
- String commentMessage = String.format(
- "Message mentioning @[%s:%s]",
- TestConfig.getCollaboratorID(),
- TestConfig.getCollaborator()
- );
- BoxFile uploadedFile = null;
-
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- BoxComment.Info addedCommentInfo = uploadedFile.addComment(commentMessage);
-
- String expectedCommentMessage = "Message mentioning " + TestConfig.getCollaborator();
- assertThat(addedCommentInfo.getMessage(), is(equalTo(expectedCommentMessage)));
- assertThat(uploadedFile.getComments(),
- hasItem(Matchers.hasProperty("ID", equalTo(addedCommentInfo.getID()))));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void createMetadataAndGetMetadataOnInfoSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[createMetadataSucceeds] Test File.txt";
-
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- uploadedFile.createMetadata(new Metadata().add("/foo", "bar"));
-
- Metadata metadata = uploadedFile.getMetadata();
- assertNotNull(metadata);
- assertEquals("bar", metadata.getString("/foo"));
-
- Metadata actualMD = uploadedFile.getInfo("metadata.global.properties")
- .getMetadata("properties", "global");
- assertNotNull("Metadata should not be null for this file", actualMD);
- } catch (BoxAPIException e) {
- fail("Metadata should have been present on this folder");
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void updateMetadataSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[updateMetadataSucceeds] Test File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- uploadedFile.createMetadata(new Metadata().add("/foo", "bar"));
-
- Metadata metadata = uploadedFile.getMetadata();
- assertNotNull(metadata);
- assertEquals("bar", metadata.getString("/foo"));
-
- uploadedFile.updateMetadata(metadata.replace("/foo", "baz"));
-
- Metadata updatedMetadata = uploadedFile.getMetadata();
- assertNotNull(updatedMetadata);
- assertEquals("baz", updatedMetadata.getString("/foo"));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void addTaskSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[addTaskSucceeds] Test File " + Calendar.getInstance().getTimeInMillis() + ".txt";
- String taskMessage = "Non-empty message";
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
- Date dueAt = new Date(new Date().getTime() + (1000 * 24 * 60 * 60));
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- BoxTask.Info addedTaskInfo = uploadedFile.addTask(BoxTask.Action.REVIEW, taskMessage, dueAt);
-
- assertThat(addedTaskInfo.getMessage(), is(equalTo(taskMessage)));
- assertThat(dateFormat.format(addedTaskInfo.getDueAt()), is(equalTo(dateFormat.format(dueAt))));
- assertThat(uploadedFile.getTasks(), hasItem(Matchers.hasProperty("ID",
- equalTo(addedTaskInfo.getID()))));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void getPreviewLink() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[getPreviewLink] Test File.txt";
- BoxFile uploadedFile = null;
-
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- URL uploadedFilePreviewLink = uploadedFile.getPreviewLink();
-
- assertThat(uploadedFilePreviewLink, is(notNullValue()));
- assertThat(uploadedFilePreviewLink.toString(), not(is(emptyOrNullString())));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void getDownloadURL() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[getPreviewLink] Test File.txt";
- BoxFile uploadedFile = null;
-
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- URL uploadedFileDownloadURL = uploadedFile.getDownloadURL();
-
- assertThat(uploadedFileDownloadURL, is(notNullValue()));
- assertThat(uploadedFileDownloadURL.toString(), not(is(emptyOrNullString())));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void setCollectionsSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[setCollectionsSucceeds] Test File " + Calendar.getInstance().getTimeInMillis() + ".txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- Iterable collections = BoxCollection.getAllCollections(api);
- BoxCollection.Info favoritesInfo = collections.iterator().next();
- BoxFile.Info updatedInfo = uploadedFile.setCollections(favoritesInfo.getResource());
-
- assertThat(updatedInfo.getCollections(), hasItem(Matchers.hasProperty("ID",
- equalTo(favoritesInfo.getID()))));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void setCollectionsWithInfoSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- String fileName = "[setCollectionsWithInfoSucceeds] Test File.txt";
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolder(api, fileName, "Test file");
- Iterable collections = BoxCollection.getAllCollections(api);
- BoxCollection.Info favoritesInfo = collections.iterator().next();
- ArrayList newCollections = new ArrayList<>();
- newCollections.add(favoritesInfo.getResource());
- BoxFile.Info fileInfo = uploadedFile.new Info();
- fileInfo.setCollections(newCollections);
- uploadedFile.updateInfo(fileInfo);
- BoxFile.Info updatedInfo = uploadedFile.getInfo("collections");
-
- assertThat(fileInfo.getCollections(), hasItem(Matchers.hasProperty("ID",
- equalTo(favoritesInfo.getID()))));
- assertThat(updatedInfo.getCollections(), hasItem(Matchers.hasProperty("ID",
- equalTo(favoritesInfo.getID()))));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void uploadSessionCommitFlowSuccess() throws Exception {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder folder = getUniqueFolder(api);
-
- BoxFile uploadedFile = null;
- File file;
- try {
- file = FileUtils.generate(randomizeName("LargeFile.txt"), 21_000_000);
- long fileSize = file.length();
-
- //Create the session
- BoxFileUploadSession.Info session =
- this.createFileUploadSession(folder, BoxFileIT.generateString(), fileSize);
-
- //Create the parts
- MessageDigest fileDigest = this.uploadParts(session, fileSize, file);
-
- //List the session parts
- List parts = this.listUploadSessionParts(session.getResource());
-
- byte[] digestBytes = fileDigest.digest();
- String digest = Base64.encode(digestBytes);
-
- //Verify the delete session
- uploadedFile = this.commitSession(session.getResource(), digest, parts);
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void uploadSessionAbortFlowSuccess() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder folder = getUniqueFolder(api);
- BoxFileUploadSession.Info sessionInfo =
- this.createFileUploadSession(folder, BoxFileIT.generateString(), 25_000_000);
- assertNotNull(sessionInfo.getUploadSessionId());
- assertNotNull(sessionInfo.getSessionExpiresAt());
-
- BoxFileUploadSession.Endpoints endpoints = sessionInfo.getSessionEndpoints();
- assertNotNull(endpoints);
- assertNotNull(endpoints.getUploadPartEndpoint());
- assertNotNull(endpoints.getStatusEndpoint());
- assertNotNull(endpoints.getListPartsEndpoint());
- assertNotNull(endpoints.getCommitEndpoint());
- assertNotNull(endpoints.getAbortEndpoint());
-
- //Verify the status of the session
- BoxFileUploadSession session = sessionInfo.getResource();
- this.verifySessionExists(session);
-
- //Verify the delete session
- session.abort();
- this.verifySessionWasAborted(session);
- }
-
- @Test
- public void uploadLargeFileVersionWithAttributes() throws Exception {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileWithSomeContent(randomizeName("LargeFile.txt"), getUniqueFolder(api));
-
- Map fileAttributes = new HashMap<>();
- fileAttributes.put("content_modified_at", "2017-04-08T00:58:08Z");
-
- File file = FileUtils.generate(randomizeName("LargeFile.txt"), 21_000_000);
- FileInputStream stream = new FileInputStream(file);
- BoxFile.Info fileVersion = uploadedFile.uploadLargeFile(stream, file.length(), fileAttributes);
- assertNotNull(fileVersion);
-
- assertEquals(1491613088000L, fileVersion.getContentModifiedAt().getTime());
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void setsVanityNameOnASharedLink() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolderWithSomeContent(api, "file_to_share.txt");
-
- String vanityName = "myCustomName-" + System.currentTimeMillis();
- BoxSharedLinkRequest request = new BoxSharedLinkRequest()
- .permissions(true, true)
- .access(OPEN)
- .vanityName(vanityName)
- .password("my-random-password");
- BoxSharedLink linkWithVanityName = uploadedFile.createSharedLink(request);
-
- assertThat(linkWithVanityName.getVanityName(), is(vanityName));
- BoxSharedLink sharedLink = uploadedFile.getInfo().getSharedLink();
- assertThat(sharedLink.getVanityName(), is(vanityName));
- assertThat(sharedLink.getPermissions().getCanPreview(), is(true));
- assertThat(sharedLink.getPermissions().getCanDownload(), is(true));
- assertThat(sharedLink.getAccess(), is(OPEN));
- assertThat(sharedLink.getIsPasswordEnabled(), is(true));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void createDefaultSharedLink() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFile uploadedFile = null;
- try {
- uploadedFile = uploadFileToUniqueFolderWithSomeContent(api, "file_to_share.txt");
- BoxSharedLinkRequest request = new BoxSharedLinkRequest();
- uploadedFile.createSharedLink(request);
- BoxSharedLink sharedLink = uploadedFile.getInfo().getSharedLink();
- assertThat(sharedLink, is(notNullValue()));
- } finally {
- deleteFile(uploadedFile);
- }
- }
-
- @Test
- public void setsAndRetrievesDispositionAt() throws ParseException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder testFolder = null;
- try {
- String policyId = RetentionPolicyUtils.getOneDayRetentionPolicy(api).getID();
- BoxFolder rootFolder = getUniqueFolder(api);
- testFolder = rootFolder.createFolder(randomizeName("[setsAndRetrievesDispositionAt]")).getResource();
- createAssignmentToFolder(api, policyId, testFolder.getID());
- BoxFile uploadedFile = uploadFileWithSomeContent("file_with_disposition.txt", testFolder);
- BoxFile.Info info = uploadedFile.getInfo();
-
- String dispositionAt = BoxDateFormat.format(LocalDateTime.now().plusDays(7).toInstant(UTC));
- info.setDispositionAt(BoxDateFormat.parse(dispositionAt));
- uploadedFile.updateInfo(info);
-
- BoxFile.Info updatedInfo = uploadedFile.getInfo("disposition_at");
- assertThat(BoxDateFormat.format(updatedInfo.getDispositionAt()), is(dispositionAt));
- } finally {
- deleteFolder(testFolder);
- }
- }
-
- @Test
- public void uploadAndDownloadEmptyFileSucceeds() throws IOException {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder folder = getUniqueFolder(api);
- String fileName = "empty_file";
- URL fileURL = this.getClass().getResource("/sample-files/" + fileName);
- String filePath = URLDecoder.decode(fileURL.getFile(), "utf-8");
- long fileSize = new File(filePath).length();
- byte[] fileContent = readAllBytes(filePath);
- BoxFile uploadedFile = null;
- try {
- InputStream uploadStream = Files.newInputStream(Paths.get(filePath));
- ProgressListener mockUploadListener = mock(ProgressListener.class);
- BoxFile.Info uploadedFileInfo = folder.uploadFile(
- uploadStream, BoxFileIT.generateString(), fileSize, mockUploadListener
- );
- uploadedFile = uploadedFileInfo.getResource();
-
- ByteArrayOutputStream downloadStream = new ByteArrayOutputStream();
- uploadedFile.download(downloadStream);
- byte[] downloadedFileContent = downloadStream.toByteArray();
-
- assertThat(downloadedFileContent, is(equalTo(fileContent)));
- assertThat(folder, hasItem(Matchers.hasProperty("ID", equalTo(uploadedFile.getID()))));
- } finally {
- deleteFile(uploadedFile);
- }
-
- }
-
- private byte[] readFileContent(String fileName) throws IOException {
- URL fileURL = this.getClass().getResource("/sample-files/" + fileName);
- String filePath = URLDecoder.decode(fileURL.getFile(), "utf-8");
- return readAllBytes(filePath);
- }
-
- private ByteArrayInputStream getFileContent(String fileContent) {
- return new ByteArrayInputStream(fileContent.getBytes(UTF_8));
- }
-
-
- private BoxFileUploadSession.Info createFileUploadSession(BoxFolder folder, String fileName, long fileSize) {
- BoxFileUploadSession.Info session = folder.createUploadSession(fileName, fileSize);
- assertNotNull(session.getUploadSessionId());
- assertNotNull(session.getSessionExpiresAt());
-
- BoxFileUploadSession.Endpoints endpoints = session.getSessionEndpoints();
- assertNotNull(endpoints);
- assertNotNull(endpoints.getUploadPartEndpoint());
- assertNotNull(endpoints.getStatusEndpoint());
- assertNotNull(endpoints.getListPartsEndpoint());
- assertNotNull(endpoints.getCommitEndpoint());
- assertNotNull(endpoints.getAbortEndpoint());
-
- return session;
- }
-
- private MessageDigest uploadParts(BoxFileUploadSession.Info session, long fileSize, File file)
- throws Exception {
-
- FileInputStream stream = new FileInputStream(file);
- MessageDigest fileDigest = MessageDigest.getInstance("SHA1");
- DigestInputStream dis = new DigestInputStream(stream, fileDigest);
-
- long offset = 0;
- long processed = 0;
- boolean canBreak = false;
- do {
- long min = session.getPartSize();
- long diff = fileSize - processed;
- if (diff < min) {
- min = diff;
- canBreak = true;
- }
-
- BoxFileUploadSessionPart part = session.getResource().uploadPart(dis, offset, (int) min, fileSize);
- assertNotNull(part.getSha1());
- assertNotNull(part.getPartId());
- assertEquals(part.getOffset(), offset);
- assertTrue(part.getSize() <= session.getPartSize());
- offset = offset + session.getPartSize();
- processed += min;
- } while (!canBreak);
-
- return fileDigest;
- }
-
- private List listUploadSessionParts(BoxFileUploadSession session) {
- BoxFileUploadSessionPartList list = session.listParts(0, 100);
- return list.getEntries();
- }
-
- private BoxFile commitSession(BoxFileUploadSession session, String digest, List parts) {
- BoxFile.Info file = session.commit(digest, parts, null, null, null);
- assertNotNull(file);
- return file.getResource();
- }
-
- private void verifySessionExists(BoxFileUploadSession session) {
- assertNotNull(session);
- BoxFileUploadSession.Info sessionInfo = session.getStatus();
- assertNotNull(sessionInfo.getUploadSessionId());
- assertNotNull(sessionInfo.getSessionExpiresAt());
- }
-
- private void verifySessionWasAborted(BoxFileUploadSession session) {
- try {
- session.getStatus();
- //If the session is aborted, this line should not be executed.
- fail("Upload session is not deleted");
- } catch (BoxAPIException apiEx) {
- assertEquals(apiEx.getResponseCode(), 404);
- }
- }
-
- private static String generateString() {
- return randomUUID().toString();
- }
-}
diff --git a/src/intTest/java/com/box/sdk/BoxFolderIT.java b/src/intTest/java/com/box/sdk/BoxFolderIT.java
deleted file mode 100644
index 130a870b7..000000000
--- a/src/intTest/java/com/box/sdk/BoxFolderIT.java
+++ /dev/null
@@ -1,974 +0,0 @@
-package com.box.sdk;
-
-import static com.box.sdk.BoxApiProvider.jwtApiForServiceAccount;
-import static com.box.sdk.BoxCollaborationAllowlist.AllowlistDirection.INBOUND;
-import static com.box.sdk.BoxFolder.SortDirection.ASC;
-import static com.box.sdk.BoxSharedLink.Access.OPEN;
-import static com.box.sdk.CleanupTools.removeAllowedDomains;
-import static com.box.sdk.PagingParameters.marker;
-import static com.box.sdk.PagingParameters.offset;
-import static com.box.sdk.SortParameters.ascending;
-import static com.box.sdk.SortParameters.none;
-import static com.box.sdk.UniqueTestFolder.getUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.randomizeName;
-import static com.box.sdk.UniqueTestFolder.removeUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.setupUniqeFolder;
-import static com.box.sdk.UniqueTestFolder.uploadFileToUniqueFolder;
-import static com.box.sdk.UniqueTestFolder.uploadFileToUniqueFolderWithSomeContent;
-import static com.box.sdk.UniqueTestFolder.uploadFileWithSomeContent;
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.Matchers.emptyOrNullString;
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.is;
-import static org.hamcrest.Matchers.not;
-import static org.hamcrest.Matchers.nullValue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import com.box.sdk.BoxCollaboration.Role;
-import com.box.sdk.sharedlink.BoxSharedLinkRequest;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TimeZone;
-import java.util.UUID;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.stream.IntStream;
-import org.hamcrest.Matchers;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-/**
- * {@link BoxFolder} related integration tests.
- */
-public class BoxFolderIT {
-
- private static final String GMAIL_COM_DOMAIN = "gmail.com";
- private static final String YAHOO_COM_DOMAIN = "yahoo.com";
-
- @BeforeClass
- public static void setup() {
- setupUniqeFolder();
- }
-
- @AfterClass
- public static void tearDown() {
- removeUniqueFolder();
- }
-
- @Before
- public void clearAllowedDomains() {
- removeAllowedDomains(GMAIL_COM_DOMAIN, YAHOO_COM_DOMAIN);
- }
-
- @Test
- public void creatingAndDeletingFolderSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- BoxFolder childFolder =
- rootFolder.createFolder("[creatingAndDeletingFolderSucceeds] Ĥȅľľő Ƒŕőďő").getResource();
-
- assertThat(rootFolder,
- hasItem(Matchers.hasProperty("ID", equalTo(childFolder.getID()))));
-
- childFolder.delete(false);
- assertThat(rootFolder,
- not(hasItem(Matchers.hasProperty("ID", equalTo(childFolder.getID())))));
- }
-
- @Test
- public void getFolderInfoReturnsCorrectInfo() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxUser currentUser = BoxUser.getCurrentUser(api);
- final String expectedName = "[getFolderInfoReturnsCorrectInfo] Child Folder";
- final String expectedCreatedByID = currentUser.getID();
- BoxFolder childFolder = null;
-
- BoxFolder rootFolder = getUniqueFolder(api);
- final String expectedParentFolderID = rootFolder.getID();
- final String expectedParentFolderName = rootFolder.getInfo().getName();
-
- try {
- childFolder = rootFolder.createFolder(expectedName).getResource();
- BoxFolder.Info info = childFolder.getInfo(BoxItem.ALL_FIELDS);
-
- String actualName = info.getName();
- String actualCreatedByID = info.getCreatedBy().getID();
- String actualParentFolderID = info.getParent().getID();
- String actualParentFolderName = info.getParent().getName();
- List actualPathCollection = info.getPathCollection();
-
- assertThat(expectedName, equalTo(actualName));
- assertThat(expectedCreatedByID, equalTo(actualCreatedByID));
- assertThat(expectedParentFolderID, equalTo(actualParentFolderID));
- assertThat(expectedParentFolderName, equalTo(actualParentFolderName));
- assertThat(actualPathCollection, hasItem(Matchers.hasProperty("ID", equalTo("0"))));
- assertThat(info.getPermissions(), is(equalTo(EnumSet.allOf(BoxFolder.Permission.class))));
- assertThat(info.getItemStatus(), is(equalTo("active")));
- } finally {
- this.deleteFolder(childFolder);
- }
- }
-
- @Test
- public void getInfoWithOnlyTheNameField() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- final String expectedName = UniqueTestFolder.getUniqueFolderName();
-
- BoxFolder.Info rootFolderInfo = rootFolder.getInfo("name");
-
- assertThat(expectedName, equalTo(rootFolderInfo.getName()));
- assertThat(rootFolderInfo.getDescription(), is(nullValue()));
- assertThat(rootFolderInfo.getSize(), is(0L));
- }
-
- @Test
- public void iterateWithOnlyTheNameField() {
- final String expectedName = "[iterateWithOnlyTheNameField] Child Folder";
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- BoxFolder childFolder = null;
-
- try {
- childFolder = rootFolder.createFolder(expectedName).getResource();
-
- Iterable children = rootFolder.getChildren("name");
- boolean found = false;
- for (BoxItem.Info childInfo : children) {
- if (childInfo.getID().equals(childFolder.getID())) {
- found = true;
- assertThat(childInfo.getName(), is(equalTo(expectedName)));
- assertThat(childInfo.getSize(), is(equalTo(0L)));
- assertThat(childInfo.getDescription(), is(nullValue()));
- }
- }
- assertThat(found, is(true));
- } finally {
- this.deleteFolder(childFolder);
- }
- }
-
- @Test
- public void uploadFileSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- BoxFile uploadedFile = null;
-
- try {
- uploadedFile = uploadFileToUniqueFolderWithSomeContent(api, randomizeName("Test File"));
-
- assertThat(rootFolder, hasItem(Matchers.hasProperty("ID", equalTo(uploadedFile.getID()))));
- } finally {
- this.deleteFile(uploadedFile);
- assertThat(rootFolder,
- not(hasItem(Matchers.hasProperty("ID", equalTo(uploadedFile.getID())))));
- }
- }
-
- @Test
- public void uploadFileUploadFileCallbackSucceeds() {
- BoxAPIConnection api = jwtApiForServiceAccount();
- BoxFolder rootFolder = getUniqueFolder(api);
- BoxFile uploadedFile = null;
- final AtomicReference callbackWasCalled = new AtomicReference<>(false);
-
- try {
-
- final String fileContent = randomizeName("Test file");
- uploadedFile = rootFolder.uploadFile(outputStream -> {
- outputStream.write(fileContent.getBytes());
- callbackWasCalled.set(true);
- }, "Test File.txt").getResource();
-
- assertThat(rootFolder, hasItem(Matchers.