From 38aa682d3f7731effc9a17869c4ca930ff18e721 Mon Sep 17 00:00:00 2001
From: Nathan Broadbent <git@ndbroadbent.com>
Date: Wed, 26 Feb 2025 20:43:28 +1300
Subject: [PATCH 1/6] Updated on 2025-02-26 20:43:28. Version: 2.0.0

---
 .github/workflows/maven.yml                   |   30 +
 .gitignore                                    |   21 +
 .openapi-generator-ignore                     |   23 +
 .openapi-generator/FILES                      |  179 +
 .openapi-generator/VERSION                    |    1 +
 .travis.yml                                   |   22 +
 CHANGELOG.md                                  |   35 +
 LICENSE                                       |    7 +
 README.md                                     |  260 +
 api/openapi.yaml                              | 6076 +++++++++++++++++
 build.gradle                                  |  158 +
 build.sbt                                     |   27 +
 docs/AddFieldsData.md                         |   13 +
 docs/BatchGeneratePdfs201Response.md          |   26 +
 docs/CombinePdfsData.md                       |   18 +
 docs/CombinedSubmission.md                    |   36 +
 docs/CombinedSubmissionAction.md              |   49 +
 docs/CombinedSubmissionData.md                |   17 +
 docs/CopyTemplateOptions.md                   |   14 +
 docs/CreateCombinedSubmissionResponse.md      |   24 +
 docs/CreateCustomFileData.md                  |   13 +
 docs/CreateCustomFileResponse.md              |   24 +
 docs/CreateFolderData.md                      |   13 +
 docs/CreateHtmlSubmissionData.md              |   21 +
 docs/CreateHtmlTemplate.md                    |   13 +
 docs/CreatePdfSubmissionData.md               |   20 +
 docs/CreatePdfTemplate.md                     |   13 +
 docs/CreateSubmissionDataRequestData.md       |   44 +
 ...CreateSubmissionDataRequestEventRequest.md |   43 +
 ...reateSubmissionDataRequestEventResponse.md |   24 +
 docs/CreateSubmissionDataRequestResponse.md   |   24 +
 ...reateSubmissionDataRequestTokenResponse.md |   24 +
 docs/CreateSubmissionResponse.md              |   24 +
 docs/CustomFile.md                            |   14 +
 docs/ErrorResponse.md                         |   22 +
 docs/Folder.md                                |   16 +
 docs/JsonSchema.md                            |   21 +
 docs/ListSubmissionsResponse.md               |   15 +
 docs/MoveFolderData.md                        |   13 +
 docs/MoveTemplateData.md                      |   13 +
 docs/MultipleErrorsResponse.md                |   22 +
 docs/PdfApi.md                                | 2805 ++++++++
 docs/RenameFolderData.md                      |   13 +
 docs/Submission.md                            |   65 +
 docs/SubmissionAction.md                      |   49 +
 docs/SubmissionBatch.md                       |   30 +
 docs/SubmissionBatchData.md                   |   15 +
 docs/SubmissionBatchWithSubmissions.md        |   31 +
 docs/SubmissionDataRequest.md                 |   69 +
 docs/SubmissionDataRequestEvent.md            |   48 +
 docs/SubmissionDataRequestShow.md             |   70 +
 docs/SubmissionDataRequestToken.md            |   16 +
 docs/SubmissionPreview.md                     |   51 +
 docs/SuccessErrorResponse.md                  |   23 +
 docs/SuccessMultipleErrorsResponse.md         |   23 +
 docs/Template.md                              |   79 +
 docs/TemplateAddFieldsResponse.md             |   24 +
 docs/TemplatePreview.md                       |   69 +
 docs/UpdateHtmlTemplate.md                    |   13 +
 docs/UpdateSubmissionDataRequestData.md       |   30 +
 docs/UploadPresignResponse.md                 |   24 +
 git_push.sh                                   |   57 +
 gradle.properties                             |    6 +
 gradle/wrapper/gradle-wrapper.jar             |  Bin 0 -> 43453 bytes
 gradle/wrapper/gradle-wrapper.properties      |    7 +
 gradlew                                       |  249 +
 gradlew.bat                                   |   92 +
 pom.xml                                       |  341 +
 settings.gradle                               |    1 +
 src/main/AndroidManifest.xml                  |    3 +
 .../com/docspring/AbstractOpenApiSchema.java  |  149 +
 .../java/com/docspring/AddFieldsData.java     |  121 +
 src/main/java/com/docspring/ApiClient.java    | 1274 ++++
 src/main/java/com/docspring/ApiException.java |   96 +
 src/main/java/com/docspring/ApiResponse.java  |   74 +
 .../BatchGeneratePdfs201Response.java         |  293 +
 .../java/com/docspring/CombinePdfsData.java   |  281 +
 .../com/docspring/CombinedSubmission.java     |  591 ++
 .../docspring/CombinedSubmissionAction.java   |  384 ++
 .../com/docspring/CombinedSubmissionData.java |  249 +
 .../java/com/docspring/Configuration.java     |   41 +
 .../com/docspring/CopyTemplateOptions.java    |  143 +
 .../CreateCombinedSubmissionResponse.java     |  221 +
 .../com/docspring/CreateCustomFileData.java   |  111 +
 .../docspring/CreateCustomFileResponse.java   |  221 +
 .../java/com/docspring/CreateFolderData.java  |  111 +
 .../docspring/CreateHtmlSubmissionData.java   |  367 +
 .../com/docspring/CreateHtmlTemplate.java     |  111 +
 .../docspring/CreatePdfSubmissionData.java    |  346 +
 .../java/com/docspring/CreatePdfTemplate.java |  111 +
 .../CreateSubmissionDataRequestData.java      |  337 +
 ...eateSubmissionDataRequestEventRequest.java |  257 +
 ...ateSubmissionDataRequestEventResponse.java |  221 +
 .../CreateSubmissionDataRequestResponse.java  |  221 +
 ...ateSubmissionDataRequestTokenResponse.java |  221 +
 .../docspring/CreateSubmissionResponse.java   |  221 +
 src/main/java/com/docspring/CustomFile.java   |  143 +
 .../java/com/docspring/ErrorResponse.java     |  176 +
 src/main/java/com/docspring/Folder.java       |  207 +
 src/main/java/com/docspring/JSON.java         |  261 +
 .../java/com/docspring/JavaTimeFormatter.java |   64 +
 src/main/java/com/docspring/JsonSchema.java   |  378 +
 .../docspring/ListSubmissionsResponse.java    |  187 +
 .../java/com/docspring/MoveFolderData.java    |  111 +
 .../java/com/docspring/MoveTemplateData.java  |  111 +
 .../com/docspring/MultipleErrorsResponse.java |  186 +
 src/main/java/com/docspring/Pair.java         |   57 +
 src/main/java/com/docspring/PdfApi.java       | 2156 ++++++
 .../java/com/docspring/RFC3339DateFormat.java |   58 +
 .../java/com/docspring/RenameFolderData.java  |  111 +
 .../com/docspring/ServerConfiguration.java    |   72 +
 .../java/com/docspring/ServerVariable.java    |   37 +
 src/main/java/com/docspring/StringUtil.java   |   83 +
 src/main/java/com/docspring/Submission.java   |  967 +++
 .../java/com/docspring/SubmissionAction.java  |  384 ++
 .../java/com/docspring/SubmissionBatch.java   |  373 +
 .../com/docspring/SubmissionBatchData.java    |  185 +
 .../SubmissionBatchWithSubmissions.java       |  416 ++
 .../com/docspring/SubmissionDataRequest.java  |  884 +++
 .../docspring/SubmissionDataRequestEvent.java |  395 ++
 .../docspring/SubmissionDataRequestShow.java  |  916 +++
 .../docspring/SubmissionDataRequestToken.java |  207 +
 .../java/com/docspring/SubmissionPreview.java |  832 +++
 .../com/docspring/SuccessErrorResponse.java   |  178 +
 .../SuccessMultipleErrorsResponse.java        |  188 +
 src/main/java/com/docspring/Template.java     | 1654 +++++
 .../docspring/TemplateAddFieldsResponse.java  |  228 +
 .../java/com/docspring/TemplatePreview.java   | 1318 ++++
 .../com/docspring/UpdateHtmlTemplate.java     |  111 +
 .../UpdateSubmissionDataRequestData.java      |  262 +
 .../com/docspring/UploadPresignResponse.java  |  240 +
 .../java/com/docspring/auth/ApiKeyAuth.java   |   79 +
 .../com/docspring/auth/Authentication.java    |   33 +
 .../com/docspring/auth/HttpBasicAuth.java     |   55 +
 .../com/docspring/auth/HttpBearerAuth.java    |   62 +
 .../java/com/docspring/AddFieldsDataTest.java |   51 +
 .../BatchGeneratePdfs201ResponseTest.java     |   84 +
 .../com/docspring/CombinePdfsDataTest.java    |   91 +
 .../CombinedSubmissionActionTest.java         |   89 +
 .../docspring/CombinedSubmissionDataTest.java |   83 +
 .../com/docspring/CombinedSubmissionTest.java |  156 +
 .../docspring/CopyTemplateOptionsTest.java    |   57 +
 .../CreateCombinedSubmissionResponseTest.java |   68 +
 .../docspring/CreateCustomFileDataTest.java   |   49 +
 .../CreateCustomFileResponseTest.java         |   68 +
 .../com/docspring/CreateFolderDataTest.java   |   49 +
 .../CreateHtmlSubmissionDataTest.java         |  113 +
 .../com/docspring/CreateHtmlTemplateTest.java |   49 +
 .../CreatePdfSubmissionDataTest.java          |  108 +
 .../com/docspring/CreatePdfTemplateTest.java  |   49 +
 .../CreateSubmissionDataRequestDataTest.java  |   83 +
 ...SubmissionDataRequestEventRequestTest.java |   61 +
 ...ubmissionDataRequestEventResponseTest.java |   68 +
 ...eateSubmissionDataRequestResponseTest.java |   68 +
 ...ubmissionDataRequestTokenResponseTest.java |   68 +
 .../CreateSubmissionResponseTest.java         |   68 +
 .../java/com/docspring/CustomFileTest.java    |   57 +
 .../java/com/docspring/ErrorResponseTest.java |   57 +
 src/test/java/com/docspring/FolderTest.java   |   73 +
 .../java/com/docspring/JsonSchemaTest.java    |  116 +
 .../ListSubmissionsResponseTest.java          |   69 +
 .../com/docspring/MoveFolderDataTest.java     |   49 +
 .../com/docspring/MoveTemplateDataTest.java   |   49 +
 .../docspring/MultipleErrorsResponseTest.java |   59 +
 .../com/docspring/PdfApiTest.java.original    |  567 ++
 .../com/docspring/RenameFolderDataTest.java   |   49 +
 .../com/docspring/SubmissionActionTest.java   |   89 +
 .../docspring/SubmissionBatchDataTest.java    |   67 +
 .../com/docspring/SubmissionBatchTest.java    |  106 +
 .../SubmissionBatchWithSubmissionsTest.java   |  117 +
 .../SubmissionDataRequestEventTest.java       |   97 +
 .../SubmissionDataRequestShowTest.java        |  219 +
 .../docspring/SubmissionDataRequestTest.java  |  211 +
 .../SubmissionDataRequestTokenTest.java       |   73 +
 .../com/docspring/SubmissionPreviewTest.java  |  213 +
 .../java/com/docspring/SubmissionTest.java    |  237 +
 .../docspring/SuccessErrorResponseTest.java   |   57 +
 .../SuccessMultipleErrorsResponseTest.java    |   59 +
 .../TemplateAddFieldsResponseTest.java        |   67 +
 .../com/docspring/TemplatePreviewTest.java    |  332 +
 src/test/java/com/docspring/TemplateTest.java |  412 ++
 .../com/docspring/UpdateHtmlTemplateTest.java |   49 +
 .../UpdateSubmissionDataRequestDataTest.java  |   75 +
 .../docspring/UploadPresignResponseTest.java  |   73 +
 184 files changed, 38191 insertions(+)
 create mode 100644 .github/workflows/maven.yml
 create mode 100644 .gitignore
 create mode 100644 .openapi-generator-ignore
 create mode 100644 .openapi-generator/FILES
 create mode 100644 .openapi-generator/VERSION
 create mode 100644 .travis.yml
 create mode 100644 CHANGELOG.md
 create mode 100644 LICENSE
 create mode 100644 README.md
 create mode 100644 api/openapi.yaml
 create mode 100644 build.gradle
 create mode 100644 build.sbt
 create mode 100644 docs/AddFieldsData.md
 create mode 100644 docs/BatchGeneratePdfs201Response.md
 create mode 100644 docs/CombinePdfsData.md
 create mode 100644 docs/CombinedSubmission.md
 create mode 100644 docs/CombinedSubmissionAction.md
 create mode 100644 docs/CombinedSubmissionData.md
 create mode 100644 docs/CopyTemplateOptions.md
 create mode 100644 docs/CreateCombinedSubmissionResponse.md
 create mode 100644 docs/CreateCustomFileData.md
 create mode 100644 docs/CreateCustomFileResponse.md
 create mode 100644 docs/CreateFolderData.md
 create mode 100644 docs/CreateHtmlSubmissionData.md
 create mode 100644 docs/CreateHtmlTemplate.md
 create mode 100644 docs/CreatePdfSubmissionData.md
 create mode 100644 docs/CreatePdfTemplate.md
 create mode 100644 docs/CreateSubmissionDataRequestData.md
 create mode 100644 docs/CreateSubmissionDataRequestEventRequest.md
 create mode 100644 docs/CreateSubmissionDataRequestEventResponse.md
 create mode 100644 docs/CreateSubmissionDataRequestResponse.md
 create mode 100644 docs/CreateSubmissionDataRequestTokenResponse.md
 create mode 100644 docs/CreateSubmissionResponse.md
 create mode 100644 docs/CustomFile.md
 create mode 100644 docs/ErrorResponse.md
 create mode 100644 docs/Folder.md
 create mode 100644 docs/JsonSchema.md
 create mode 100644 docs/ListSubmissionsResponse.md
 create mode 100644 docs/MoveFolderData.md
 create mode 100644 docs/MoveTemplateData.md
 create mode 100644 docs/MultipleErrorsResponse.md
 create mode 100644 docs/PdfApi.md
 create mode 100644 docs/RenameFolderData.md
 create mode 100644 docs/Submission.md
 create mode 100644 docs/SubmissionAction.md
 create mode 100644 docs/SubmissionBatch.md
 create mode 100644 docs/SubmissionBatchData.md
 create mode 100644 docs/SubmissionBatchWithSubmissions.md
 create mode 100644 docs/SubmissionDataRequest.md
 create mode 100644 docs/SubmissionDataRequestEvent.md
 create mode 100644 docs/SubmissionDataRequestShow.md
 create mode 100644 docs/SubmissionDataRequestToken.md
 create mode 100644 docs/SubmissionPreview.md
 create mode 100644 docs/SuccessErrorResponse.md
 create mode 100644 docs/SuccessMultipleErrorsResponse.md
 create mode 100644 docs/Template.md
 create mode 100644 docs/TemplateAddFieldsResponse.md
 create mode 100644 docs/TemplatePreview.md
 create mode 100644 docs/UpdateHtmlTemplate.md
 create mode 100644 docs/UpdateSubmissionDataRequestData.md
 create mode 100644 docs/UploadPresignResponse.md
 create mode 100644 git_push.sh
 create mode 100644 gradle.properties
 create mode 100644 gradle/wrapper/gradle-wrapper.jar
 create mode 100644 gradle/wrapper/gradle-wrapper.properties
 create mode 100755 gradlew
 create mode 100644 gradlew.bat
 create mode 100644 pom.xml
 create mode 100644 settings.gradle
 create mode 100644 src/main/AndroidManifest.xml
 create mode 100644 src/main/java/com/docspring/AbstractOpenApiSchema.java
 create mode 100644 src/main/java/com/docspring/AddFieldsData.java
 create mode 100644 src/main/java/com/docspring/ApiClient.java
 create mode 100644 src/main/java/com/docspring/ApiException.java
 create mode 100644 src/main/java/com/docspring/ApiResponse.java
 create mode 100644 src/main/java/com/docspring/BatchGeneratePdfs201Response.java
 create mode 100644 src/main/java/com/docspring/CombinePdfsData.java
 create mode 100644 src/main/java/com/docspring/CombinedSubmission.java
 create mode 100644 src/main/java/com/docspring/CombinedSubmissionAction.java
 create mode 100644 src/main/java/com/docspring/CombinedSubmissionData.java
 create mode 100644 src/main/java/com/docspring/Configuration.java
 create mode 100644 src/main/java/com/docspring/CopyTemplateOptions.java
 create mode 100644 src/main/java/com/docspring/CreateCombinedSubmissionResponse.java
 create mode 100644 src/main/java/com/docspring/CreateCustomFileData.java
 create mode 100644 src/main/java/com/docspring/CreateCustomFileResponse.java
 create mode 100644 src/main/java/com/docspring/CreateFolderData.java
 create mode 100644 src/main/java/com/docspring/CreateHtmlSubmissionData.java
 create mode 100644 src/main/java/com/docspring/CreateHtmlTemplate.java
 create mode 100644 src/main/java/com/docspring/CreatePdfSubmissionData.java
 create mode 100644 src/main/java/com/docspring/CreatePdfTemplate.java
 create mode 100644 src/main/java/com/docspring/CreateSubmissionDataRequestData.java
 create mode 100644 src/main/java/com/docspring/CreateSubmissionDataRequestEventRequest.java
 create mode 100644 src/main/java/com/docspring/CreateSubmissionDataRequestEventResponse.java
 create mode 100644 src/main/java/com/docspring/CreateSubmissionDataRequestResponse.java
 create mode 100644 src/main/java/com/docspring/CreateSubmissionDataRequestTokenResponse.java
 create mode 100644 src/main/java/com/docspring/CreateSubmissionResponse.java
 create mode 100644 src/main/java/com/docspring/CustomFile.java
 create mode 100644 src/main/java/com/docspring/ErrorResponse.java
 create mode 100644 src/main/java/com/docspring/Folder.java
 create mode 100644 src/main/java/com/docspring/JSON.java
 create mode 100644 src/main/java/com/docspring/JavaTimeFormatter.java
 create mode 100644 src/main/java/com/docspring/JsonSchema.java
 create mode 100644 src/main/java/com/docspring/ListSubmissionsResponse.java
 create mode 100644 src/main/java/com/docspring/MoveFolderData.java
 create mode 100644 src/main/java/com/docspring/MoveTemplateData.java
 create mode 100644 src/main/java/com/docspring/MultipleErrorsResponse.java
 create mode 100644 src/main/java/com/docspring/Pair.java
 create mode 100644 src/main/java/com/docspring/PdfApi.java
 create mode 100644 src/main/java/com/docspring/RFC3339DateFormat.java
 create mode 100644 src/main/java/com/docspring/RenameFolderData.java
 create mode 100644 src/main/java/com/docspring/ServerConfiguration.java
 create mode 100644 src/main/java/com/docspring/ServerVariable.java
 create mode 100644 src/main/java/com/docspring/StringUtil.java
 create mode 100644 src/main/java/com/docspring/Submission.java
 create mode 100644 src/main/java/com/docspring/SubmissionAction.java
 create mode 100644 src/main/java/com/docspring/SubmissionBatch.java
 create mode 100644 src/main/java/com/docspring/SubmissionBatchData.java
 create mode 100644 src/main/java/com/docspring/SubmissionBatchWithSubmissions.java
 create mode 100644 src/main/java/com/docspring/SubmissionDataRequest.java
 create mode 100644 src/main/java/com/docspring/SubmissionDataRequestEvent.java
 create mode 100644 src/main/java/com/docspring/SubmissionDataRequestShow.java
 create mode 100644 src/main/java/com/docspring/SubmissionDataRequestToken.java
 create mode 100644 src/main/java/com/docspring/SubmissionPreview.java
 create mode 100644 src/main/java/com/docspring/SuccessErrorResponse.java
 create mode 100644 src/main/java/com/docspring/SuccessMultipleErrorsResponse.java
 create mode 100644 src/main/java/com/docspring/Template.java
 create mode 100644 src/main/java/com/docspring/TemplateAddFieldsResponse.java
 create mode 100644 src/main/java/com/docspring/TemplatePreview.java
 create mode 100644 src/main/java/com/docspring/UpdateHtmlTemplate.java
 create mode 100644 src/main/java/com/docspring/UpdateSubmissionDataRequestData.java
 create mode 100644 src/main/java/com/docspring/UploadPresignResponse.java
 create mode 100644 src/main/java/com/docspring/auth/ApiKeyAuth.java
 create mode 100644 src/main/java/com/docspring/auth/Authentication.java
 create mode 100644 src/main/java/com/docspring/auth/HttpBasicAuth.java
 create mode 100644 src/main/java/com/docspring/auth/HttpBearerAuth.java
 create mode 100644 src/test/java/com/docspring/AddFieldsDataTest.java
 create mode 100644 src/test/java/com/docspring/BatchGeneratePdfs201ResponseTest.java
 create mode 100644 src/test/java/com/docspring/CombinePdfsDataTest.java
 create mode 100644 src/test/java/com/docspring/CombinedSubmissionActionTest.java
 create mode 100644 src/test/java/com/docspring/CombinedSubmissionDataTest.java
 create mode 100644 src/test/java/com/docspring/CombinedSubmissionTest.java
 create mode 100644 src/test/java/com/docspring/CopyTemplateOptionsTest.java
 create mode 100644 src/test/java/com/docspring/CreateCombinedSubmissionResponseTest.java
 create mode 100644 src/test/java/com/docspring/CreateCustomFileDataTest.java
 create mode 100644 src/test/java/com/docspring/CreateCustomFileResponseTest.java
 create mode 100644 src/test/java/com/docspring/CreateFolderDataTest.java
 create mode 100644 src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java
 create mode 100644 src/test/java/com/docspring/CreateHtmlTemplateTest.java
 create mode 100644 src/test/java/com/docspring/CreatePdfSubmissionDataTest.java
 create mode 100644 src/test/java/com/docspring/CreatePdfTemplateTest.java
 create mode 100644 src/test/java/com/docspring/CreateSubmissionDataRequestDataTest.java
 create mode 100644 src/test/java/com/docspring/CreateSubmissionDataRequestEventRequestTest.java
 create mode 100644 src/test/java/com/docspring/CreateSubmissionDataRequestEventResponseTest.java
 create mode 100644 src/test/java/com/docspring/CreateSubmissionDataRequestResponseTest.java
 create mode 100644 src/test/java/com/docspring/CreateSubmissionDataRequestTokenResponseTest.java
 create mode 100644 src/test/java/com/docspring/CreateSubmissionResponseTest.java
 create mode 100644 src/test/java/com/docspring/CustomFileTest.java
 create mode 100644 src/test/java/com/docspring/ErrorResponseTest.java
 create mode 100644 src/test/java/com/docspring/FolderTest.java
 create mode 100644 src/test/java/com/docspring/JsonSchemaTest.java
 create mode 100644 src/test/java/com/docspring/ListSubmissionsResponseTest.java
 create mode 100644 src/test/java/com/docspring/MoveFolderDataTest.java
 create mode 100644 src/test/java/com/docspring/MoveTemplateDataTest.java
 create mode 100644 src/test/java/com/docspring/MultipleErrorsResponseTest.java
 create mode 100644 src/test/java/com/docspring/PdfApiTest.java.original
 create mode 100644 src/test/java/com/docspring/RenameFolderDataTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionActionTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionBatchDataTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionBatchTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionBatchWithSubmissionsTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionDataRequestEventTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionDataRequestShowTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionDataRequestTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionDataRequestTokenTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionPreviewTest.java
 create mode 100644 src/test/java/com/docspring/SubmissionTest.java
 create mode 100644 src/test/java/com/docspring/SuccessErrorResponseTest.java
 create mode 100644 src/test/java/com/docspring/SuccessMultipleErrorsResponseTest.java
 create mode 100644 src/test/java/com/docspring/TemplateAddFieldsResponseTest.java
 create mode 100644 src/test/java/com/docspring/TemplatePreviewTest.java
 create mode 100644 src/test/java/com/docspring/TemplateTest.java
 create mode 100644 src/test/java/com/docspring/UpdateHtmlTemplateTest.java
 create mode 100644 src/test/java/com/docspring/UpdateSubmissionDataRequestDataTest.java
 create mode 100644 src/test/java/com/docspring/UploadPresignResponseTest.java

diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
new file mode 100644
index 0000000..2986430
--- /dev/null
+++ b/.github/workflows/maven.yml
@@ -0,0 +1,30 @@
+# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
+# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
+#
+# This file is auto-generated by OpenAPI Generator (https://openapi-generator.tech)
+
+name: Java CI with Maven
+
+on:
+  push:
+    branches: [ main, master ]
+  pull_request:
+    branches: [ main, master ]
+
+jobs:
+  build:
+    name: Build DocSpring API
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        java: [ 17, 21 ]
+    steps:
+    - uses: actions/checkout@v4
+    - name: Set up JDK
+      uses: actions/setup-java@v4
+      with:
+        java-version: ${{ matrix.java }}
+        distribution: 'temurin'
+        cache: maven
+    - name: Build with Maven
+      run: mvn -B package --no-transfer-progress --file pom.xml
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a530464
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+*.class
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.ear
+
+# exclude jar for gradle wrapper
+!gradle/wrapper/*.jar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+# build files
+**/target
+target
+.gradle
+build
diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore
new file mode 100644
index 0000000..7484ee5
--- /dev/null
+++ b/.openapi-generator-ignore
@@ -0,0 +1,23 @@
+# OpenAPI Generator Ignore
+# Generated by openapi-generator https://github.com/openapitools/openapi-generator
+
+# Use this file to prevent files from being overwritten by the generator.
+# The patterns follow closely to .gitignore or .dockerignore.
+
+# As an example, the C# client generator defines ApiClient.cs.
+# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
+#ApiClient.cs
+
+# You can match any string of characters against a directory, file or extension with a single asterisk (*):
+#foo/*/qux
+# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
+
+# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
+#foo/**/qux
+# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
+
+# You can also negate patterns with an exclamation (!).
+# For example, you can ignore all files in a docs folder with the file extension .md:
+#docs/*.md
+# Then explicitly reverse the ignore rule for a single file:
+#!docs/README.md
diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES
new file mode 100644
index 0000000..9ded442
--- /dev/null
+++ b/.openapi-generator/FILES
@@ -0,0 +1,179 @@
+.github/workflows/maven.yml
+.gitignore
+.travis.yml
+README.md
+api/openapi.yaml
+build.gradle
+build.sbt
+docs/AddFieldsData.md
+docs/BatchGeneratePdfs201Response.md
+docs/CombinePdfsData.md
+docs/CombinedSubmission.md
+docs/CombinedSubmissionAction.md
+docs/CombinedSubmissionData.md
+docs/CopyTemplateOptions.md
+docs/CreateCombinedSubmissionResponse.md
+docs/CreateCustomFileData.md
+docs/CreateCustomFileResponse.md
+docs/CreateFolderData.md
+docs/CreateHtmlSubmissionData.md
+docs/CreateHtmlTemplate.md
+docs/CreatePdfSubmissionData.md
+docs/CreatePdfTemplate.md
+docs/CreateSubmissionDataRequestData.md
+docs/CreateSubmissionDataRequestEventRequest.md
+docs/CreateSubmissionDataRequestEventResponse.md
+docs/CreateSubmissionDataRequestResponse.md
+docs/CreateSubmissionDataRequestTokenResponse.md
+docs/CreateSubmissionResponse.md
+docs/CustomFile.md
+docs/ErrorResponse.md
+docs/Folder.md
+docs/JsonSchema.md
+docs/ListSubmissionsResponse.md
+docs/MoveFolderData.md
+docs/MoveTemplateData.md
+docs/MultipleErrorsResponse.md
+docs/PdfApi.md
+docs/RenameFolderData.md
+docs/Submission.md
+docs/SubmissionAction.md
+docs/SubmissionBatch.md
+docs/SubmissionBatchData.md
+docs/SubmissionBatchWithSubmissions.md
+docs/SubmissionDataRequest.md
+docs/SubmissionDataRequestEvent.md
+docs/SubmissionDataRequestShow.md
+docs/SubmissionDataRequestToken.md
+docs/SubmissionPreview.md
+docs/SuccessErrorResponse.md
+docs/SuccessMultipleErrorsResponse.md
+docs/Template.md
+docs/TemplateAddFieldsResponse.md
+docs/TemplatePreview.md
+docs/UpdateHtmlTemplate.md
+docs/UpdateSubmissionDataRequestData.md
+docs/UploadPresignResponse.md
+git_push.sh
+gradle.properties
+gradle/wrapper/gradle-wrapper.jar
+gradle/wrapper/gradle-wrapper.properties
+gradlew
+gradlew.bat
+pom.xml
+settings.gradle
+src/main/AndroidManifest.xml
+src/main/java/com/docspring/AbstractOpenApiSchema.java
+src/main/java/com/docspring/AddFieldsData.java
+src/main/java/com/docspring/ApiClient.java
+src/main/java/com/docspring/ApiException.java
+src/main/java/com/docspring/ApiResponse.java
+src/main/java/com/docspring/BatchGeneratePdfs201Response.java
+src/main/java/com/docspring/CombinePdfsData.java
+src/main/java/com/docspring/CombinedSubmission.java
+src/main/java/com/docspring/CombinedSubmissionAction.java
+src/main/java/com/docspring/CombinedSubmissionData.java
+src/main/java/com/docspring/Configuration.java
+src/main/java/com/docspring/CopyTemplateOptions.java
+src/main/java/com/docspring/CreateCombinedSubmissionResponse.java
+src/main/java/com/docspring/CreateCustomFileData.java
+src/main/java/com/docspring/CreateCustomFileResponse.java
+src/main/java/com/docspring/CreateFolderData.java
+src/main/java/com/docspring/CreateHtmlSubmissionData.java
+src/main/java/com/docspring/CreateHtmlTemplate.java
+src/main/java/com/docspring/CreatePdfSubmissionData.java
+src/main/java/com/docspring/CreatePdfTemplate.java
+src/main/java/com/docspring/CreateSubmissionDataRequestData.java
+src/main/java/com/docspring/CreateSubmissionDataRequestEventRequest.java
+src/main/java/com/docspring/CreateSubmissionDataRequestEventResponse.java
+src/main/java/com/docspring/CreateSubmissionDataRequestResponse.java
+src/main/java/com/docspring/CreateSubmissionDataRequestTokenResponse.java
+src/main/java/com/docspring/CreateSubmissionResponse.java
+src/main/java/com/docspring/CustomFile.java
+src/main/java/com/docspring/ErrorResponse.java
+src/main/java/com/docspring/Folder.java
+src/main/java/com/docspring/JSON.java
+src/main/java/com/docspring/JavaTimeFormatter.java
+src/main/java/com/docspring/JsonSchema.java
+src/main/java/com/docspring/ListSubmissionsResponse.java
+src/main/java/com/docspring/MoveFolderData.java
+src/main/java/com/docspring/MoveTemplateData.java
+src/main/java/com/docspring/MultipleErrorsResponse.java
+src/main/java/com/docspring/Pair.java
+src/main/java/com/docspring/PdfApi.java
+src/main/java/com/docspring/RFC3339DateFormat.java
+src/main/java/com/docspring/RenameFolderData.java
+src/main/java/com/docspring/ServerConfiguration.java
+src/main/java/com/docspring/ServerVariable.java
+src/main/java/com/docspring/StringUtil.java
+src/main/java/com/docspring/Submission.java
+src/main/java/com/docspring/SubmissionAction.java
+src/main/java/com/docspring/SubmissionBatch.java
+src/main/java/com/docspring/SubmissionBatchData.java
+src/main/java/com/docspring/SubmissionBatchWithSubmissions.java
+src/main/java/com/docspring/SubmissionDataRequest.java
+src/main/java/com/docspring/SubmissionDataRequestEvent.java
+src/main/java/com/docspring/SubmissionDataRequestShow.java
+src/main/java/com/docspring/SubmissionDataRequestToken.java
+src/main/java/com/docspring/SubmissionPreview.java
+src/main/java/com/docspring/SuccessErrorResponse.java
+src/main/java/com/docspring/SuccessMultipleErrorsResponse.java
+src/main/java/com/docspring/Template.java
+src/main/java/com/docspring/TemplateAddFieldsResponse.java
+src/main/java/com/docspring/TemplatePreview.java
+src/main/java/com/docspring/UpdateHtmlTemplate.java
+src/main/java/com/docspring/UpdateSubmissionDataRequestData.java
+src/main/java/com/docspring/UploadPresignResponse.java
+src/main/java/com/docspring/auth/ApiKeyAuth.java
+src/main/java/com/docspring/auth/Authentication.java
+src/main/java/com/docspring/auth/HttpBasicAuth.java
+src/main/java/com/docspring/auth/HttpBearerAuth.java
+src/test/java/com/docspring/AddFieldsDataTest.java
+src/test/java/com/docspring/BatchGeneratePdfs201ResponseTest.java
+src/test/java/com/docspring/CombinePdfsDataTest.java
+src/test/java/com/docspring/CombinedSubmissionActionTest.java
+src/test/java/com/docspring/CombinedSubmissionDataTest.java
+src/test/java/com/docspring/CombinedSubmissionTest.java
+src/test/java/com/docspring/CopyTemplateOptionsTest.java
+src/test/java/com/docspring/CreateCombinedSubmissionResponseTest.java
+src/test/java/com/docspring/CreateCustomFileDataTest.java
+src/test/java/com/docspring/CreateCustomFileResponseTest.java
+src/test/java/com/docspring/CreateFolderDataTest.java
+src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java
+src/test/java/com/docspring/CreateHtmlTemplateTest.java
+src/test/java/com/docspring/CreatePdfSubmissionDataTest.java
+src/test/java/com/docspring/CreatePdfTemplateTest.java
+src/test/java/com/docspring/CreateSubmissionDataRequestDataTest.java
+src/test/java/com/docspring/CreateSubmissionDataRequestEventRequestTest.java
+src/test/java/com/docspring/CreateSubmissionDataRequestEventResponseTest.java
+src/test/java/com/docspring/CreateSubmissionDataRequestResponseTest.java
+src/test/java/com/docspring/CreateSubmissionDataRequestTokenResponseTest.java
+src/test/java/com/docspring/CreateSubmissionResponseTest.java
+src/test/java/com/docspring/CustomFileTest.java
+src/test/java/com/docspring/ErrorResponseTest.java
+src/test/java/com/docspring/FolderTest.java
+src/test/java/com/docspring/JsonSchemaTest.java
+src/test/java/com/docspring/ListSubmissionsResponseTest.java
+src/test/java/com/docspring/MoveFolderDataTest.java
+src/test/java/com/docspring/MoveTemplateDataTest.java
+src/test/java/com/docspring/MultipleErrorsResponseTest.java
+src/test/java/com/docspring/PdfApiTest.java
+src/test/java/com/docspring/RenameFolderDataTest.java
+src/test/java/com/docspring/SubmissionActionTest.java
+src/test/java/com/docspring/SubmissionBatchDataTest.java
+src/test/java/com/docspring/SubmissionBatchTest.java
+src/test/java/com/docspring/SubmissionBatchWithSubmissionsTest.java
+src/test/java/com/docspring/SubmissionDataRequestEventTest.java
+src/test/java/com/docspring/SubmissionDataRequestShowTest.java
+src/test/java/com/docspring/SubmissionDataRequestTest.java
+src/test/java/com/docspring/SubmissionDataRequestTokenTest.java
+src/test/java/com/docspring/SubmissionPreviewTest.java
+src/test/java/com/docspring/SubmissionTest.java
+src/test/java/com/docspring/SuccessErrorResponseTest.java
+src/test/java/com/docspring/SuccessMultipleErrorsResponseTest.java
+src/test/java/com/docspring/TemplateAddFieldsResponseTest.java
+src/test/java/com/docspring/TemplatePreviewTest.java
+src/test/java/com/docspring/TemplateTest.java
+src/test/java/com/docspring/UpdateHtmlTemplateTest.java
+src/test/java/com/docspring/UpdateSubmissionDataRequestDataTest.java
+src/test/java/com/docspring/UploadPresignResponseTest.java
diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION
new file mode 100644
index 0000000..b23eb27
--- /dev/null
+++ b/.openapi-generator/VERSION
@@ -0,0 +1 @@
+7.11.0
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..1b6741c
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,22 @@
+#
+# Generated by OpenAPI Generator: https://openapi-generator.tech
+#
+# Ref: https://docs.travis-ci.com/user/languages/java/
+#
+language: java
+jdk:
+  - openjdk12
+  - openjdk11
+  - openjdk10
+  - openjdk9
+  - openjdk8
+before_install:
+  # ensure gradlew has proper permission
+  - chmod a+x ./gradlew
+script:
+  # test using maven
+  #- mvn test
+  # test using gradle
+  - gradle test
+  # test using sbt
+  # - sbt test
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..96cb6df
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,35 @@
+### 2.0.0 [February 23, 2025]
+
+- **BREAKING CHANGE**: Updated default host to our new synchronous API subdomain: sync.api.docspring.com. (EU customers should use sync.api-eu.docspring.com). Removed all custom polling code from library since this logic is now handled by the API service running on our sync subdomain
+- Fixed User-Agent header: docspring-java-x.x.x
+
+### 1.3.2 [November 28, 2021]
+
+- Added 'password' parameter to Generate PDF and Combine PDF API endpoints. You can now encrypt each generated PDF with a unique password.
+
+### 1.3.1 [November 19, 2020]
+
+- Added "sort_order" property for Submission Data Requests
+
+### 1.3.0 [September 26, 2020]
+
+- Updated OpenAPI Generator to v3.3.0.
+- Fixed MultipartBody.Part annotation issue for `createPDFTemplate`. Added [Java code example to docs](https://docspring.com/docs/api/create_template.html).
+
+### 1.2.1 [September 24, 2020]
+
+- Fixed the "include_data=true" option for the "Get Submission" API endpoint. Added the "data" property to the Submission model so that this is parsed and returned correctly when requested
+
+### 1.2.0 [September 21, 2020]
+
+- Renamed some internal models for template creation API endpoints. (CreateTemplateData / CreateTemplateData1 renamed to CreateHtmlTemplateData and CreateTemplateFromUploadData)
+
+### 1.1.0 [September 12, 2020]
+
+- **BREAKING CHANGE**: Renamed createTemplate operation to createPDFTemplate
+- Added createHTMLTemplate operation. (This uses the same API endpoint as createPDFTemplate, but the example shows how to set html, scss, etc. fields)
+- Added updateTemplate operation, to update a PDF or HTML template
+
+### 1.0.0 [May 20, 2019]
+
+- Renamed FormAPI to DocSpring. (View the CHANGELOG in the original FormAPI API client for prior releases.)
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..ab02445
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,7 @@
+Copyright © 2018-2020 DocSpring, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..99d8f5f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,260 @@
+# DocSpring
+
+DocSpring API
+
+- API version: v1
+
+- Generator version: 7.11.0
+
+DocSpring provides an API that helps you fill out and sign PDF templates.
+
+
+*Automatically generated by the [OpenAPI Generator](https://openapi-generator.tech)*
+
+## Requirements
+
+Building the API client library requires:
+
+1. Java 1.8+
+2. Maven (3.8.3+)/Gradle (7.2+)
+
+## Installation
+
+To install the API client library to your local Maven repository, simply execute:
+
+```shell
+mvn clean install
+```
+
+To deploy it to a remote Maven repository instead, configure the settings of the repository and execute:
+
+```shell
+mvn clean deploy
+```
+
+Refer to the [OSSRH Guide](http://central.sonatype.org/pages/ossrh-guide.html) for more information.
+
+### Maven users
+
+Add this dependency to your project's POM:
+
+```xml
+<dependency>
+  <groupId>com.docspring</groupId>
+  <artifactId>DocSpring</artifactId>
+  <version>2.0.0</version>
+  <scope>compile</scope>
+</dependency>
+```
+
+### Gradle users
+
+Add this dependency to your project's build file:
+
+```groovy
+  repositories {
+    mavenCentral()     // Needed if the 'DocSpring' jar has been published to maven central.
+    mavenLocal()       // Needed if the 'DocSpring' jar has been published to the local maven repo.
+  }
+
+  dependencies {
+     implementation "com.docspring:DocSpring:2.0.0"
+  }
+```
+
+### Others
+
+At first generate the JAR by executing:
+
+```shell
+mvn clean package
+```
+
+Then manually install the following JARs:
+
+- `target/DocSpring-2.0.0.jar`
+- `target/lib/*.jar`
+
+## Usage
+
+To add a HTTP proxy for the API client, use `ClientConfig`:
+```java
+
+import org.glassfish.jersey.apache.connector.ApacheConnectorProvider;
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.client.ClientProperties;
+import com.docspring.*;
+import com.docspring.PdfApi;
+
+...
+
+ApiClient defaultClient = Configuration.getDefaultApiClient();
+ClientConfig clientConfig = defaultClient.getClientConfig();
+clientConfig.connectorProvider(new ApacheConnectorProvider());
+clientConfig.property(ClientProperties.PROXY_URI, "http://proxy_url_here");
+clientConfig.property(ClientProperties.PROXY_USERNAME, "proxy_username");
+clientConfig.property(ClientProperties.PROXY_PASSWORD, "proxy_password");
+defaultClient.setClientConfig(clientConfig);
+
+PdfApi apiInstance = new PdfApi(defaultClient);
+
+```
+
+## Getting Started
+
+Please follow the [installation](#installation) instruction and execute the following Java code:
+
+```java
+
+import com.docspring.*;
+import com.docspring.auth.*;
+import com.docspring.*;
+import com.docspring.PdfApi;
+
+public class PdfApiExample {
+
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef02"; // String | 
+        AddFieldsData data = new AddFieldsData(); // AddFieldsData | 
+        try {
+            TemplateAddFieldsResponse result = apiInstance.addFieldsToTemplate(templateId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#addFieldsToTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+
+```
+
+## Documentation for API Endpoints
+
+All URIs are relative to *https://sync.api.docspring.com/api/v1*
+
+Class | Method | HTTP request | Description
+------------ | ------------- | ------------- | -------------
+*PdfApi* | [**addFieldsToTemplate**](docs/PdfApi.md#addFieldsToTemplate) | **PUT** /templates/{template_id}/add_fields | Add new fields to a Template
+*PdfApi* | [**batchGeneratePdfs**](docs/PdfApi.md#batchGeneratePdfs) | **POST** /submissions/batches | Generates multiple PDFs
+*PdfApi* | [**combinePdfs**](docs/PdfApi.md#combinePdfs) | **POST** /combined_submissions?v&#x3D;2 | Merge submission PDFs, template PDFs, or custom files
+*PdfApi* | [**combineSubmissions**](docs/PdfApi.md#combineSubmissions) | **POST** /combined_submissions | Merge generated PDFs together
+*PdfApi* | [**copyTemplate**](docs/PdfApi.md#copyTemplate) | **POST** /templates/{template_id}/copy | Copy a Template
+*PdfApi* | [**createCustomFileFromUpload**](docs/PdfApi.md#createCustomFileFromUpload) | **POST** /custom_files | Create a new custom file from a cached presign upload
+*PdfApi* | [**createDataRequestEvent**](docs/PdfApi.md#createDataRequestEvent) | **POST** /data_requests/{data_request_id}/events | Creates a new event for emailing a signee a request for signature
+*PdfApi* | [**createDataRequestToken**](docs/PdfApi.md#createDataRequestToken) | **POST** /data_requests/{data_request_id}/tokens | Creates a new data request token for form authentication
+*PdfApi* | [**createFolder**](docs/PdfApi.md#createFolder) | **POST** /folders/ | Create a folder
+*PdfApi* | [**createHTMLTemplate**](docs/PdfApi.md#createHTMLTemplate) | **POST** /templates?endpoint_description&#x3D;html | Create a new HTML template
+*PdfApi* | [**createPDFTemplate**](docs/PdfApi.md#createPDFTemplate) | **POST** /templates | Create a new PDF template with a form POST file upload
+*PdfApi* | [**createPDFTemplateFromUpload**](docs/PdfApi.md#createPDFTemplateFromUpload) | **POST** /templates?endpoint_description&#x3D;cached_upload | Create a new PDF template from a cached presign upload
+*PdfApi* | [**deleteFolder**](docs/PdfApi.md#deleteFolder) | **DELETE** /folders/{folder_id} | Delete a folder
+*PdfApi* | [**deleteTemplate**](docs/PdfApi.md#deleteTemplate) | **DELETE** /templates/{template_id} | Delete a template
+*PdfApi* | [**expireCombinedSubmission**](docs/PdfApi.md#expireCombinedSubmission) | **DELETE** /combined_submissions/{combined_submission_id} | Expire a combined submission
+*PdfApi* | [**expireSubmission**](docs/PdfApi.md#expireSubmission) | **DELETE** /submissions/{submission_id} | Expire a PDF submission
+*PdfApi* | [**generatePdf**](docs/PdfApi.md#generatePdf) | **POST** /templates/{template_id}/submissions | Generates a new PDF
+*PdfApi* | [**generatePdfForHtmlTemplate**](docs/PdfApi.md#generatePdfForHtmlTemplate) | **POST** /templates/{template_id}/submissions?endpoint_description&#x3D;html_templates | Generates a new PDF for an HTML template
+*PdfApi* | [**generatePreview**](docs/PdfApi.md#generatePreview) | **POST** /submissions/{submission_id}/generate_preview | Generated a preview PDF for partially completed data requests
+*PdfApi* | [**getCombinedSubmission**](docs/PdfApi.md#getCombinedSubmission) | **GET** /combined_submissions/{combined_submission_id} | Check the status of a combined submission (merged PDFs)
+*PdfApi* | [**getDataRequest**](docs/PdfApi.md#getDataRequest) | **GET** /data_requests/{data_request_id} | Look up a submission data request
+*PdfApi* | [**getFullTemplate**](docs/PdfApi.md#getFullTemplate) | **GET** /templates/{template_id}?full&#x3D;true | Fetch the full template attributes
+*PdfApi* | [**getPresignUrl**](docs/PdfApi.md#getPresignUrl) | **GET** /uploads/presign | Get a presigned URL so that you can upload a file to our AWS S3 bucket
+*PdfApi* | [**getSubmission**](docs/PdfApi.md#getSubmission) | **GET** /submissions/{submission_id} | Check the status of a PDF
+*PdfApi* | [**getSubmissionBatch**](docs/PdfApi.md#getSubmissionBatch) | **GET** /submissions/batches/{submission_batch_id} | Check the status of a submission batch job
+*PdfApi* | [**getTemplate**](docs/PdfApi.md#getTemplate) | **GET** /templates/{template_id} | Check the status of an uploaded template
+*PdfApi* | [**getTemplateSchema**](docs/PdfApi.md#getTemplateSchema) | **GET** /templates/{template_id}/schema | Fetch the JSON schema for a template
+*PdfApi* | [**listCombinedSubmissions**](docs/PdfApi.md#listCombinedSubmissions) | **GET** /combined_submissions | Get a list of all combined submissions
+*PdfApi* | [**listFolders**](docs/PdfApi.md#listFolders) | **GET** /folders/ | Get a list of all folders
+*PdfApi* | [**listSubmissions**](docs/PdfApi.md#listSubmissions) | **GET** /submissions | List all submissions
+*PdfApi* | [**listTemplateSubmissions**](docs/PdfApi.md#listTemplateSubmissions) | **GET** /templates/{template_id}/submissions | List all submissions for a given template
+*PdfApi* | [**listTemplates**](docs/PdfApi.md#listTemplates) | **GET** /templates | Get a list of all templates
+*PdfApi* | [**moveFolderToFolder**](docs/PdfApi.md#moveFolderToFolder) | **POST** /folders/{folder_id}/move | Move a folder
+*PdfApi* | [**moveTemplateToFolder**](docs/PdfApi.md#moveTemplateToFolder) | **POST** /templates/{template_id}/move | Move Template to folder
+*PdfApi* | [**renameFolder**](docs/PdfApi.md#renameFolder) | **POST** /folders/{folder_id}/rename | Rename a folder
+*PdfApi* | [**testAuthentication**](docs/PdfApi.md#testAuthentication) | **GET** /authentication | Test Authentication
+*PdfApi* | [**updateDataRequest**](docs/PdfApi.md#updateDataRequest) | **PUT** /data_requests/{data_request_id} | Update a submission data request
+*PdfApi* | [**updateTemplate**](docs/PdfApi.md#updateTemplate) | **PUT** /templates/{template_id} | Update a Template
+
+
+## Documentation for Models
+
+ - [AddFieldsData](docs/AddFieldsData.md)
+ - [BatchGeneratePdfs201Response](docs/BatchGeneratePdfs201Response.md)
+ - [CombinePdfsData](docs/CombinePdfsData.md)
+ - [CombinedSubmission](docs/CombinedSubmission.md)
+ - [CombinedSubmissionAction](docs/CombinedSubmissionAction.md)
+ - [CombinedSubmissionData](docs/CombinedSubmissionData.md)
+ - [CopyTemplateOptions](docs/CopyTemplateOptions.md)
+ - [CreateCombinedSubmissionResponse](docs/CreateCombinedSubmissionResponse.md)
+ - [CreateCustomFileData](docs/CreateCustomFileData.md)
+ - [CreateCustomFileResponse](docs/CreateCustomFileResponse.md)
+ - [CreateFolderData](docs/CreateFolderData.md)
+ - [CreateHtmlSubmissionData](docs/CreateHtmlSubmissionData.md)
+ - [CreateHtmlTemplate](docs/CreateHtmlTemplate.md)
+ - [CreatePdfSubmissionData](docs/CreatePdfSubmissionData.md)
+ - [CreatePdfTemplate](docs/CreatePdfTemplate.md)
+ - [CreateSubmissionDataRequestData](docs/CreateSubmissionDataRequestData.md)
+ - [CreateSubmissionDataRequestEventRequest](docs/CreateSubmissionDataRequestEventRequest.md)
+ - [CreateSubmissionDataRequestEventResponse](docs/CreateSubmissionDataRequestEventResponse.md)
+ - [CreateSubmissionDataRequestResponse](docs/CreateSubmissionDataRequestResponse.md)
+ - [CreateSubmissionDataRequestTokenResponse](docs/CreateSubmissionDataRequestTokenResponse.md)
+ - [CreateSubmissionResponse](docs/CreateSubmissionResponse.md)
+ - [CustomFile](docs/CustomFile.md)
+ - [ErrorResponse](docs/ErrorResponse.md)
+ - [Folder](docs/Folder.md)
+ - [JsonSchema](docs/JsonSchema.md)
+ - [ListSubmissionsResponse](docs/ListSubmissionsResponse.md)
+ - [MoveFolderData](docs/MoveFolderData.md)
+ - [MoveTemplateData](docs/MoveTemplateData.md)
+ - [MultipleErrorsResponse](docs/MultipleErrorsResponse.md)
+ - [RenameFolderData](docs/RenameFolderData.md)
+ - [Submission](docs/Submission.md)
+ - [SubmissionAction](docs/SubmissionAction.md)
+ - [SubmissionBatch](docs/SubmissionBatch.md)
+ - [SubmissionBatchData](docs/SubmissionBatchData.md)
+ - [SubmissionBatchWithSubmissions](docs/SubmissionBatchWithSubmissions.md)
+ - [SubmissionDataRequest](docs/SubmissionDataRequest.md)
+ - [SubmissionDataRequestEvent](docs/SubmissionDataRequestEvent.md)
+ - [SubmissionDataRequestShow](docs/SubmissionDataRequestShow.md)
+ - [SubmissionDataRequestToken](docs/SubmissionDataRequestToken.md)
+ - [SubmissionPreview](docs/SubmissionPreview.md)
+ - [SuccessErrorResponse](docs/SuccessErrorResponse.md)
+ - [SuccessMultipleErrorsResponse](docs/SuccessMultipleErrorsResponse.md)
+ - [Template](docs/Template.md)
+ - [TemplateAddFieldsResponse](docs/TemplateAddFieldsResponse.md)
+ - [TemplatePreview](docs/TemplatePreview.md)
+ - [UpdateHtmlTemplate](docs/UpdateHtmlTemplate.md)
+ - [UpdateSubmissionDataRequestData](docs/UpdateSubmissionDataRequestData.md)
+ - [UploadPresignResponse](docs/UploadPresignResponse.md)
+
+
+<a id="documentation-for-authorization"></a>
+## Documentation for Authorization
+
+
+Authentication schemes defined for the API:
+<a id="api_token_basic"></a>
+### api_token_basic
+
+
+- **Type**: HTTP basic authentication
+
+
+## Recommendation
+
+It's recommended to create an instance of `ApiClient` per thread in a multithreaded environment to avoid any potential issues.
+
+## Author
+
+
+
diff --git a/api/openapi.yaml b/api/openapi.yaml
new file mode 100644
index 0000000..3080dc0
--- /dev/null
+++ b/api/openapi.yaml
@@ -0,0 +1,6076 @@
+openapi: 3.0.1
+info:
+  description: DocSpring provides an API that helps you fill out and sign PDF templates.
+  title: DocSpring API
+  version: v1
+servers:
+- url: https://sync.api.docspring.com/api/v1
+paths:
+  /authentication:
+    get:
+      operationId: testAuthentication
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                status: success
+              schema:
+                $ref: '#/components/schemas/success_error_response'
+          description: authentication succeeded
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Could not find API token with ID: missing_api_token"
+              schema:
+                $ref: '#/components/schemas/success_error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Test Authentication
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /combined_submissions:
+    get:
+      operationId: listCombinedSubmissions
+      parameters:
+      - description: "Default: 1"
+        example: 2
+        in: query
+        name: page
+        schema:
+          minimum: 1
+          type: integer
+      - description: "Default: 50"
+        example: 1
+        in: query
+        name: per_page
+        schema:
+          maximum: 50
+          minimum: 1
+          type: integer
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+              - id: com_1234567890abcdef01
+                state: pending
+                expired: false
+                expires_in: null
+                expires_at: null
+                processed_at: null
+                error_message: null
+                submission_ids: []
+                source_pdfs: []
+                metadata: {}
+                password: null
+                pdf_hash: null
+                download_url: null
+                actions: []
+              - id: com_1234567890abcdef02
+                state: processed
+                expired: false
+                expires_in: null
+                expires_at: null
+                processed_at: 2023-01-05T14:00:00Z
+                error_message: null
+                submission_ids: []
+                source_pdfs: []
+                metadata: {}
+                password: null
+                pdf_hash: 225fb2676adc8f382aba3916d7b7a2088cb7f75ab62ec5c7f4543c5abf8ce4da
+                download_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/combined_submissions/com_1234567890abcdef02.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                actions: []
+              - id: com_1234567890abcdef03
+                state: error
+                expired: false
+                expires_in: 123
+                expires_at: null
+                processed_at: null
+                error_message: Something went wrong
+                submission_ids: []
+                source_pdfs: []
+                metadata: {}
+                password: null
+                pdf_hash: null
+                download_url: null
+                actions: []
+              - id: com_1234567890abcdef04
+                state: processed
+                expired: true
+                expires_in: 345
+                expires_at: 2023-01-05T14:05:00Z
+                processed_at: 2023-01-05T14:00:00Z
+                error_message: null
+                submission_ids: []
+                source_pdfs: []
+                metadata: {}
+                password: null
+                pdf_hash: 0622971147486e1900037eff229d921d14f5b51aac7171729b2b66f81cdf6585
+                download_url: null
+                actions: []
+              schema:
+                items:
+                  $ref: '#/components/schemas/combined_submission'
+                title: list_combined_submissions
+                type: array
+          description: enumerate all combined submissions
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Get a list of all combined submissions
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    post:
+      operationId: combineSubmissions
+      parameters:
+      - description: "Wait for combined submission to be processed before returning.\
+          \ Set to false to return immediately. Default: true (on sync.* subdomain)"
+        in: query
+        name: wait
+        schema:
+          default: true
+          type: boolean
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/combined_submission_data'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                status: success
+                combined_submission:
+                  id: com_1234567890abcdef01
+                  state: pending
+                  expired: false
+                  expires_in: 300
+                  expires_at: null
+                  processed_at: null
+                  error_message: null
+                  submission_ids:
+                  - sub_1234567890abcdef01
+                  - sub_1234567890abcdef02
+                  source_pdfs: []
+                  metadata:
+                    foo: 123
+                    bar: baz
+                  password: password123
+                  pdf_hash: null
+                  download_url: null
+                  actions: []
+              schema:
+                $ref: '#/components/schemas/create_combined_submission_response'
+          description: combined submission created
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                errors:
+                - "source_pdfs: Could not find Submission with ID: MISSING_ID"
+              schema:
+                $ref: '#/components/schemas/multiple_errors_response'
+          description: invalid request
+        "400":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "There was a problem with the JSON you submitted: unexpected\
+                  \ character at line 1, column 37 in '{ \"submission_ids\": [\"123\"\
+                  , \"345\"], metadata: { \"user_id\": \"@#)(*%$)@(#*%@&%\" }}"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: invalid JSON
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Merge generated PDFs together
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /combined_submissions?v=2:
+    post:
+      operationId: combinePdfs
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/combine_pdfs_data'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                status: success
+                combined_submission:
+                  id: com_1234567890abcdef02
+                  state: pending
+                  expired: false
+                  expires_in: 300
+                  expires_at: null
+                  processed_at: null
+                  error_message: null
+                  submission_ids:
+                  - sub_1234567890abcdef01
+                  - sub_1234567890abcdef02
+                  source_pdfs:
+                  - type: submission
+                    id: sub_1234567890abcdef01
+                  - type: template
+                    id: tpl_1234567890abcdef01
+                  - type: submission
+                    id: sub_1234567890abcdef02
+                  - type: custom_file
+                    id: cfi_1234567890abcdef01
+                  - type: combined_submission
+                    id: com_1234567890abcdef01
+                  - type: url
+                    url: http://example.com/test-pdf.pdf
+                  metadata:
+                    foo: 123
+                    bar: baz
+                  password: null
+                  pdf_hash: null
+                  download_url: null
+                  actions: []
+              schema:
+                $ref: '#/components/schemas/create_combined_submission_response'
+          description: combined submission created
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                errors:
+                - "source_pdfs: Could not find Submission with ID: MISSING_SUBMISSION_ID"
+                - "source_pdfs: Template document is not processed: tpl_1234567890abcdef01\
+                  \ (state: pending)"
+                - "source_pdfs: Could not find Template with ID: MISSING_TEMPLATE_ID"
+                - "source_pdfs: Could not find Custom File with ID: MISSING_CUSTOM_FILE_ID"
+                - "source_pdfs: Could not find Combined Submission with ID: MISSING_COMBINED_SUBMISSION_ID"
+              schema:
+                $ref: '#/components/schemas/multiple_errors_response'
+          description: invalid request
+        "400":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "There was a problem with the JSON you submitted: unexpected\
+                  \ character at line 1, column 34 in '{ \"source_pdfs\": [\"123\"\
+                  , \"345\"], metadata: { \"user_id\": \"@#*&%)(@*#%&(@#!\" }}"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: invalid JSON
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: "Merge submission PDFs, template PDFs, or custom files"
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /combined_submissions/{combined_submission_id}:
+    delete:
+      operationId: expireCombinedSubmission
+      parameters:
+      - example: com_1234567890abcdef01
+        in: path
+        name: combined_submission_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                id: com_1234567890abcdef01
+                state: processed
+                expired: true
+                expires_in: 300
+                expires_at: 2018-10-20T13:00:00Z
+                processed_at: 2020-05-14T02:00:00Z
+                error_message: null
+                submission_ids:
+                - sub_1234567890abcdef01
+                - sub_1234567890abcdef02
+                source_pdfs: []
+                metadata:
+                  qux: abc
+                  user_id: 42
+                password: password123
+                pdf_hash: 12342342471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                download_url: null
+                actions:
+                - id: csa_1234567890abcdef01
+                  integration_id: aci_1234567890abcdef01
+                  state: processed
+                  action_type: aws_s3_upload
+                  action_category: file_upload
+                  result_data:
+                    s3_key: acc_1234/2018/combined_submissions/20181005090010-com_1234.pdf
+                    s3_url: https://docspring-s3-example.s3.amazonaws.com/acc_1234/2018/combined_submissions/20181005090010-com_1234.pdf
+                    s3_bucket: docspring-s3-example
+                    s3_region: us-east-1
+              schema:
+                $ref: '#/components/schemas/combined_submission'
+          description: submission was expired
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Combined submission not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: combined submission not found
+        "403":
+          content:
+            application/json:
+              example:
+                status: error
+                error: You must use a live API token to expire a combined submission.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: test API token used
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Expire a combined submission
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    get:
+      operationId: getCombinedSubmission
+      parameters:
+      - example: com_1234567890abcdef01
+        in: path
+        name: combined_submission_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                id: com_1234567890abcdef01
+                state: processed
+                expired: false
+                expires_in: 300
+                expires_at: 2018-10-20T13:05:00Z
+                processed_at: 2020-05-14T02:00:00Z
+                error_message: null
+                submission_ids:
+                - sub_1234567890abcdef01
+                - sub_1234567890abcdef02
+                source_pdfs: []
+                metadata:
+                  qux: abc
+                  user_id: 42
+                password: password123
+                pdf_hash: 12342342471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                download_url: https://docspring-s3-example.s3.amazonaws.com/store/submissions/sub_1234567890abcdef01/20171002192229.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                actions:
+                - id: csa_1234567890abcdef01
+                  integration_id: aci_1234567890abcdef01
+                  state: processed
+                  action_type: aws_s3_upload
+                  action_category: file_upload
+                  result_data:
+                    s3_key: acc_1234/2018/combined_submissions/20181005090010-com_1234.pdf
+                    s3_url: https://docspring-s3-example.s3.amazonaws.com/acc_1234/2018/combined_submissions/20181005090010-com_1234.pdf
+                    s3_bucket: docspring-s3-example
+                    s3_region: us-east-1
+              schema:
+                $ref: '#/components/schemas/combined_submission'
+          description: processed combined submission found
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Combined submission not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: combined submission not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Check the status of a combined submission (merged PDFs)
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /custom_files:
+    post:
+      operationId: createCustomFileFromUpload
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/create_custom_file_data'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                status: success
+                custom_file:
+                  id: cfi_1234567890abcdef01
+                  url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/custom_files/cfi_1234567890abcdef01.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+              schema:
+                $ref: '#/components/schemas/create_custom_file_response'
+          description: returns the custom file
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Create a new custom file from a cached presign upload
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /uploads/presign:
+    get:
+      operationId: getPresignUrl
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                fields:
+                  key: ed9424dccf185f3835df4e9e1da0ca0b
+                  policy: eyJleHBpcmF0aW9uIjoiMjAxOS0xMC0wNVQxNDowMDowMFoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJ0ZXN0LWJ1Y2tldCJ9LHsia2V5IjoiZWQ5NDI0ZGNjZjE4NWYzODM1ZGY0ZTllMWRhMGNhMGIifSx7IngtYW16LWNyZWRlbnRpYWwiOiIxMjM0NTY3ODkvMjAxOTEwMDUvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsieC1hbXotZGF0ZSI6IjIwMTkxMDA1VDEzMDAwMFoifV19
+                  x-amz-credential: 123456789/20191005/us-east-1/s3/aws4_request
+                  x-amz-algorithm: AWS4-HMAC-SHA256
+                  x-amz-date: 20191005T130000Z
+                  x-amz-signature: 6b715e441bd7ea5beec87f8415230a600be6dfd76b8f89103137618dca959fac
+                headers: {}
+                method: post
+                url: https://test-bucket.s3.amazonaws.com
+              schema:
+                $ref: '#/components/schemas/upload_presign_response'
+          description: presign URL generated
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Get a presigned URL so that you can upload a file to our AWS S3 bucket
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /folders/:
+    get:
+      operationId: listFolders
+      parameters:
+      - description: Filter By Folder Id
+        example: fld_1234567890abcdef02
+        in: query
+        name: parent_folder_id
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+              - id: fld_1234567890abcdef03
+                name: nested folder 1
+                path: /Folder 2
+                parent_folder_id: fld_1234567890abcdef02
+              - id: fld_1234567890abcdef02
+                name: Folder 2
+                path: /
+                parent_folder_id: null
+              - id: fld_1234567890abcdef01
+                name: Folder 1
+                path: /
+                parent_folder_id: null
+              schema:
+                items:
+                  $ref: '#/components/schemas/folder'
+                title: list_folders
+                type: array
+          description: enumerate all folders
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Get a list of all folders
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    post:
+      operationId: createFolder
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/create_folder_data'
+        required: true
+      responses:
+        "422":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/multiple_errors_response'
+          description: name already exist
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: parent folder doesn't exist
+        "200":
+          content:
+            application/json:
+              example:
+                id: fld_1234567890abcdef0n1
+                name: Folder 3
+                path: /
+                parent_folder_id: null
+              schema:
+                $ref: '#/components/schemas/folder'
+          description: folder created inside another folder
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Create a folder
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /folders/{folder_id}/move:
+    post:
+      operationId: moveFolderToFolder
+      parameters:
+      - example: fld_1234567890abcdef01
+        in: path
+        name: folder_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/move_folder_data'
+        required: true
+      responses:
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: parent folder doesn't exist
+        "200":
+          content:
+            application/json:
+              example:
+                id: fld_1234567890abcdef01
+                name: Folder 1
+                path: /Folder 2
+                parent_folder_id: fld_1234567890abcdef02
+              schema:
+                $ref: '#/components/schemas/folder'
+          description: move to root folder
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Move a folder
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /folders/{folder_id}/rename:
+    post:
+      operationId: renameFolder
+      parameters:
+      - example: fld_1234567890abcdef01
+        in: path
+        name: folder_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/rename_folder_data'
+        required: true
+      responses:
+        "422":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/multiple_errors_response'
+          description: name already exist
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: folder doesn't belong to me
+        "200":
+          content:
+            application/json:
+              example:
+                id: fld_1234567890abcdef01
+                name: Folder 3
+                path: /
+                parent_folder_id: null
+              schema:
+                $ref: '#/components/schemas/folder'
+          description: successful rename
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Rename a folder
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /folders/{folder_id}:
+    delete:
+      operationId: deleteFolder
+      parameters:
+      - example: fld_1234567890abcdef01
+        in: path
+        name: folder_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: folder doesn't exist
+        "422":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: folder has contents
+        "200":
+          content:
+            application/json:
+              example:
+                id: fld_1234567890abcdef01
+                name: Folder 1
+                path: /
+                parent_folder_id: null
+              schema:
+                $ref: '#/components/schemas/folder'
+          description: folder is empty
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Delete a folder
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /data_requests/{data_request_id}/events:
+    post:
+      operationId: createDataRequestEvent
+      parameters:
+      - example: drq_1234567890abcdef01
+        in: path
+        name: data_request_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/create_submission_data_request_event_request'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                status: success
+                event:
+                  id: dre_1234567890abcdef01
+                  submission_id: sub_1234567890abcdef01
+                  submission_data_request_id: drq_1234567890abcdef01
+                  event_type: send_request
+                  message_type: email
+                  message_recipient: test@test.com
+                  occurred_at: 2018-10-20T13:00:00Z
+              schema:
+                $ref: '#/components/schemas/create_submission_data_request_event_response'
+          description: event created
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                errors:
+                - Message type can't be blank
+                - Message recipient can't be blank
+              schema:
+                $ref: '#/components/schemas/multiple_errors_response'
+          description: message recipient must not be blank
+      security:
+      - api_token_basic: []
+      summary: Creates a new event for emailing a signee a request for signature
+      tags:
+      - PDF
+      x-codegen-request-body-name: event
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /data_requests/{data_request_id}/tokens:
+    post:
+      operationId: createDataRequestToken
+      parameters:
+      - example: drq_1234567890abcdef01
+        in: path
+        name: data_request_id
+        required: true
+        schema:
+          type: string
+      - example: api
+        in: query
+        name: type
+        schema:
+          enum:
+          - api
+          - email
+          type: string
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                status: success
+                token:
+                  id: 1234567890abcdefa1
+                  secret: ABCDEF01234567890
+                  expires_at: 2018-10-20T14:00:00Z
+                  data_request_url: https://app.docspring.com/data_requests/drq_1234567890abcdef01?token_id=1234567890abcdefa1&token_secret=ABCDEF01234567890
+              schema:
+                $ref: '#/components/schemas/create_submission_data_request_token_response'
+          description: token created
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Invalid token type: invalid. Must be one of: api (expiration:\
+                  \ 1 hour), email (expiration: 30 days)"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: invalid request
+      security:
+      - api_token_basic: []
+      summary: Creates a new data request token for form authentication
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /data_requests/{data_request_id}:
+    get:
+      operationId: getDataRequest
+      parameters:
+      - example: drq_1234567890abcdef01
+        in: path
+        name: data_request_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                id: drq_1234567890abcdef01
+                email: jdoe@example.com
+                name: John Doe
+                order: 1
+                sort_order: 0
+                fields:
+                - last_name
+                metadata:
+                  user_id: 42
+                state: pending
+                viewed_at: null
+                completed_at: null
+                data:
+                  last_name: Smithers
+                auth_type: password
+                auth_second_factor_type: phone_number
+                auth_provider: null
+                auth_session_started_at: 2018-10-23T13:00:00Z
+                auth_session_id_hash: null
+                auth_user_id_hash: 8ae0e445664ca53407906db8638d8ba07a2383f656383a4427bed1ab645ca29a
+                auth_username_hash: b7c141423f7030a6a771563ee0731192ea871146653a3d0cf8f8b78ca8f9699b
+                auth_phone_number_hash: fdcc3985b0698d655137019b1e776171081369f0aad125b8c7f57af2b8225490
+                ip_address: 1.1.1.1
+                user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36\
+                  \ (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
+                submission_id: sub_1234567890abcdef01
+              schema:
+                $ref: '#/components/schemas/submission_data_request_show'
+          description: completed submission data request found
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Data request not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: submission data request not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Look up a submission data request
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    put:
+      operationId: updateDataRequest
+      parameters:
+      - example: drq_1234567890abcdef01
+        in: path
+        name: data_request_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/update_submission_data_request_data'
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                status: success
+                data_request:
+                  id: drq_1234567890abcdef01
+                  email: jdoe@example.com
+                  name: John Doe
+                  order: 1
+                  sort_order: 0
+                  fields:
+                  - last_name
+                  metadata:
+                    user_id: 123
+                  state: pending
+                  viewed_at: null
+                  completed_at: null
+                  data:
+                    last_name: Smithers
+                  auth_type: oauth
+                  auth_second_factor_type: none
+                  auth_provider: google
+                  auth_session_started_at: 2018-10-23T13:00:00Z
+                  auth_session_id_hash: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
+                  auth_user_id_hash: null
+                  auth_username_hash: null
+                  auth_phone_number_hash: null
+                  ip_address: 1.1.1.1
+                  user_agent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36\
+                    \ (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"
+                  submission_id: sub_1234567890abcdef01
+              schema:
+                $ref: '#/components/schemas/create_submission_data_request_response'
+          description: submission data request updated
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                errors:
+                - Data requests cannot be updated after they have been completed.
+              schema:
+                $ref: '#/components/schemas/multiple_errors_response'
+          description: invalid request
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Data request not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: submission data request not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Update a submission data request
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /submissions/batches:
+    post:
+      operationId: batchGeneratePdfs
+      parameters:
+      - description: "Wait for submission batch to be processed before returning.\
+          \ Set to false to return immediately. Default: true (on sync.* subdomain)"
+        in: query
+        name: wait
+        schema:
+          default: true
+          type: boolean
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/submission_batch_data'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                status: success
+                submission_batch:
+                  id: sbb_1234567890abcdef01
+                  state: pending
+                  metadata:
+                    job_id: 54321
+                  processed_at: null
+                  total_count: 2
+                  pending_count: 2
+                  error_count: 0
+                  completion_percentage: 0
+                submissions:
+                - status: success
+                  submission:
+                    batch_id: sbb_1234567890abcdef01
+                    data_requests: []
+                    editable: null
+                    expired: false
+                    expires_at: null
+                    id: sub_1234567890abcdef01
+                    json_schema_errors: []
+                    metadata:
+                      submission_number: 1
+                    password: null
+                    processed_at: null
+                    state: pending
+                    template_id: tpl_1234567890abcdef01
+                    test: false
+                    truncated_text: {}
+                    pdf_hash: null
+                    download_url: null
+                    permanent_download_url: null
+                    preview_download_url: null
+                    preview_generated_at: null
+                    audit_trail_download_url: null
+                    actions: []
+                - status: success
+                  submission:
+                    batch_id: sbb_1234567890abcdef01
+                    data_requests: []
+                    editable: null
+                    expired: false
+                    expires_at: null
+                    id: sub_1234567890abcdef02
+                    json_schema_errors: []
+                    metadata:
+                      submission_number: 2
+                    password: null
+                    processed_at: null
+                    state: pending
+                    template_id: tpl_1234567890abcdef01
+                    test: true
+                    truncated_text: {}
+                    pdf_hash: null
+                    download_url: null
+                    permanent_download_url: null
+                    preview_download_url: null
+                    preview_generated_at: null
+                    audit_trail_download_url: null
+                    actions: []
+              schema:
+                $ref: '#/components/schemas/batchGeneratePdfs_201_response'
+          description: submissions created
+        "200":
+          content:
+            application/json:
+              example:
+                status: error
+                submission_batch:
+                  id: sbb_1234567890abcdef01
+                  state: error
+                  metadata:
+                    job_id: 54321
+                  processed_at: null
+                  total_count: 2
+                  pending_count: 0
+                  error_count: 1
+                  completion_percentage: 100
+                submissions:
+                - status: valid_but_not_saved
+                - status: error
+                  submission:
+                    batch_id: sbb_1234567890abcdef01
+                    data_requests: []
+                    editable: null
+                    expired: false
+                    expires_at: null
+                    id: sub_1234567890abcdef02
+                    json_schema_errors:
+                    - The object did not contain a required property of 'first_name'
+                    metadata:
+                      submission_number: 2
+                    password: null
+                    processed_at: null
+                    state: invalid_data
+                    template_id: tpl_1234567890abcdef01
+                    test: true
+                    truncated_text: {}
+                    pdf_hash: null
+                    download_url: null
+                    permanent_download_url: null
+                    preview_download_url: null
+                    preview_generated_at: null
+                    audit_trail_download_url: null
+                    actions: []
+                  errors:
+                  - The object did not contain a required property of 'first_name'
+              schema:
+                $ref: '#/components/schemas/batchGeneratePdfs_201_response'
+          description: some PDFs with invalid data
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Invalid API token secret
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "You can only generate up to 50 PDFs per batch request. You\
+                  \ requested: 51"
+                errors:
+                - "The property '#/submissions/0' of type array did not match the\
+                  \ following type: object"
+              schema:
+                $ref: '#/components/schemas/multiple_errors_response'
+          description: array of arrays
+        "400":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "There was a problem with the JSON you submitted: unexpected\
+                  \ character at line 1, column 25 in '{ \"first_name\": \"John\"\
+                  , last_name: \"Smith\" }"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: invalid JSON
+      security:
+      - api_token_basic: []
+      summary: Generates multiple PDFs
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /submissions/batches/{submission_batch_id}:
+    get:
+      operationId: getSubmissionBatch
+      parameters:
+      - example: sbb_1234567890abcdef01
+        in: path
+        name: submission_batch_id
+        required: true
+        schema:
+          type: string
+      - example: true
+        in: query
+        name: include_submissions
+        schema:
+          type: boolean
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                id: sbb_1234567890abcdef01
+                state: error
+                metadata:
+                  qux: abc
+                processed_at: null
+                total_count: 10
+                pending_count: 1
+                error_count: 2
+                completion_percentage: 90
+                submissions:
+                - batch_id: sbb_1234567890abcdef01
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: null
+                  id: sub_1234567890abcdef01
+                  json_schema_errors: []
+                  metadata: {}
+                  password: null
+                  processed_at: null
+                  state: processed
+                  template_id: tpl_1234567890abcdef01
+                  test: false
+                  truncated_text: {}
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef01/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                - batch_id: sbb_1234567890abcdef01
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: null
+                  id: sub_1234567890abcdef02
+                  json_schema_errors: []
+                  metadata: {}
+                  password: null
+                  processed_at: null
+                  state: processed
+                  template_id: tpl_1234567890abcdef01
+                  test: false
+                  truncated_text: {}
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef02/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+              schema:
+                $ref: '#/components/schemas/submission_batch_with_submissions'
+          description: processed submission batch found
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Submission batch not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: submission batch not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Check the status of a submission batch job
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /templates/{template_id}/submissions:
+    get:
+      operationId: listTemplateSubmissions
+      parameters:
+      - example: tpl_1234567890abcdef02
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      - in: query
+        name: cursor
+        schema:
+          type: string
+      - in: query
+        name: limit
+        schema:
+          type: number
+      - in: query
+        name: created_after
+        schema:
+          type: string
+      - in: query
+        name: created_before
+        schema:
+          type: string
+      - in: query
+        name: type
+        schema:
+          type: string
+      - example: true
+        in: query
+        name: include_data
+        schema:
+          type: boolean
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                submissions:
+                - batch_id: null
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: 2020-10-27T13:00:00Z
+                  id: sub_1234567890abcdef11
+                  json_schema_errors: []
+                  metadata:
+                    qux: abc
+                    user_id: 42
+                  password: null
+                  processed_at: 2020-05-14T02:00:00Z
+                  state: processed
+                  template_id: tpl_1234567890abcdef02
+                  test: false
+                  truncated_text:
+                    first_name:
+                    - F. Scott Fitzgerald
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef11/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                  source: api
+                  referrer: null
+                  data:
+                    first_name: John C. D. Rom Laserdisk F. Scott Fitzgerald
+                    last_name: Smith
+                    phone_number: "+11234567890"
+                - batch_id: null
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: 2020-10-27T13:00:00Z
+                  id: sub_1234567890abcdef12
+                  json_schema_errors: []
+                  metadata:
+                    qux: abc
+                    user_id: 42
+                  password: null
+                  processed_at: 2020-05-14T02:00:00Z
+                  state: processed
+                  template_id: tpl_1234567890abcdef02
+                  test: false
+                  truncated_text:
+                    first_name:
+                    - F. Scott Fitzgerald
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef12/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                  source: api
+                  referrer: null
+                  data:
+                    first_name: John C. D. Rom Laserdisk F. Scott Fitzgerald
+                    last_name: Smith
+                    phone_number: "+11234567890"
+                - batch_id: null
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: 2020-10-27T13:00:00Z
+                  id: sub_1234567890abcdef13
+                  json_schema_errors: []
+                  metadata:
+                    qux: abc
+                    user_id: 42
+                  password: null
+                  processed_at: 2020-05-14T02:00:00Z
+                  state: processed
+                  template_id: tpl_1234567890abcdef02
+                  test: false
+                  truncated_text:
+                    first_name:
+                    - F. Scott Fitzgerald
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef13/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                  source: api
+                  referrer: null
+                  data:
+                    first_name: John C. D. Rom Laserdisk F. Scott Fitzgerald
+                    last_name: Smith
+                    phone_number: "+11234567890"
+                - batch_id: null
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: 2020-10-27T13:00:00Z
+                  id: sub_1234567890abcdef14
+                  json_schema_errors: []
+                  metadata:
+                    qux: abc
+                    user_id: 42
+                  password: null
+                  processed_at: 2020-05-14T02:00:00Z
+                  state: processed
+                  template_id: tpl_1234567890abcdef02
+                  test: false
+                  truncated_text:
+                    first_name:
+                    - F. Scott Fitzgerald
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef14/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                  source: api
+                  referrer: null
+                  data:
+                    first_name: John C. D. Rom Laserdisk F. Scott Fitzgerald
+                    last_name: Smith
+                    phone_number: "+11234567890"
+                next_cursor: sub_1234567890abcdef14
+                limit: 50
+              schema:
+                $ref: '#/components/schemas/list_submissions_response'
+          description: listing submissions
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: invalid template id
+      security:
+      - api_token_basic: []
+      summary: List all submissions for a given template
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    post:
+      operationId: generatePdf
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      - description: "Wait for submission to be processed before returning. Set to\
+          \ false to return immediately. Default: true (on sync.* subdomain)"
+        in: query
+        name: wait
+        schema:
+          default: true
+          type: boolean
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/create_pdf_submission_data'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                status: success
+                submission:
+                  batch_id: null
+                  data_requests:
+                  - id: drq_1234567890abcdef01
+                    email: jsmith@example.com
+                    name: null
+                    order: 0
+                    sort_order: 0
+                    fields: null
+                    metadata: {}
+                    state: pending
+                    viewed_at: null
+                    completed_at: null
+                    data: null
+                    auth_type: email_link
+                    auth_second_factor_type: none
+                    auth_provider: null
+                    auth_session_started_at: null
+                    auth_session_id_hash: null
+                    auth_user_id_hash: null
+                    auth_username_hash: null
+                    auth_phone_number_hash: null
+                    ip_address: null
+                    user_agent: null
+                  editable: null
+                  expired: false
+                  expires_at: null
+                  id: sub_1234567890abcdef01
+                  json_schema_errors: []
+                  metadata:
+                    foo: 123
+                    bar: baz
+                  password: null
+                  processed_at: null
+                  state: waiting_for_data_requests
+                  template_id: tpl_1234567890abcdef02
+                  test: false
+                  truncated_text: {}
+                  pdf_hash: null
+                  download_url: null
+                  permanent_download_url: null
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+              schema:
+                $ref: '#/components/schemas/create_submission_response'
+          description: submission created
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Invalid field_overrides. Fields do not exist for this template:\
+                  \ 'non_existent'"
+                submission:
+                  batch_id: null
+                  data_requests: []
+                  editable: null
+                  expired: false
+                  expires_at: null
+                  id: sub_1234567890abcdef01
+                  json_schema_errors:
+                  - The object did not contain a required property of 'last_name'
+                  metadata:
+                    foo: 123
+                    bar: baz
+                  password: null
+                  processed_at: null
+                  state: invalid_data
+                  template_id: tpl_1234567890abcdef01
+                  test: false
+                  truncated_text: {}
+                  pdf_hash: null
+                  download_url: null
+                  permanent_download_url: null
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                errors:
+                - The object did not contain a required property of 'last_name'
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: invalid request
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Invalid API token secret
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Generates a new PDF
+      tags:
+      - PDF
+      x-codegen-request-body-name: submission
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /templates/{template_id}/submissions?endpoint_description=html_templates:
+    post:
+      operationId: generatePdfForHtmlTemplate
+      parameters:
+      - example: tpl_HTML567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      - description: "Wait for submission to be processed before returning. Set to\
+          \ false to return immediately. Default: true (on sync.* subdomain)"
+        in: query
+        name: wait
+        schema:
+          default: true
+          type: boolean
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/create_html_submission_data'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                status: success
+                submission:
+                  batch_id: null
+                  data_requests: []
+                  editable: null
+                  expired: false
+                  expires_at: null
+                  id: sub_1234567890abcdef01
+                  json_schema_errors: []
+                  metadata:
+                    foo: 123
+                    bar: baz
+                  password: rand0mPassw0rd
+                  processed_at: null
+                  state: pending
+                  template_id: tpl_HTML567890abcdef01
+                  test: false
+                  truncated_text: {}
+                  pdf_hash: null
+                  download_url: null
+                  permanent_download_url: null
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+              schema:
+                $ref: '#/components/schemas/create_submission_response'
+          description: submission created
+      security:
+      - api_token_basic: []
+      summary: Generates a new PDF for an HTML template
+      tags:
+      - PDF
+      x-codegen-request-body-name: submission
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /submissions/{submission_id}:
+    delete:
+      operationId: expireSubmission
+      parameters:
+      - example: sub_1234567890abcdef01
+        in: path
+        name: submission_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                batch_id: null
+                data_requests: []
+                editable: false
+                expired: true
+                expires_at: 2018-10-20T13:00:00Z
+                id: sub_1234567890abcdef01
+                json_schema_errors: []
+                metadata:
+                  qux: abc
+                  user_id: 42
+                password: null
+                processed_at: 2020-05-14T02:00:00Z
+                state: processed
+                template_id: tpl_1234567890abcdef01
+                test: true
+                truncated_text:
+                  first_name:
+                  - F. Scott Fitzgerald
+                pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                download_url: null
+                permanent_download_url: null
+                preview_download_url: null
+                preview_generated_at: null
+                audit_trail_download_url: null
+                actions:
+                - id: sba_1234567890abcdef01
+                  integration_id: aci_1234567890abcdef01
+                  state: processed
+                  action_type: aws_s3_upload
+                  action_category: file_upload
+                  result_data:
+                    s3_key: templates/tpl_eGc5CmFbPnCCmerqsx/sub_gzYpKDYFqEHxzca4kK.pdf
+                    s3_url: https://docspring-s3-example.s3.amazonaws.com/templates/tpl_eGc5CmFbPnCCmerqsx/sub_gzYpKDYFqEHxzca4kK.pdf
+                    s3_bucket: docspring-s3-example
+                    s3_region: us-east-1
+              schema:
+                $ref: '#/components/schemas/submission_preview'
+          description: submission was expired
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Submission not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: submission not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Invalid API token secret
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+        "403":
+          content:
+            application/json:
+              example:
+                status: error
+                error: You must use a live API token to expire a submission.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: test API token used
+      security:
+      - api_token_basic: []
+      summary: Expire a PDF submission
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    get:
+      operationId: getSubmission
+      parameters:
+      - example: sub_1234567890abcdef01
+        in: path
+        name: submission_id
+        required: true
+        schema:
+          type: string
+      - example: true
+        in: query
+        name: include_data
+        schema:
+          type: boolean
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                batch_id: null
+                data_requests: []
+                editable: false
+                expired: false
+                expires_at: 2018-10-27T13:00:00Z
+                id: sub_1234567890abcdef01
+                json_schema_errors: []
+                metadata:
+                  qux: abc
+                  user_id: 42
+                password: null
+                processed_at: 2020-05-14T02:00:00Z
+                state: processed
+                template_id: tpl_1234567890abcdef01
+                test: true
+                truncated_text:
+                  first_name:
+                  - F. Scott Fitzgerald
+                pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                download_url: https://example.com/submissions/submission.pdf
+                permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef01/download
+                preview_download_url: null
+                preview_generated_at: null
+                audit_trail_download_url: null
+                actions:
+                - id: sba_1234567890abcdef01
+                  integration_id: aci_1234567890abcdef01
+                  state: processed
+                  action_type: aws_s3_upload
+                  action_category: file_upload
+                  result_data:
+                    s3_key: templates/tpl_eGc5CmFbPnCCmerqsx/sub_gzYpKDYFqEHxzca4kK.pdf
+                    s3_url: https://docspring-s3-example.s3.amazonaws.com/templates/tpl_eGc5CmFbPnCCmerqsx/sub_gzYpKDYFqEHxzca4kK.pdf
+                    s3_bucket: docspring-s3-example
+                    s3_region: us-east-1
+                source: api
+                referrer: null
+                data:
+                  first_name: John C. D. Rom Laserdisk F. Scott Fitzgerald
+                  last_name: Smith
+                  phone_number: "+11234567890"
+              schema:
+                $ref: '#/components/schemas/submission'
+          description: processed submission found
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Submission not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: submission not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Check the status of a PDF
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /submissions/{submission_id}/generate_preview:
+    post:
+      operationId: generatePreview
+      parameters:
+      - example: sub_1234567890abcdef01
+        in: path
+        name: submission_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                status: success
+              schema:
+                $ref: '#/components/schemas/success_error_response'
+          description: preview was successfully requested
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Submission not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: submission not found
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Preview PDF cannot be generated when all data requests have
+                  been completed.
+              schema:
+                $ref: '#/components/schemas/success_error_response'
+          description: error requesting preview
+      security:
+      - api_token_basic: []
+      summary: Generated a preview PDF for partially completed data requests
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /submissions:
+    get:
+      operationId: listSubmissions
+      parameters:
+      - example: sub_1234567890abcdef12
+        in: query
+        name: cursor
+        schema:
+          type: string
+      - example: 3
+        in: query
+        name: limit
+        schema:
+          type: number
+      - example: 2019-01-01T09:00:00-05:00
+        in: query
+        name: created_after
+        schema:
+          type: string
+      - example: 2020-01-01T09:00:00.000+0200
+        in: query
+        name: created_before
+        schema:
+          type: string
+      - example: test
+        in: query
+        name: type
+        schema:
+          type: string
+      - example: true
+        in: query
+        name: include_data
+        schema:
+          type: boolean
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                submissions:
+                - batch_id: null
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: 2020-10-27T13:00:00Z
+                  id: sub_1234567890abcdef01
+                  json_schema_errors: []
+                  metadata:
+                    qux: abc
+                    user_id: 42
+                  password: null
+                  processed_at: 2020-05-14T02:00:00Z
+                  state: processed
+                  template_id: tpl_1234567890abcdef01
+                  test: true
+                  truncated_text:
+                    first_name:
+                    - F. Scott Fitzgerald
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef01/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                  source: api
+                  referrer: null
+                  data:
+                    first_name: John C. D. Rom Laserdisk F. Scott Fitzgerald
+                    last_name: Smith
+                    phone_number: "+11234567890"
+                - batch_id: null
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: 2020-10-27T13:00:00Z
+                  id: sub_1234567890abcdef02
+                  json_schema_errors: []
+                  metadata:
+                    qux: abc
+                    user_id: 42
+                  password: null
+                  processed_at: 2020-05-14T02:00:00Z
+                  state: processed
+                  template_id: tpl_1234567890abcdef01
+                  test: true
+                  truncated_text:
+                    first_name:
+                    - F. Scott Fitzgerald
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef02/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                  source: api
+                  referrer: null
+                  data:
+                    first_name: John C. D. Rom Laserdisk F. Scott Fitzgerald
+                    last_name: Smith
+                    phone_number: "+11234567890"
+                - batch_id: null
+                  data_requests: []
+                  editable: false
+                  expired: false
+                  expires_at: 2020-10-27T13:00:00Z
+                  id: sub_1234567890abcdef03
+                  json_schema_errors: []
+                  metadata:
+                    qux: abc
+                    user_id: 42
+                  password: null
+                  processed_at: 2020-05-14T02:00:00Z
+                  state: processed
+                  template_id: tpl_1234567890abcdef01
+                  test: true
+                  truncated_text:
+                    first_name:
+                    - F. Scott Fitzgerald
+                  pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
+                  download_url: https://example.com/submissions/submission.pdf
+                  permanent_download_url: https://app.docspring.com/submissions/sub_1234567890abcdef03/download
+                  preview_download_url: null
+                  preview_generated_at: null
+                  audit_trail_download_url: null
+                  actions: []
+                  source: api
+                  referrer: null
+                  data:
+                    first_name: John C. D. Rom Laserdisk F. Scott Fitzgerald
+                    last_name: Smith
+                    phone_number: "+11234567890"
+                next_cursor: sub_1234567890abcdef03
+                limit: 3
+              schema:
+                $ref: '#/components/schemas/list_submissions_response'
+          description: listing submissions
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Invalid submission type: 'foo'"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: invalid type
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: List all submissions
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /templates:
+    get:
+      operationId: listTemplates
+      parameters:
+      - description: Search By Name
+        example: "2"
+        in: query
+        name: query
+        schema:
+          type: string
+      - description: Filter By Folder Id
+        example: fld_1234567890abcdef01
+        in: query
+        name: parent_folder_id
+        schema:
+          type: string
+      - description: "Default: 1"
+        example: 2
+        in: query
+        name: page
+        schema:
+          minimum: 1
+          type: integer
+      - description: "Default: 50"
+        example: 1
+        in: query
+        name: per_page
+        schema:
+          maximum: 50
+          minimum: 1
+          type: integer
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+              - add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: test-document.pdf
+                document_md5: null
+                document_parse_error: false
+                document_processed: true
+                document_state: pending
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/templates/test/test-document.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: true
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef011
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Sub Template 1
+                page_count: 3
+                page_dimensions:
+                - - 612
+                  - 792
+                - - 792
+                  - 612
+                - - 612
+                  - 792
+                parent_folder_id: fld_1234567890abcdef01
+                path: /Folder
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef011/original_pdf?token=123456789abcdef
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              - add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: null
+                document_md5: null
+                document_parse_error: false
+                document_processed: false
+                document_state: pending
+                document_url: null
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: true
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef03
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Template 3
+                page_count: 1
+                page_dimensions: null
+                parent_folder_id: null
+                path: /
+                permanent_document_url: null
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: html
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              - add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: test-document.pdf
+                document_md5: null
+                document_parse_error: false
+                document_processed: true
+                document_state: pending
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/templates/test/test-document.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: true
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef02
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Template 2
+                page_count: 3
+                page_dimensions:
+                - - 612
+                  - 792
+                - - 792
+                  - 612
+                - - 612
+                  - 792
+                parent_folder_id: null
+                path: /
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef02/original_pdf?token=123456789abcdef
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              - add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: blank_pdf.pdf
+                document_md5: 1c32d785398e3a7eaab0e9b876903cc6
+                document_parse_error: false
+                document_processed: true
+                document_state: processed
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: true
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef01
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Template 1
+                page_count: 1
+                page_dimensions:
+                - - 612
+                  - 792
+                parent_folder_id: null
+                path: /
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef01/original_pdf?token=123456789abcdef
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              schema:
+                items:
+                  $ref: '#/components/schemas/template_preview'
+                title: list_templates
+                type: array
+          description: enumerate all templates
+        "404":
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: filter templates by invalid folder id
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Get a list of all templates
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    post:
+      operationId: createPDFTemplate
+      parameters:
+      - description: "Wait for template document to be processed before returning.\
+          \ Set to false to return immediately. Default: true (on sync.* subdomain)"
+        example: true
+        in: query
+        name: wait
+        schema:
+          default: true
+          type: boolean
+      requestBody:
+        content:
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/createPDFTemplate_request'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: ""
+                document_filename: fw8ben.pdf
+                document_md5: ca6fdfed355b9e89f9a94ee54688a231
+                document_parse_error: false
+                document_processed: false
+                document_state: pending
+                document_url: /cache/cached_upload.pdf
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: false
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: true
+                id: tpl_1234567890abcdef04
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Test Template
+                page_count: 0
+                page_dimensions: null
+                parent_folder_id: fld_1234567890abcdef01
+                path: /Folder
+                permanent_document_url: null
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              schema:
+                $ref: '#/components/schemas/template_preview'
+          description: returns a pending template
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Create a new PDF template with a form POST file upload
+      tags:
+      - PDF
+      x-content-type: multipart/form-data
+      x-accepts:
+      - application/json
+  /templates?endpoint_description=html:
+    post:
+      operationId: createHTMLTemplate
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/create_html_template'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: HTML template created via API
+                document_filename: null
+                document_md5: null
+                document_parse_error: false
+                document_processed: false
+                document_state: pending
+                document_url: null
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: false
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: true
+                id: tpl_1234567890abcdef04
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Test HTML Template
+                page_count: 1
+                page_dimensions: null
+                parent_folder_id: null
+                path: /
+                permanent_document_url: null
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: html
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              schema:
+                $ref: '#/components/schemas/template_preview'
+          description: returns a created template
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Create a new HTML template
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /templates?endpoint_description=cached_upload:
+    post:
+      operationId: createPDFTemplateFromUpload
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/create_pdf_template'
+        required: true
+      responses:
+        "201":
+          content:
+            application/json:
+              example:
+                add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: fw8ben.pdf
+                document_md5: ca6fdfed355b9e89f9a94ee54688a231
+                document_parse_error: false
+                document_processed: false
+                document_state: pending
+                document_url: https://docspring-s3-example.s3.amazonaws.com/cache/original-0000000000?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: false
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef04
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Test Template Presigned
+                page_count: 0
+                page_dimensions: null
+                parent_folder_id: null
+                path: /
+                permanent_document_url: null
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              schema:
+                $ref: '#/components/schemas/template_preview'
+          description: returns a pending template
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Create a new PDF template from a cached presign upload
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /templates/{template_id}:
+    delete:
+      operationId: deleteTemplate
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                status: success
+              schema:
+                $ref: '#/components/schemas/success_multiple_errors_response'
+          description: template deleted
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Template not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: template not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Delete a template
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    get:
+      operationId: getTemplate
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: blank_pdf.pdf
+                document_md5: 1c32d785398e3a7eaab0e9b876903cc6
+                document_parse_error: false
+                document_processed: true
+                document_state: processed
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: true
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef01
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Template 1
+                page_count: 1
+                page_dimensions:
+                - - 612
+                  - 792
+                parent_folder_id: null
+                path: /
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef01/original_pdf?token=123456789abcdef
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              schema:
+                $ref: '#/components/schemas/template_preview'
+          description: template found
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Template not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: template not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Check the status of an uploaded template
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+    put:
+      operationId: updateTemplate
+      parameters:
+      - example: tpl_1234567890abcdef03
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/update_html_template'
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                status: success
+              schema:
+                $ref: '#/components/schemas/success_multiple_errors_response'
+          description: update template success
+      security:
+      - api_token_basic: []
+      summary: Update a Template
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /templates/{template_id}?full=true:
+    get:
+      operationId: getFullTemplate
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: blank_pdf.pdf
+                document_md5: 1c32d785398e3a7eaab0e9b876903cc6
+                document_parse_error: false
+                document_processed: true
+                document_state: processed
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: true
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef01
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Template 1
+                page_count: 1
+                page_dimensions:
+                - - 612
+                  - 792
+                parent_folder_id: null
+                path: /
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef01/original_pdf?token=123456789abcdef
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+                defaults:
+                  color: "444444"
+                  opacity: 1
+                  fontSize: 11
+                  typeface: Helvetica
+                  checkColor: "444444"
+                  dateFormat: '%m/%d/%Y'
+                  dateTimeFormat: '%m/%d/%Y %H:%M:%S'
+                  characterSpacing: 0
+                  shapeBorderColor: 4A90E2
+                field_order:
+                - - 1
+                  - 2
+                  - 3
+                fields:
+                  "1":
+                    x: 0
+                    "y": 0
+                    id: 1
+                    name: first_name
+                    width: 200
+                    height: 80
+                    displayType: text
+                  "2":
+                    x: 0
+                    "y": 100
+                    id: 2
+                    name: last_name
+                    width: 200
+                    height: 80
+                    displayType: text
+                  "3":
+                    x: 0
+                    "y": 200
+                    id: 3
+                    name: phone_number
+                    width: 200
+                    height: 80
+                    displayType: text
+                footer_html: null
+                header_html: null
+                html_engine_options:
+                  scale: 1
+                  format: Letter
+                  landscape: false
+                  marginTop: 1in
+                  marginLeft: 1in
+                  marginRight: 1in
+                  marginBottom: 1in
+                html: null
+                predefined_fields: []
+                scss: null
+                shared_field_data:
+                  last_name:
+                    name: last_name
+                    type: string
+                    required: true
+                    fieldCount: 1
+                  first_name:
+                    name: first_name
+                    type: string
+                    required: true
+                    fieldCount: 1
+                  phone_number:
+                    name: phone_number
+                    type: string
+                    required: false
+                    fieldCount: 1
+              schema:
+                $ref: '#/components/schemas/template'
+          description: template found
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Template not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: template not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Fetch the full template attributes
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+  /templates/{template_id}/add_fields:
+    put:
+      operationId: addFieldsToTemplate
+      parameters:
+      - example: tpl_1234567890abcdef02
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/add_fields_data'
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                status: success
+                new_field_ids:
+                - 4
+                - 5
+                - 6
+                - 7
+                - 99
+                - 8
+              schema:
+                $ref: '#/components/schemas/template_add_fields_response'
+          description: add fields success
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                errors:
+                - The property '#/fields/0' did not contain a required property of
+                  'page'
+                - "The property '#/fields/1/page' did not have a minimum value of\
+                  \ 1, inclusively"
+                - "The property '#/fields/5' contains additional properties [\"unknown_property\"\
+                  ] outside of the schema when none are allowed"
+                - "The property '#/fields/6/displayType' value \"unknown display type\"\
+                  \ did not match one of the following values: text, check, qrcode,\
+                  \ barcode, image, shape"
+                - "The property '#/fields/6/type' value \"unknown type\" did not match\
+                  \ one of the following values: string, number, boolean, date, address,\
+                  \ country, email, url, image, signature, barcode, combined"
+                - The property '#/fields/6' did not contain a required property of
+                  'page'
+                - "The property '#/fields/7/width' of type string did not match the\
+                  \ following type: number"
+                - "The property '#/fields/8/height' did not have a minimum value of\
+                  \ 0, inclusively"
+                - "The property '#/fields/8/width' did not have a minimum value of\
+                  \ 0, inclusively"
+                - "The property '#/fields/8/x' did not have a minimum value of 0,\
+                  \ inclusively"
+                - "The property '#/fields/8/y' did not have a minimum value of 0,\
+                  \ inclusively"
+                - The property '#/fields/2/id' value "1" is already taken by another
+                  field
+                - "The property '#/fields/2/page' value \"5\" did not have a maximum\
+                  \ value of 3, inclusively (Template has 3 pages)"
+                - "The property '#/fields/3/page' value \"4\" did not have a maximum\
+                  \ value of 3, inclusively (Template has 3 pages)"
+              schema:
+                $ref: '#/components/schemas/template_add_fields_response'
+          description: add fields error
+      security:
+      - api_token_basic: []
+      summary: Add new fields to a Template
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /templates/{template_id}/move:
+    post:
+      operationId: moveTemplateToFolder
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/move_template_data'
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: blank_pdf.pdf
+                document_md5: 1c32d785398e3a7eaab0e9b876903cc6
+                document_parse_error: false
+                document_processed: true
+                document_state: processed
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: true
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef01
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Template 1
+                page_count: 1
+                page_dimensions:
+                - - 612
+                  - 792
+                parent_folder_id: fld_1234567890abcdef01
+                path: /Folder
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef01/original_pdf?token=123456789abcdef
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              schema:
+                $ref: '#/components/schemas/template_preview'
+          description: move template success
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Could not find parent folder MISSING_ID
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: folder not found
+      security:
+      - api_token_basic: []
+      summary: Move Template to folder
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /templates/{template_id}/copy:
+    post:
+      operationId: copyTemplate
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/copy_template_options'
+        required: false
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                add_data_request_submission_id_footers: true
+                allow_additional_properties: false
+                description: null
+                document_filename: blank_pdf.pdf
+                document_md5: 1c32d785398e3a7eaab0e9b876903cc6
+                document_parse_error: false
+                document_processed: true
+                document_state: processed
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef0new1/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                editable_submissions: false
+                embed_domains: null
+                encrypt_pdfs_password: null
+                encrypt_pdfs: false
+                expiration_interval: days
+                expire_after: 7
+                expire_submissions: true
+                external_predefined_fields_template_id: null
+                external_predefined_fields_template_name: null
+                first_template: false
+                id: tpl_1234567890abcdef0new1
+                locked: false
+                merge_audit_trail_pdf: true
+                name: Copied Template Name
+                page_count: 1
+                page_dimensions:
+                - - 612
+                  - 792
+                parent_folder_id: fld_1234567890abcdef01
+                path: /Folder
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef0new1/original_pdf?token=123456789abcdef
+                public_submissions: false
+                public_web_form: false
+                redirect_url: null
+                slack_webhook_url: null
+                template_type: pdf
+                updated_at: 2018-10-20T09:00:00.000-04:00
+                webhook_url: null
+                demo: false
+              schema:
+                $ref: '#/components/schemas/template_preview'
+          description: copy template success
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Could not find parent folder MISSING_ID
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: folder not found
+      security:
+      - api_token_basic: []
+      summary: Copy a Template
+      tags:
+      - PDF
+      x-codegen-request-body-name: options
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /templates/{template_id}/schema:
+    get:
+      operationId: getTemplateSchema
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                $schema: http://json-schema.org/draft-04/schema#
+                id: https://api.docspring.com/api/v1/templates/tpl_1234567890abcdef01/schema.json
+                title: Template 1
+                description: JSON Schema generated by DocSpring.com
+                definitions: {}
+                type: object
+                properties:
+                  first_name:
+                    type: string
+                    title: First Name
+                  last_name:
+                    type: string
+                    title: Last Name
+                  phone_number:
+                    type:
+                    - string
+                    - "null"
+                    title: Phone Number
+                required:
+                - first_name
+                - last_name
+                additionalProperties: false
+              schema:
+                $ref: '#/components/schemas/json_schema'
+          description: template found
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Template not found.
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: template not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Fetch the JSON schema for a template
+      tags:
+      - PDF
+      x-accepts:
+      - application/json
+components:
+  schemas:
+    error_response:
+      additionalProperties: false
+      example:
+        error: error
+        status: error
+      properties:
+        status:
+          enum:
+          - error
+          type: string
+        error:
+          type: string
+      required:
+      - error
+      - status
+      title: error_response
+      type: object
+    json_schema:
+      additionalProperties: false
+      example:
+        $schema: https://openapi-generator.tech
+        description: description
+        id: id
+        additionalProperties: true
+        title: title
+        type: type
+        definitions: "{}"
+        properties: "{}"
+        required:
+        - required
+        - required
+      properties:
+        $schema:
+          format: uri
+          type: string
+        id:
+          format: uri-reference
+          type: string
+        title:
+          type: string
+        description:
+          type: string
+        definitions:
+          properties: {}
+          type: object
+        type:
+          type: string
+        properties:
+          properties: {}
+          type: object
+        additionalProperties:
+          type: boolean
+        required:
+          items:
+            type: string
+          type: array
+      title: json_schema
+      type: object
+    multiple_errors_response:
+      additionalProperties: false
+      example:
+        errors:
+        - errors
+        - errors
+        status: error
+      properties:
+        status:
+          enum:
+          - error
+          type: string
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - errors
+      - status
+      title: multiple_errors_response
+      type: object
+    success_error_response:
+      additionalProperties: false
+      example:
+        error: error
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        error:
+          type: string
+      required:
+      - status
+      title: success_error_response
+      type: object
+    success_multiple_errors_response:
+      additionalProperties: false
+      example:
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - status
+      title: success_multiple_errors_response
+      type: object
+    template_add_fields_response:
+      additionalProperties: false
+      example:
+        new_field_ids:
+        - 0
+        - 0
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        errors:
+          items:
+            type: string
+          type: array
+        new_field_ids:
+          items:
+            type: integer
+          type: array
+      required:
+      - status
+      title: template_add_fields_response
+      type: object
+    upload_presign_response:
+      additionalProperties: false
+      example:
+        headers: "{}"
+        method: post
+        fields: "{}"
+        url: url
+      properties:
+        fields:
+          additionalProperties: false
+          type: object
+        headers:
+          properties: {}
+          type: object
+        url:
+          type: string
+        method:
+          enum:
+          - post
+          type: string
+      required:
+      - fields
+      - headers
+      - url
+      title: upload_presign_response
+      type: object
+    combined_submission_action:
+      additionalProperties: false
+      example:
+        integration_id: integration_id
+        action_category: notification
+        action_type: webhook
+        result_data: "{}"
+        id: id
+        state: pending
+      properties:
+        id:
+          nullable: true
+          type: string
+        integration_id:
+          nullable: true
+          type: string
+        state:
+          enum:
+          - pending
+          - processed
+          - failed
+          - error
+          type: string
+        action_type:
+          enum:
+          - webhook
+          - slack_webhook
+          - email
+          - aws_s3_upload
+          type: string
+        action_category:
+          enum:
+          - notification
+          - file_upload
+          type: string
+        result_data:
+          properties: {}
+          type: object
+      required:
+      - action_category
+      - action_type
+      - id
+      - integration_id
+      - result_data
+      - state
+      title: combined_submission_action
+      type: object
+    combined_submission:
+      additionalProperties: false
+      example:
+        error_message: error_message
+        metadata: "{}"
+        password: password
+        expired: true
+        expires_at: expires_at
+        source_pdfs:
+        - "{}"
+        - "{}"
+        pdf_hash: pdf_hash
+        download_url: download_url
+        processed_at: processed_at
+        submission_ids:
+        - submission_ids
+        - submission_ids
+        id: id
+        state: pending
+        expires_in: 0
+        actions:
+        - integration_id: integration_id
+          action_category: notification
+          action_type: webhook
+          result_data: "{}"
+          id: id
+          state: pending
+        - integration_id: integration_id
+          action_category: notification
+          action_type: webhook
+          result_data: "{}"
+          id: id
+          state: pending
+      properties:
+        id:
+          nullable: true
+          type: string
+        state:
+          enum:
+          - pending
+          - processed
+          - error
+          type: string
+        expired:
+          type: boolean
+        expires_in:
+          nullable: true
+          type: integer
+        expires_at:
+          nullable: true
+          type: string
+        processed_at:
+          nullable: true
+          type: string
+        error_message:
+          nullable: true
+          type: string
+        submission_ids:
+          items:
+            type: string
+          type: array
+        source_pdfs:
+          items:
+            additionalProperties: false
+            type: object
+          type: array
+        metadata:
+          properties: {}
+          type: object
+        password:
+          nullable: true
+          type: string
+        pdf_hash:
+          nullable: true
+          type: string
+        download_url:
+          nullable: true
+          type: string
+        actions:
+          items:
+            $ref: '#/components/schemas/combined_submission_action'
+          type: array
+      required:
+      - actions
+      - download_url
+      - error_message
+      - expired
+      - expires_at
+      - expires_in
+      - id
+      - metadata
+      - password
+      - pdf_hash
+      - processed_at
+      - source_pdfs
+      - state
+      - submission_ids
+      title: combined_submission
+      type: object
+    custom_file:
+      additionalProperties: false
+      example:
+        id: id
+        url: url
+      properties:
+        id:
+          nullable: true
+          type: string
+        url:
+          nullable: true
+          type: string
+      required:
+      - id
+      - url
+      title: custom_file
+      type: object
+    folder:
+      additionalProperties: false
+      example:
+        path: path
+        parent_folder_id: parent_folder_id
+        name: name
+        id: id
+      properties:
+        id:
+          nullable: true
+          type: string
+        name:
+          nullable: true
+          type: string
+        path:
+          nullable: true
+          type: string
+        parent_folder_id:
+          nullable: true
+          type: string
+      required:
+      - id
+      - name
+      - parent_folder_id
+      - path
+      title: folder
+      type: object
+    submission_action:
+      additionalProperties: false
+      example:
+        integration_id: integration_id
+        action_category: notification
+        action_type: webhook
+        result_data: "{}"
+        id: id
+        state: pending
+      properties:
+        id:
+          nullable: true
+          type: string
+        integration_id:
+          nullable: true
+          type: string
+        state:
+          enum:
+          - pending
+          - processed
+          - failed
+          - error
+          type: string
+        action_type:
+          enum:
+          - webhook
+          - slack_webhook
+          - email
+          - aws_s3_upload
+          type: string
+        action_category:
+          enum:
+          - notification
+          - file_upload
+          type: string
+        result_data:
+          properties: {}
+          type: object
+      required:
+      - action_category
+      - action_type
+      - id
+      - integration_id
+      - result_data
+      - state
+      title: submission_action
+      type: object
+    submission_batch:
+      additionalProperties: false
+      example:
+        pending_count: 6
+        completion_percentage: 5.962133916683182
+        metadata: "{}"
+        total_count: 0
+        processed_at: processed_at
+        id: id
+        state: pending
+        error_count: 1
+      properties:
+        id:
+          nullable: true
+          type: string
+        state:
+          enum:
+          - pending
+          - processed
+          - error
+          type: string
+        metadata:
+          properties: {}
+          type: object
+        processed_at:
+          nullable: true
+          type: string
+        total_count:
+          type: integer
+        pending_count:
+          type: integer
+        error_count:
+          type: integer
+        completion_percentage:
+          type: number
+      required:
+      - completion_percentage
+      - error_count
+      - id
+      - metadata
+      - pending_count
+      - processed_at
+      - state
+      - total_count
+      title: submission_batch
+      type: object
+    submission_batch_with_submissions:
+      additionalProperties: false
+      example:
+        pending_count: 6
+        completion_percentage: 5.962133916683182
+        metadata: "{}"
+        total_count: 0
+        submissions:
+        - preview_generated_at: preview_generated_at
+          metadata: "{}"
+          json_schema_errors:
+          - json_schema_errors
+          - json_schema_errors
+          test: true
+          batch_id: batch_id
+          editable: true
+          permanent_download_url: permanent_download_url
+          preview_download_url: preview_download_url
+          audit_trail_download_url: audit_trail_download_url
+          password: password
+          expired: true
+          expires_at: expires_at
+          pdf_hash: pdf_hash
+          download_url: download_url
+          processed_at: processed_at
+          template_id: template_id
+          id: id
+          state: pending
+          truncated_text: "{}"
+          actions:
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          data_requests:
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+        - preview_generated_at: preview_generated_at
+          metadata: "{}"
+          json_schema_errors:
+          - json_schema_errors
+          - json_schema_errors
+          test: true
+          batch_id: batch_id
+          editable: true
+          permanent_download_url: permanent_download_url
+          preview_download_url: preview_download_url
+          audit_trail_download_url: audit_trail_download_url
+          password: password
+          expired: true
+          expires_at: expires_at
+          pdf_hash: pdf_hash
+          download_url: download_url
+          processed_at: processed_at
+          template_id: template_id
+          id: id
+          state: pending
+          truncated_text: "{}"
+          actions:
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          data_requests:
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+        processed_at: processed_at
+        id: id
+        state: pending
+        error_count: 1
+      properties:
+        id:
+          nullable: true
+          type: string
+        state:
+          enum:
+          - pending
+          - processed
+          - error
+          type: string
+        metadata:
+          properties: {}
+          type: object
+        processed_at:
+          nullable: true
+          type: string
+        total_count:
+          type: integer
+        pending_count:
+          type: integer
+        error_count:
+          type: integer
+        completion_percentage:
+          type: number
+        submissions:
+          items:
+            $ref: '#/components/schemas/submission_preview'
+          type: array
+      required:
+      - completion_percentage
+      - error_count
+      - id
+      - metadata
+      - pending_count
+      - processed_at
+      - state
+      - total_count
+      title: submission_preview
+      type: object
+    submission_data_request_event:
+      additionalProperties: false
+      example:
+        occurred_at: occurred_at
+        submission_id: submission_id
+        event_type: send_request
+        message_type: email
+        id: id
+        submission_data_request_id: submission_data_request_id
+        message_recipient: message_recipient
+      properties:
+        id:
+          nullable: true
+          type: string
+        submission_id:
+          nullable: true
+          type: string
+        submission_data_request_id:
+          nullable: true
+          type: string
+        event_type:
+          enum:
+          - send_request
+          - view_request
+          - accepted_terms
+          - decline_request
+          - sign_request
+          - all_completed
+          type: string
+        message_type:
+          enum:
+          - email
+          - sms
+          - fax
+          - mail
+          - slack
+          - msteams
+          - discord
+          - telegram
+          - whatsapp
+          type: string
+        message_recipient:
+          nullable: true
+          type: string
+        occurred_at:
+          nullable: true
+          type: string
+      required:
+      - event_type
+      - id
+      - message_recipient
+      - message_type
+      - occurred_at
+      - submission_data_request_id
+      - submission_id
+      title: submission_data_request_event
+      type: object
+    submission_data_request:
+      additionalProperties: false
+      example:
+        metadata: "{}"
+        auth_type: none
+        viewed_at: viewed_at
+        data: "{}"
+        auth_second_factor_type: none
+        auth_phone_number_hash: auth_phone_number_hash
+        auth_session_started_at: auth_session_started_at
+        ip_address: ip_address
+        auth_user_id_hash: auth_user_id_hash
+        completed_at: completed_at
+        auth_session_id_hash: auth_session_id_hash
+        auth_username_hash: auth_username_hash
+        name: name
+        id: id
+        state: pending
+        fields:
+        - fields
+        - fields
+        sort_order: 2
+        email: email
+        auth_provider: auth_provider
+        user_agent: user_agent
+        order: 5
+      properties:
+        id:
+          nullable: true
+          type: string
+        email:
+          nullable: true
+          type: string
+        name:
+          nullable: true
+          type: string
+        order:
+          nullable: true
+          type: integer
+        sort_order:
+          type: integer
+        fields:
+          items:
+            type: string
+          nullable: true
+          type: array
+        metadata:
+          nullable: true
+          properties: {}
+          type: object
+        state:
+          enum:
+          - pending
+          - completed
+          type: string
+        viewed_at:
+          nullable: true
+          type: string
+        completed_at:
+          nullable: true
+          type: string
+        data:
+          nullable: true
+          properties: {}
+          type: object
+        auth_type:
+          enum:
+          - none
+          - password
+          - oauth
+          - email_link
+          - phone_number
+          - ldap
+          - saml
+          type: string
+        auth_second_factor_type:
+          enum:
+          - none
+          - phone_number
+          - totp
+          - mobile_push
+          - security_key
+          - fingerprint
+          type: string
+        auth_provider:
+          nullable: true
+          type: string
+        auth_session_started_at:
+          nullable: true
+          type: string
+        auth_session_id_hash:
+          nullable: true
+          type: string
+        auth_user_id_hash:
+          nullable: true
+          type: string
+        auth_username_hash:
+          nullable: true
+          type: string
+        auth_phone_number_hash:
+          nullable: true
+          type: string
+        ip_address:
+          nullable: true
+          type: string
+        user_agent:
+          nullable: true
+          type: string
+      required:
+      - auth_phone_number_hash
+      - auth_provider
+      - auth_second_factor_type
+      - auth_session_id_hash
+      - auth_session_started_at
+      - auth_type
+      - auth_user_id_hash
+      - auth_username_hash
+      - completed_at
+      - data
+      - email
+      - fields
+      - id
+      - ip_address
+      - metadata
+      - name
+      - order
+      - sort_order
+      - state
+      - user_agent
+      - viewed_at
+      title: submission_data_request
+      type: object
+    submission_data_request_show:
+      additionalProperties: false
+      example:
+        metadata: "{}"
+        auth_type: none
+        viewed_at: viewed_at
+        data: "{}"
+        auth_second_factor_type: none
+        auth_phone_number_hash: auth_phone_number_hash
+        auth_session_started_at: auth_session_started_at
+        ip_address: ip_address
+        auth_user_id_hash: auth_user_id_hash
+        completed_at: completed_at
+        submission_id: submission_id
+        auth_session_id_hash: auth_session_id_hash
+        auth_username_hash: auth_username_hash
+        name: name
+        id: id
+        state: pending
+        fields:
+        - fields
+        - fields
+        sort_order: 6
+        email: email
+        auth_provider: auth_provider
+        user_agent: user_agent
+        order: 0
+      properties:
+        id:
+          nullable: true
+          type: string
+        email:
+          nullable: true
+          type: string
+        name:
+          nullable: true
+          type: string
+        order:
+          nullable: true
+          type: integer
+        sort_order:
+          type: integer
+        fields:
+          items:
+            type: string
+          nullable: true
+          type: array
+        metadata:
+          nullable: true
+          properties: {}
+          type: object
+        state:
+          enum:
+          - pending
+          - completed
+          type: string
+        viewed_at:
+          nullable: true
+          type: string
+        completed_at:
+          nullable: true
+          type: string
+        data:
+          nullable: true
+          properties: {}
+          type: object
+        auth_type:
+          enum:
+          - none
+          - password
+          - oauth
+          - email_link
+          - phone_number
+          - ldap
+          - saml
+          type: string
+        auth_second_factor_type:
+          enum:
+          - none
+          - phone_number
+          - totp
+          - mobile_push
+          - security_key
+          - fingerprint
+          type: string
+        auth_provider:
+          nullable: true
+          type: string
+        auth_session_started_at:
+          nullable: true
+          type: string
+        auth_session_id_hash:
+          nullable: true
+          type: string
+        auth_user_id_hash:
+          nullable: true
+          type: string
+        auth_username_hash:
+          nullable: true
+          type: string
+        auth_phone_number_hash:
+          nullable: true
+          type: string
+        ip_address:
+          nullable: true
+          type: string
+        user_agent:
+          nullable: true
+          type: string
+        submission_id:
+          nullable: true
+          type: string
+      required:
+      - auth_phone_number_hash
+      - auth_provider
+      - auth_second_factor_type
+      - auth_session_id_hash
+      - auth_session_started_at
+      - auth_type
+      - auth_user_id_hash
+      - auth_username_hash
+      - completed_at
+      - data
+      - email
+      - fields
+      - id
+      - ip_address
+      - metadata
+      - name
+      - order
+      - sort_order
+      - state
+      - submission_id
+      - user_agent
+      - viewed_at
+      title: submission_data_request_show
+      type: object
+    submission_data_request_token:
+      additionalProperties: false
+      example:
+        expires_at: expires_at
+        id: id
+        secret: secret
+        data_request_url: data_request_url
+      properties:
+        id:
+          nullable: true
+          type: string
+        secret:
+          type: string
+        expires_at:
+          nullable: true
+          type: string
+        data_request_url:
+          nullable: true
+          type: string
+      required:
+      - data_request_url
+      - expires_at
+      - id
+      - secret
+      title: submission_data_request_token
+      type: object
+    submission_preview:
+      additionalProperties: false
+      example:
+        preview_generated_at: preview_generated_at
+        metadata: "{}"
+        json_schema_errors:
+        - json_schema_errors
+        - json_schema_errors
+        test: true
+        batch_id: batch_id
+        editable: true
+        permanent_download_url: permanent_download_url
+        preview_download_url: preview_download_url
+        audit_trail_download_url: audit_trail_download_url
+        password: password
+        expired: true
+        expires_at: expires_at
+        pdf_hash: pdf_hash
+        download_url: download_url
+        processed_at: processed_at
+        template_id: template_id
+        id: id
+        state: pending
+        truncated_text: "{}"
+        actions:
+        - integration_id: integration_id
+          action_category: notification
+          action_type: webhook
+          result_data: "{}"
+          id: id
+          state: pending
+        - integration_id: integration_id
+          action_category: notification
+          action_type: webhook
+          result_data: "{}"
+          id: id
+          state: pending
+        data_requests:
+        - metadata: "{}"
+          auth_type: none
+          viewed_at: viewed_at
+          data: "{}"
+          auth_second_factor_type: none
+          auth_phone_number_hash: auth_phone_number_hash
+          auth_session_started_at: auth_session_started_at
+          ip_address: ip_address
+          auth_user_id_hash: auth_user_id_hash
+          completed_at: completed_at
+          auth_session_id_hash: auth_session_id_hash
+          auth_username_hash: auth_username_hash
+          name: name
+          id: id
+          state: pending
+          fields:
+          - fields
+          - fields
+          sort_order: 2
+          email: email
+          auth_provider: auth_provider
+          user_agent: user_agent
+          order: 5
+        - metadata: "{}"
+          auth_type: none
+          viewed_at: viewed_at
+          data: "{}"
+          auth_second_factor_type: none
+          auth_phone_number_hash: auth_phone_number_hash
+          auth_session_started_at: auth_session_started_at
+          ip_address: ip_address
+          auth_user_id_hash: auth_user_id_hash
+          completed_at: completed_at
+          auth_session_id_hash: auth_session_id_hash
+          auth_username_hash: auth_username_hash
+          name: name
+          id: id
+          state: pending
+          fields:
+          - fields
+          - fields
+          sort_order: 2
+          email: email
+          auth_provider: auth_provider
+          user_agent: user_agent
+          order: 5
+      properties:
+        batch_id:
+          nullable: true
+          type: string
+        data_requests:
+          items:
+            $ref: '#/components/schemas/submission_data_request'
+          type: array
+        editable:
+          nullable: true
+          type: boolean
+        expired:
+          type: boolean
+        expires_at:
+          nullable: true
+          type: string
+        id:
+          nullable: true
+          type: string
+        json_schema_errors:
+          items:
+            type: string
+          nullable: true
+          type: array
+        metadata:
+          properties: {}
+          type: object
+        password:
+          nullable: true
+          type: string
+        processed_at:
+          nullable: true
+          type: string
+        state:
+          enum:
+          - pending
+          - processed
+          - invalid_data
+          - error
+          - image_download_failed
+          - image_processing_failed
+          - waiting_for_data_requests
+          - syntax_error
+          - account_suspended
+          - license_revoked
+          - accidental
+          type: string
+        template_id:
+          nullable: true
+          type: string
+        test:
+          type: boolean
+        truncated_text:
+          nullable: true
+          properties: {}
+          type: object
+        pdf_hash:
+          nullable: true
+          type: string
+        download_url:
+          nullable: true
+          type: string
+        permanent_download_url:
+          nullable: true
+          type: string
+        preview_download_url:
+          nullable: true
+          type: string
+        preview_generated_at:
+          nullable: true
+          type: string
+        audit_trail_download_url:
+          nullable: true
+          type: string
+        actions:
+          items:
+            $ref: '#/components/schemas/submission_action'
+          type: array
+      required:
+      - actions
+      - audit_trail_download_url
+      - batch_id
+      - data_requests
+      - download_url
+      - editable
+      - expired
+      - expires_at
+      - id
+      - json_schema_errors
+      - metadata
+      - password
+      - pdf_hash
+      - permanent_download_url
+      - preview_download_url
+      - preview_generated_at
+      - processed_at
+      - state
+      - template_id
+      - test
+      - truncated_text
+      title: submission_preview
+      type: object
+    submission:
+      additionalProperties: false
+      example:
+        preview_generated_at: preview_generated_at
+        metadata: "{}"
+        json_schema_errors:
+        - json_schema_errors
+        - json_schema_errors
+        test: true
+        data: "{}"
+        batch_id: batch_id
+        editable: true
+        permanent_download_url: permanent_download_url
+        preview_download_url: preview_download_url
+        audit_trail_download_url: audit_trail_download_url
+        source: api
+        referrer: referrer
+        password: password
+        expired: true
+        expires_at: expires_at
+        pdf_hash: pdf_hash
+        download_url: download_url
+        processed_at: processed_at
+        template_id: template_id
+        id: id
+        state: pending
+        truncated_text: "{}"
+        actions:
+        - integration_id: integration_id
+          action_category: notification
+          action_type: webhook
+          result_data: "{}"
+          id: id
+          state: pending
+        - integration_id: integration_id
+          action_category: notification
+          action_type: webhook
+          result_data: "{}"
+          id: id
+          state: pending
+        data_requests:
+        - metadata: "{}"
+          auth_type: none
+          viewed_at: viewed_at
+          data: "{}"
+          auth_second_factor_type: none
+          auth_phone_number_hash: auth_phone_number_hash
+          auth_session_started_at: auth_session_started_at
+          ip_address: ip_address
+          auth_user_id_hash: auth_user_id_hash
+          completed_at: completed_at
+          auth_session_id_hash: auth_session_id_hash
+          auth_username_hash: auth_username_hash
+          name: name
+          id: id
+          state: pending
+          fields:
+          - fields
+          - fields
+          sort_order: 2
+          email: email
+          auth_provider: auth_provider
+          user_agent: user_agent
+          order: 5
+        - metadata: "{}"
+          auth_type: none
+          viewed_at: viewed_at
+          data: "{}"
+          auth_second_factor_type: none
+          auth_phone_number_hash: auth_phone_number_hash
+          auth_session_started_at: auth_session_started_at
+          ip_address: ip_address
+          auth_user_id_hash: auth_user_id_hash
+          completed_at: completed_at
+          auth_session_id_hash: auth_session_id_hash
+          auth_username_hash: auth_username_hash
+          name: name
+          id: id
+          state: pending
+          fields:
+          - fields
+          - fields
+          sort_order: 2
+          email: email
+          auth_provider: auth_provider
+          user_agent: user_agent
+          order: 5
+      properties:
+        batch_id:
+          nullable: true
+          type: string
+        data_requests:
+          items:
+            $ref: '#/components/schemas/submission_data_request'
+          type: array
+        editable:
+          nullable: true
+          type: boolean
+        expired:
+          type: boolean
+        expires_at:
+          nullable: true
+          type: string
+        id:
+          nullable: true
+          type: string
+        json_schema_errors:
+          items:
+            type: string
+          nullable: true
+          type: array
+        metadata:
+          properties: {}
+          type: object
+        password:
+          nullable: true
+          type: string
+        processed_at:
+          nullable: true
+          type: string
+        state:
+          enum:
+          - pending
+          - processed
+          - invalid_data
+          - error
+          - image_download_failed
+          - image_processing_failed
+          - waiting_for_data_requests
+          - syntax_error
+          - account_suspended
+          - license_revoked
+          - accidental
+          type: string
+        template_id:
+          nullable: true
+          type: string
+        test:
+          type: boolean
+        truncated_text:
+          nullable: true
+          properties: {}
+          type: object
+        pdf_hash:
+          nullable: true
+          type: string
+        download_url:
+          nullable: true
+          type: string
+        permanent_download_url:
+          nullable: true
+          type: string
+        preview_download_url:
+          nullable: true
+          type: string
+        preview_generated_at:
+          nullable: true
+          type: string
+        audit_trail_download_url:
+          nullable: true
+          type: string
+        actions:
+          items:
+            $ref: '#/components/schemas/submission_action'
+          type: array
+        source:
+          enum:
+          - api
+          - web
+          - reprocess
+          - webhook
+          type: string
+        referrer:
+          nullable: true
+          type: string
+        data:
+          nullable: true
+          properties: {}
+          type: object
+      required:
+      - actions
+      - audit_trail_download_url
+      - batch_id
+      - data
+      - data_requests
+      - download_url
+      - editable
+      - expired
+      - expires_at
+      - id
+      - json_schema_errors
+      - metadata
+      - password
+      - pdf_hash
+      - permanent_download_url
+      - preview_download_url
+      - preview_generated_at
+      - processed_at
+      - referrer
+      - source
+      - state
+      - template_id
+      - test
+      - truncated_text
+      title: submission
+      type: object
+    template_preview:
+      additionalProperties: false
+      example:
+        document_processed: true
+        expiration_interval: expiration_interval
+        document_state: pending
+        expire_after: 0
+        description: description
+        external_predefined_fields_template_id: external_predefined_fields_template_id
+        slack_webhook_url: slack_webhook_url
+        demo: true
+        external_predefined_fields_template_name: external_predefined_fields_template_name
+        path: path
+        public_web_form: true
+        updated_at: updated_at
+        permanent_document_url: permanent_document_url
+        template_type: pdf
+        id: id
+        page_dimensions:
+        - - 1.4658129805029452
+          - 1.4658129805029452
+        - - 1.4658129805029452
+          - 1.4658129805029452
+        locked: true
+        page_count: 6
+        encrypt_pdfs: true
+        merge_audit_trail_pdf: true
+        webhook_url: webhook_url
+        embed_domains: embed_domains
+        parent_folder_id: parent_folder_id
+        allow_additional_properties: true
+        encrypt_pdfs_password: encrypt_pdfs_password
+        public_submissions: true
+        add_data_request_submission_id_footers: true
+        document_md5: document_md5
+        first_template: true
+        editable_submissions: true
+        expire_submissions: true
+        name: name
+        document_parse_error: true
+        document_filename: document_filename
+        document_url: document_url
+        redirect_url: redirect_url
+      properties:
+        add_data_request_submission_id_footers:
+          type: boolean
+        allow_additional_properties:
+          type: boolean
+        description:
+          nullable: true
+          type: string
+        document_filename:
+          nullable: true
+          type: string
+        document_md5:
+          nullable: true
+          type: string
+        document_parse_error:
+          type: boolean
+        document_processed:
+          type: boolean
+        document_state:
+          enum:
+          - pending
+          - processed
+          - password_required
+          - malformed_pdf
+          - unknown_error
+          type: string
+        document_url:
+          nullable: true
+          type: string
+        editable_submissions:
+          type: boolean
+        embed_domains:
+          nullable: true
+          type: string
+        encrypt_pdfs_password:
+          nullable: true
+          type: string
+        encrypt_pdfs:
+          type: boolean
+        expiration_interval:
+          type: string
+        expire_after:
+          type: integer
+        expire_submissions:
+          type: boolean
+        external_predefined_fields_template_id:
+          nullable: true
+          type: string
+        external_predefined_fields_template_name:
+          nullable: true
+          type: string
+        first_template:
+          type: boolean
+        id:
+          nullable: true
+          type: string
+        locked:
+          type: boolean
+        merge_audit_trail_pdf:
+          type: boolean
+        name:
+          nullable: true
+          type: string
+        page_count:
+          type: integer
+        page_dimensions:
+          items:
+            items:
+              type: number
+            maxItems: 2
+            minItems: 2
+            type: array
+          nullable: true
+          type: array
+        parent_folder_id:
+          nullable: true
+          type: string
+        path:
+          nullable: true
+          type: string
+        permanent_document_url:
+          nullable: true
+          type: string
+        public_submissions:
+          type: boolean
+        public_web_form:
+          type: boolean
+        redirect_url:
+          nullable: true
+          type: string
+        slack_webhook_url:
+          nullable: true
+          type: string
+        template_type:
+          enum:
+          - pdf
+          - html
+          type: string
+        updated_at:
+          nullable: true
+          type: string
+        webhook_url:
+          nullable: true
+          type: string
+        demo:
+          type: boolean
+      required:
+      - add_data_request_submission_id_footers
+      - allow_additional_properties
+      - demo
+      - description
+      - document_filename
+      - document_md5
+      - document_parse_error
+      - document_processed
+      - document_state
+      - document_url
+      - editable_submissions
+      - embed_domains
+      - encrypt_pdfs
+      - encrypt_pdfs_password
+      - expiration_interval
+      - expire_after
+      - expire_submissions
+      - external_predefined_fields_template_id
+      - external_predefined_fields_template_name
+      - first_template
+      - id
+      - locked
+      - merge_audit_trail_pdf
+      - name
+      - page_count
+      - page_dimensions
+      - parent_folder_id
+      - path
+      - permanent_document_url
+      - public_submissions
+      - public_web_form
+      - redirect_url
+      - slack_webhook_url
+      - template_type
+      - updated_at
+      - webhook_url
+      title: template_preview
+      type: object
+    template:
+      additionalProperties: false
+      example:
+        document_processed: true
+        expiration_interval: expiration_interval
+        scss: scss
+        document_state: pending
+        expire_after: 0
+        description: description
+        external_predefined_fields_template_id: external_predefined_fields_template_id
+        slack_webhook_url: slack_webhook_url
+        demo: true
+        external_predefined_fields_template_name: external_predefined_fields_template_name
+        path: path
+        header_html: header_html
+        public_web_form: true
+        field_order:
+        - - 5.962133916683182
+          - 5.962133916683182
+        - - 5.962133916683182
+          - 5.962133916683182
+        updated_at: updated_at
+        permanent_document_url: permanent_document_url
+        template_type: pdf
+        html: html
+        id: id
+        page_dimensions:
+        - - 1.4658129805029452
+          - 1.4658129805029452
+        - - 1.4658129805029452
+          - 1.4658129805029452
+        locked: true
+        page_count: 6
+        encrypt_pdfs: true
+        merge_audit_trail_pdf: true
+        html_engine_options: "{}"
+        webhook_url: webhook_url
+        embed_domains: embed_domains
+        parent_folder_id: parent_folder_id
+        allow_additional_properties: true
+        encrypt_pdfs_password: encrypt_pdfs_password
+        predefined_fields:
+        - "{}"
+        - "{}"
+        public_submissions: true
+        add_data_request_submission_id_footers: true
+        document_md5: document_md5
+        shared_field_data: "{}"
+        first_template: true
+        defaults: "{}"
+        editable_submissions: true
+        expire_submissions: true
+        name: name
+        document_parse_error: true
+        footer_html: footer_html
+        fields: "{}"
+        document_filename: document_filename
+        document_url: document_url
+        redirect_url: redirect_url
+      properties:
+        add_data_request_submission_id_footers:
+          type: boolean
+        allow_additional_properties:
+          type: boolean
+        description:
+          nullable: true
+          type: string
+        document_filename:
+          nullable: true
+          type: string
+        document_md5:
+          nullable: true
+          type: string
+        document_parse_error:
+          type: boolean
+        document_processed:
+          type: boolean
+        document_state:
+          enum:
+          - pending
+          - processed
+          - password_required
+          - malformed_pdf
+          - unknown_error
+          type: string
+        document_url:
+          nullable: true
+          type: string
+        editable_submissions:
+          type: boolean
+        embed_domains:
+          nullable: true
+          type: string
+        encrypt_pdfs_password:
+          nullable: true
+          type: string
+        encrypt_pdfs:
+          type: boolean
+        expiration_interval:
+          type: string
+        expire_after:
+          type: integer
+        expire_submissions:
+          type: boolean
+        external_predefined_fields_template_id:
+          nullable: true
+          type: string
+        external_predefined_fields_template_name:
+          nullable: true
+          type: string
+        first_template:
+          type: boolean
+        id:
+          nullable: true
+          type: string
+        locked:
+          type: boolean
+        merge_audit_trail_pdf:
+          type: boolean
+        name:
+          nullable: true
+          type: string
+        page_count:
+          type: integer
+        page_dimensions:
+          items:
+            items:
+              type: number
+            maxItems: 2
+            minItems: 2
+            type: array
+          nullable: true
+          type: array
+        parent_folder_id:
+          nullable: true
+          type: string
+        path:
+          nullable: true
+          type: string
+        permanent_document_url:
+          nullable: true
+          type: string
+        public_submissions:
+          type: boolean
+        public_web_form:
+          type: boolean
+        redirect_url:
+          nullable: true
+          type: string
+        slack_webhook_url:
+          nullable: true
+          type: string
+        template_type:
+          enum:
+          - pdf
+          - html
+          type: string
+        updated_at:
+          nullable: true
+          type: string
+        webhook_url:
+          nullable: true
+          type: string
+        demo:
+          type: boolean
+        defaults:
+          additionalProperties: false
+          title: template_defaults
+          type: object
+        field_order:
+          items:
+            items:
+              type: number
+            type: array
+          type: array
+        fields:
+          properties: {}
+          title: template_fields
+          type: object
+        footer_html:
+          nullable: true
+          type: string
+        header_html:
+          nullable: true
+          type: string
+        html_engine_options:
+          properties: {}
+          title: html_engine_options
+          type: object
+        html:
+          nullable: true
+          type: string
+        predefined_fields:
+          items:
+            properties: {}
+            title: predefined_field
+            type: object
+          type: array
+        scss:
+          nullable: true
+          type: string
+        shared_field_data:
+          properties: {}
+          title: template_shared_field_data
+          type: object
+      required:
+      - add_data_request_submission_id_footers
+      - allow_additional_properties
+      - defaults
+      - demo
+      - description
+      - document_filename
+      - document_md5
+      - document_parse_error
+      - document_processed
+      - document_state
+      - document_url
+      - editable_submissions
+      - embed_domains
+      - encrypt_pdfs
+      - encrypt_pdfs_password
+      - expiration_interval
+      - expire_after
+      - expire_submissions
+      - external_predefined_fields_template_id
+      - external_predefined_fields_template_name
+      - field_order
+      - fields
+      - first_template
+      - footer_html
+      - header_html
+      - html
+      - html_engine_options
+      - id
+      - locked
+      - merge_audit_trail_pdf
+      - name
+      - page_count
+      - page_dimensions
+      - parent_folder_id
+      - path
+      - permanent_document_url
+      - predefined_fields
+      - public_submissions
+      - public_web_form
+      - redirect_url
+      - scss
+      - shared_field_data
+      - slack_webhook_url
+      - template_type
+      - updated_at
+      - webhook_url
+      title: template
+      type: object
+    combined_submission_data:
+      additionalProperties: false
+      example:
+        submission_ids:
+        - sub_1234567890abcdef01
+        - sub_1234567890abcdef02
+        metadata:
+          foo: 123
+          bar: baz
+        expires_in: 300
+        password: password123
+      properties:
+        expires_in:
+          type: integer
+        metadata:
+          properties: {}
+          type: object
+        password:
+          type: string
+        submission_ids:
+          items:
+            type: string
+          type: array
+        test:
+          type: boolean
+      required:
+      - submission_ids
+      title: combined_submission_data
+      type: object
+    create_combined_submission_response:
+      additionalProperties: false
+      example:
+        combined_submission:
+          error_message: error_message
+          metadata: "{}"
+          password: password
+          expired: true
+          expires_at: expires_at
+          source_pdfs:
+          - "{}"
+          - "{}"
+          pdf_hash: pdf_hash
+          download_url: download_url
+          processed_at: processed_at
+          submission_ids:
+          - submission_ids
+          - submission_ids
+          id: id
+          state: pending
+          expires_in: 0
+          actions:
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        combined_submission:
+          $ref: '#/components/schemas/combined_submission'
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - combined_submission
+      - status
+      title: create_combined_submission_response
+      type: object
+    combine_pdfs_data:
+      additionalProperties: false
+      example:
+        source_pdfs:
+        - type: submission
+          id: sub_1234567890abcdef01
+        - type: template
+          id: tpl_1234567890abcdef01
+        - type: submission
+          id: sub_1234567890abcdef02
+        - type: custom_file
+          id: cfi_1234567890abcdef01
+        - type: combined_submission
+          id: com_1234567890abcdef01
+        - type: url
+          url: http://example.com/test-pdf.pdf
+        metadata:
+          foo: 123
+          bar: baz
+        expires_in: 300
+        delete_custom_files: true
+      properties:
+        delete_custom_files:
+          type: boolean
+        expires_in:
+          type: integer
+        metadata:
+          properties: {}
+          type: object
+        password:
+          type: string
+        source_pdfs:
+          items:
+            additionalProperties: false
+            type: object
+          type: array
+        test:
+          type: boolean
+      required:
+      - source_pdfs
+      title: combine_pdfs_data
+      type: object
+    create_custom_file_data:
+      additionalProperties: false
+      example:
+        cache_id: cfi_1234567890abcdef01.pdf
+      properties:
+        cache_id:
+          minLength: 1
+          type: string
+      required:
+      - cache_id
+      title: create_custom_file_data
+      type: object
+    create_custom_file_response:
+      additionalProperties: false
+      example:
+        custom_file:
+          id: id
+          url: url
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        custom_file:
+          $ref: '#/components/schemas/custom_file'
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - custom_file
+      - status
+      title: create_custom_file_response
+      type: object
+    create_folder_data:
+      additionalProperties: false
+      example:
+        folder:
+          name: Folder 3
+      properties:
+        folder:
+          additionalProperties: false
+          title: create_folder_attributes
+          type: object
+      required:
+      - folder
+      title: create_folder_data
+      type: object
+    move_folder_data:
+      additionalProperties: false
+      example:
+        parent_folder_id: fld_1234567890abcdef02
+      properties:
+        parent_folder_id:
+          type: string
+      title: move_folder_data
+      type: object
+    rename_folder_data:
+      additionalProperties: false
+      example:
+        name: Folder 3
+      properties:
+        name:
+          type: string
+      required:
+      - name
+      title: rename_folder_data
+      type: object
+    create_submission_data_request_event_request:
+      additionalProperties: false
+      example:
+        event_type: send_request
+        message_type: email
+        message_recipient: test@test.com
+      properties:
+        event_type:
+          enum:
+          - send_request
+          - view_request
+          - accepted_terms
+          - decline_request
+          - sign_request
+          - all_completed
+          type: string
+        message_type:
+          enum:
+          - email
+          - sms
+          - fax
+          - mail
+          - slack
+          - msteams
+          - discord
+          - telegram
+          - whatsapp
+          nullable: true
+          type: string
+      required:
+      - event_type
+      title: create_submission_data_request_event_request
+      type: object
+    create_submission_data_request_event_response:
+      additionalProperties: false
+      example:
+        event:
+          occurred_at: occurred_at
+          submission_id: submission_id
+          event_type: send_request
+          message_type: email
+          id: id
+          submission_data_request_id: submission_data_request_id
+          message_recipient: message_recipient
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        event:
+          $ref: '#/components/schemas/submission_data_request_event'
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - event
+      - status
+      title: create_submission_data_request_event_response
+      type: object
+    create_submission_data_request_token_response:
+      additionalProperties: false
+      example:
+        errors:
+        - errors
+        - errors
+        status: success
+        token:
+          expires_at: expires_at
+          id: id
+          secret: secret
+          data_request_url: data_request_url
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        token:
+          $ref: '#/components/schemas/submission_data_request_token'
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - status
+      - token
+      title: create_submission_data_request_token_response
+      type: object
+    update_submission_data_request_data:
+      additionalProperties: false
+      example:
+        metadata:
+          user_id: 123
+        auth_type: oauth
+        auth_provider: google
+        auth_session_started_at: 2018-10-23 09:00:00 -0400
+        auth_session_id_hash: 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
+      properties:
+        auth_type:
+          enum:
+          - none
+          - password
+          - oauth
+          - email_link
+          - phone_number
+          - ldap
+          - saml
+          type: string
+        fields:
+          items:
+            type: string
+          type: array
+        metadata:
+          properties: {}
+          type: object
+        order:
+          type: integer
+      title: update_submission_data_request_data
+      type: object
+    create_submission_data_request_response:
+      additionalProperties: false
+      example:
+        data_request:
+          metadata: "{}"
+          auth_type: none
+          viewed_at: viewed_at
+          data: "{}"
+          auth_second_factor_type: none
+          auth_phone_number_hash: auth_phone_number_hash
+          auth_session_started_at: auth_session_started_at
+          ip_address: ip_address
+          auth_user_id_hash: auth_user_id_hash
+          completed_at: completed_at
+          submission_id: submission_id
+          auth_session_id_hash: auth_session_id_hash
+          auth_username_hash: auth_username_hash
+          name: name
+          id: id
+          state: pending
+          fields:
+          - fields
+          - fields
+          sort_order: 6
+          email: email
+          auth_provider: auth_provider
+          user_agent: user_agent
+          order: 0
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        data_request:
+          $ref: '#/components/schemas/submission_data_request_show'
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - data_request
+      - status
+      title: create_submission_data_request_response
+      type: object
+    submission_batch_data:
+      additionalProperties: false
+      example:
+        metadata:
+          job_id: 54321
+        test: true
+        submissions:
+        - test: false
+          template_id: tpl_1234567890abcdef01
+          data:
+            first_name: Johnny
+            last_name: Smith
+          metadata:
+            submission_number: 1
+        - template_id: tpl_1234567890abcdef01
+          data:
+            first_name: Jane
+            last_name: Doe
+          metadata:
+            submission_number: 2
+      properties:
+        metadata:
+          properties: {}
+          type: object
+        submissions:
+          items:
+            additionalProperties: false
+            title: submission_data_batch_request
+            type: object
+          type: array
+        test:
+          type: boolean
+      required:
+      - submissions
+      title: submission_batch_data
+      type: object
+    batchGeneratePdfs_201_response:
+      additionalProperties: false
+      example:
+        submission_batch:
+          pending_count: 6
+          completion_percentage: 5.962133916683182
+          metadata: "{}"
+          total_count: 0
+          processed_at: processed_at
+          id: id
+          state: pending
+          error_count: 1
+        submissions:
+        - "{}"
+        - "{}"
+        error: error
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        error:
+          type: string
+        errors:
+          items:
+            type: string
+          type: array
+        submission_batch:
+          $ref: '#/components/schemas/submission_batch'
+        submissions:
+          items:
+            additionalProperties: false
+            type: object
+          type: array
+      required:
+      - status
+      - submission_batch
+      - submissions
+      type: object
+    list_submissions_response:
+      additionalProperties: false
+      example:
+        next_cursor: next_cursor
+        submissions:
+        - preview_generated_at: preview_generated_at
+          metadata: "{}"
+          json_schema_errors:
+          - json_schema_errors
+          - json_schema_errors
+          test: true
+          data: "{}"
+          batch_id: batch_id
+          editable: true
+          permanent_download_url: permanent_download_url
+          preview_download_url: preview_download_url
+          audit_trail_download_url: audit_trail_download_url
+          source: api
+          referrer: referrer
+          password: password
+          expired: true
+          expires_at: expires_at
+          pdf_hash: pdf_hash
+          download_url: download_url
+          processed_at: processed_at
+          template_id: template_id
+          id: id
+          state: pending
+          truncated_text: "{}"
+          actions:
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          data_requests:
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+        - preview_generated_at: preview_generated_at
+          metadata: "{}"
+          json_schema_errors:
+          - json_schema_errors
+          - json_schema_errors
+          test: true
+          data: "{}"
+          batch_id: batch_id
+          editable: true
+          permanent_download_url: permanent_download_url
+          preview_download_url: preview_download_url
+          audit_trail_download_url: audit_trail_download_url
+          source: api
+          referrer: referrer
+          password: password
+          expired: true
+          expires_at: expires_at
+          pdf_hash: pdf_hash
+          download_url: download_url
+          processed_at: processed_at
+          template_id: template_id
+          id: id
+          state: pending
+          truncated_text: "{}"
+          actions:
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          data_requests:
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+        limit: 0.8008281904610115
+      properties:
+        submissions:
+          items:
+            $ref: '#/components/schemas/submission'
+          type: array
+        limit:
+          type: number
+        next_cursor:
+          nullable: true
+          type: string
+      required:
+      - limit
+      - next_cursor
+      - submissions
+      title: list_submissions_response
+      type: object
+    create_submission_data_request_data:
+      properties:
+        auth_second_factor_type:
+          enum:
+          - none
+          - phone_number
+          - totp
+          - mobile_push
+          - security_key
+          - fingerprint
+          type: string
+        auth_type:
+          enum:
+          - none
+          - password
+          - oauth
+          - email_link
+          - phone_number
+          - ldap
+          - saml
+          type: string
+        fields:
+          items:
+            description: TODO default missing array inner type to string
+            type: string
+          type: array
+        metadata:
+          properties: {}
+          type: object
+        order:
+          type: integer
+      title: create_submission_data_request_data
+      type: object
+    create_pdf_submission_data:
+      additionalProperties: false
+      example:
+        data:
+          first_name: John
+          last_name: Smith
+          phone_number: "+11234567890"
+        metadata:
+          foo: 123
+          bar: baz
+        expires_in: 300
+      properties:
+        data:
+          properties: {}
+          title: submission_data
+          type: object
+        data_requests:
+          items:
+            $ref: '#/components/schemas/create_submission_data_request_data'
+          type: array
+        editable:
+          type: boolean
+        expires_in:
+          type: integer
+        field_overrides:
+          properties: {}
+          title: submission_field_overrides
+          type: object
+        metadata:
+          properties: {}
+          title: submission_metadata
+          type: object
+        password:
+          type: string
+        test:
+          type: boolean
+      required:
+      - data
+      title: create_pdf_submission_data
+      type: object
+    create_submission_response:
+      additionalProperties: false
+      example:
+        submission:
+          preview_generated_at: preview_generated_at
+          metadata: "{}"
+          json_schema_errors:
+          - json_schema_errors
+          - json_schema_errors
+          test: true
+          batch_id: batch_id
+          editable: true
+          permanent_download_url: permanent_download_url
+          preview_download_url: preview_download_url
+          audit_trail_download_url: audit_trail_download_url
+          password: password
+          expired: true
+          expires_at: expires_at
+          pdf_hash: pdf_hash
+          download_url: download_url
+          processed_at: processed_at
+          template_id: template_id
+          id: id
+          state: pending
+          truncated_text: "{}"
+          actions:
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          data_requests:
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+          - metadata: "{}"
+            auth_type: none
+            viewed_at: viewed_at
+            data: "{}"
+            auth_second_factor_type: none
+            auth_phone_number_hash: auth_phone_number_hash
+            auth_session_started_at: auth_session_started_at
+            ip_address: ip_address
+            auth_user_id_hash: auth_user_id_hash
+            completed_at: completed_at
+            auth_session_id_hash: auth_session_id_hash
+            auth_username_hash: auth_username_hash
+            name: name
+            id: id
+            state: pending
+            fields:
+            - fields
+            - fields
+            sort_order: 2
+            email: email
+            auth_provider: auth_provider
+            user_agent: user_agent
+            order: 5
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        submission:
+          $ref: '#/components/schemas/submission_preview'
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - status
+      - submission
+      title: create_submission_response
+      type: object
+    create_html_submission_data:
+      additionalProperties: false
+      example:
+        html: <h2>Test Template</h2>
+        css: "h2 { color: blue; }"
+        metadata:
+          foo: 123
+          bar: baz
+        password: rand0mPassw0rd
+        expires_in: 500
+      properties:
+        css:
+          type: string
+        data:
+          properties: {}
+          title: submission_data
+          type: object
+        editable:
+          type: boolean
+        expires_in:
+          type: integer
+        field_overrides:
+          properties: {}
+          title: submission_field_overrides
+          type: object
+        html:
+          type: string
+        metadata:
+          properties: {}
+          title: submission_metadata
+          type: object
+        password:
+          type: string
+        test:
+          type: boolean
+      title: create_html_submission_data
+      type: object
+    createPDFTemplate_request:
+      properties:
+        template[document]:
+          example: <Uploaded File>
+          format: binary
+          type: string
+        template[name]:
+          example: Test Template
+          type: string
+        template[description]:
+          type: string
+        template[parent_folder_id]:
+          example: fld_1234567890abcdef01
+          type: string
+      required:
+      - "template[document]"
+      - "template[name]"
+      type: object
+    create_html_template:
+      additionalProperties: false
+      example:
+        template:
+          name: Test HTML Template
+          description: HTML template created via API
+          template_type: html
+          html: <html><body><p>Test Content</p></body></html>
+          scss: "body { color: #444; }"
+          header_html: Test Header
+          footer_html: Test Footer
+      properties:
+        template:
+          additionalProperties: false
+          title: create_html_template_data
+          type: object
+      required:
+      - template
+      title: create_html_template
+      type: object
+    create_pdf_template:
+      additionalProperties: false
+      example:
+        template:
+          name: Test Template Presigned
+          document:
+            id: original-0000000000
+            storage: cache
+            metadata:
+              filename: fw8ben.pdf
+              size: 62553
+              mime_type: application/pdf
+              md5_hash: ca6fdfed355b9e89f9a94ee54688a231
+      properties:
+        template:
+          additionalProperties: false
+          title: create_pdf_template_data
+          type: object
+      required:
+      - template
+      title: create_pdf_template
+      type: object
+    update_html_template:
+      additionalProperties: false
+      example:
+        template:
+          html: updated html
+          scss: updated scss
+          header_html: updated header
+          footer_html: updated footer
+          webhook_options:
+            exclude_data: true
+      properties:
+        template:
+          additionalProperties: false
+          title: update_html_template_data
+          type: object
+      required:
+      - template
+      title: update_html_template
+      type: object
+    add_fields_data:
+      additionalProperties: false
+      example:
+        fields:
+        - name: new_field1
+          page: 1
+        - name: new_field2
+          page: 1
+          type: string
+          displayType: text
+          rotation: 10
+          overflow: truncate
+          default: default text
+        - name: new_field3
+          page: 2
+          type: number
+          integer: true
+          displayType: text
+          rotation: 0
+        - name: new_field4
+          page: 3
+          type: number
+          integer: true
+          displayType: text
+          rotation: 0
+        - name: new_field5
+          id: 99
+          page: 2
+          x: 20
+          "y": 60
+          width: 150
+          height: 50
+          type: number
+          integer: true
+          displayType: text
+          rotation: 0
+        - name: first_name
+          page: 1
+          x: 40
+          "y": 60
+          width: 150
+          height: 50
+          type: number
+          integer: true
+          displayType: text
+          rotation: 0
+          minimum: 10
+          maximum: 100
+          description: updated description for existing field
+      properties:
+        fields:
+          items:
+            additionalProperties: false
+            type: object
+          type: array
+      required:
+      - fields
+      title: add_fields_data
+      type: object
+    move_template_data:
+      additionalProperties: false
+      example:
+        parent_folder_id: fld_1234567890abcdef01
+      properties:
+        parent_folder_id:
+          type: string
+      required:
+      - parent_folder_id
+      title: move_template_data
+      type: object
+    copy_template_options:
+      additionalProperties: false
+      example:
+        parent_folder_id: fld_1234567890abcdef01
+        name: Copied Template Name
+      properties:
+        name:
+          type: string
+        parent_folder_id:
+          type: string
+      required:
+      - parent_folder_id
+      title: copy_template_options
+      type: object
+  securitySchemes:
+    api_token_basic:
+      description: "Username: API Token ID, Password: API Token Secret"
+      scheme: basic
+      type: http
+x-original-swagger-version: "2.0"
+
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..8325638
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,158 @@
+apply plugin: 'idea'
+apply plugin: 'eclipse'
+apply plugin: 'com.diffplug.spotless'
+
+group = 'com.docspring'
+version = '2.0.0'
+
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath 'com.android.tools.build:gradle:2.3.+'
+        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
+        classpath 'com.diffplug.spotless:spotless-plugin-gradle:6.3.0'
+    }
+}
+
+repositories {
+    mavenCentral()
+}
+
+if(hasProperty('target') && target == 'android') {
+
+    apply plugin: 'com.android.library'
+    apply plugin: 'com.github.dcendents.android-maven'
+
+    android {
+        compileSdkVersion 25
+        buildToolsVersion '25.0.2'
+        defaultConfig {
+            minSdkVersion 14
+            targetSdkVersion 25
+        }
+        compileOptions {
+            sourceCompatibility JavaVersion.VERSION_1_8
+            targetCompatibility JavaVersion.VERSION_1_8
+        }
+
+        // Rename the aar correctly
+        libraryVariants.all { variant ->
+            variant.outputs.each { output ->
+                def outputFile = output.outputFile
+                if (outputFile != null && outputFile.name.endsWith('.aar')) {
+                    def fileName = "${project.name}-${variant.baseName}-${version}.aar"
+                    output.outputFile = new File(outputFile.parent, fileName)
+                }
+            }
+        }
+
+        dependencies {
+            provided "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version"
+        }
+    }
+
+    afterEvaluate {
+        android.libraryVariants.all { variant ->
+            def task = project.tasks.create "jar${variant.name.capitalize()}", Jar
+            task.description = "Create jar artifact for ${variant.name}"
+            task.dependsOn variant.javaCompile
+            task.from variant.javaCompile.destinationDirectory
+            task.destinationDirectory = project.file("${project.buildDir}/outputs/jar")
+            task.archiveFileName = "${project.name}-${variant.baseName}-${version}.jar"
+            artifacts.add('archives', task);
+        }
+    }
+
+    task sourcesJar(type: Jar) {
+        from android.sourceSets.main.java.srcDirs
+        classifier = 'sources'
+    }
+
+    artifacts {
+        archives sourcesJar
+    }
+
+} else {
+
+    apply plugin: 'java'
+    apply plugin: 'maven-publish'
+    sourceCompatibility = JavaVersion.VERSION_1_8
+    targetCompatibility = JavaVersion.VERSION_1_8
+
+    publishing {
+        publications {
+            maven(MavenPublication) {
+               artifactId = 'DocSpring'
+
+               from components.java
+            }
+        }
+    }
+
+    task execute(type:JavaExec) {
+       main = System.getProperty('mainClass')
+       classpath = sourceSets.main.runtimeClasspath
+    }
+}
+
+ext {
+    swagger_annotations_version = "1.6.5"
+    jackson_version = "2.17.1"
+    jackson_databind_version = "2.17.1"
+    jackson_databind_nullable_version = "0.2.6"
+    jakarta_annotation_version = "1.3.5"
+    jersey_version = "2.35"
+    junit_version = "5.8.2"
+}
+
+dependencies {
+    implementation "io.swagger:swagger-annotations:$swagger_annotations_version"
+    implementation "com.google.code.findbugs:jsr305:3.0.2"
+    implementation "org.glassfish.jersey.core:jersey-client:$jersey_version"
+    implementation "org.glassfish.jersey.inject:jersey-hk2:$jersey_version"
+    implementation "org.glassfish.jersey.media:jersey-media-multipart:$jersey_version"
+    implementation "org.glassfish.jersey.media:jersey-media-json-jackson:$jersey_version"
+    implementation "org.glassfish.jersey.connectors:jersey-apache-connector:$jersey_version"
+    implementation "com.fasterxml.jackson.core:jackson-core:$jackson_version"
+    implementation "com.fasterxml.jackson.core:jackson-annotations:$jackson_version"
+    implementation "com.fasterxml.jackson.core:jackson-databind:$jackson_databind_version"
+    implementation "org.openapitools:jackson-databind-nullable:$jackson_databind_nullable_version"
+    implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jackson_version"
+    implementation "jakarta.annotation:jakarta.annotation-api:$jakarta_annotation_version"
+    testImplementation "org.junit.jupiter:junit-jupiter-api:$junit_version"
+    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version"
+}
+
+test {
+    useJUnitPlatform()
+}
+
+javadoc {
+    options.tags = [ "http.response.details:a:Http Response Details" ]
+}
+
+// Use spotless plugin to automatically format code, remove unused import, etc
+// To apply changes directly to the file, run `gradlew spotlessApply`
+// Ref: https://github.com/diffplug/spotless/tree/main/plugin-gradle
+spotless {
+    // comment out below to run spotless as part of the `check` task
+    enforceCheck false
+
+    format 'misc', {
+        // define the files (e.g. '*.gradle', '*.md') to apply `misc` to
+        target '.gitignore'
+        // define the steps to apply to those files
+        trimTrailingWhitespace()
+        indentWithSpaces() // Takes an integer argument if you don't like 4
+        endWithNewline()
+    }
+    java {
+        // don't need to set target, it is inferred from java
+        // apply a specific flavor of google-java-format
+        googleJavaFormat('1.8').aosp().reflowLongStrings()
+        removeUnusedImports()
+        importOrder()
+    }
+}
diff --git a/build.sbt b/build.sbt
new file mode 100644
index 0000000..90735bc
--- /dev/null
+++ b/build.sbt
@@ -0,0 +1,27 @@
+lazy val root = (project in file(".")).
+  settings(
+    organization := "com.docspring",
+    name := "DocSpring",
+    version := "2.0.0",
+    scalaVersion := "2.11.4",
+    scalacOptions ++= Seq("-feature"),
+    Compile / javacOptions ++= Seq("-Xlint:deprecation"),
+    Compile / packageDoc / publishArtifact := false,
+    resolvers += Resolver.mavenLocal,
+    libraryDependencies ++= Seq(
+      "com.google.code.findbugs" % "jsr305" % "3.0.0",
+      "io.swagger" % "swagger-annotations" % "1.6.5",
+      "org.glassfish.jersey.core" % "jersey-client" % "2.35",
+      "org.glassfish.jersey.inject" % "jersey-hk2" % "2.35",
+      "org.glassfish.jersey.media" % "jersey-media-multipart" % "2.35",
+      "org.glassfish.jersey.media" % "jersey-media-json-jackson" % "2.35",
+      "org.glassfish.jersey.connectors" % "jersey-apache-connector" % "2.35",
+      "com.fasterxml.jackson.core" % "jackson-core" % "2.17.1" % "compile",
+      "com.fasterxml.jackson.core" % "jackson-annotations" % "2.17.1" % "compile",
+      "com.fasterxml.jackson.core" % "jackson-databind" % "2.17.1" % "compile",
+      "com.fasterxml.jackson.datatype" % "jackson-datatype-jsr310" % "2.17.1" % "compile",
+      "org.openapitools" % "jackson-databind-nullable" % "0.2.6" % "compile",
+      "jakarta.annotation" % "jakarta.annotation-api" % "1.3.5" % "compile",
+      "org.junit.jupiter" % "junit-jupiter-api" % "5.8.2" % "test"
+    )
+  )
diff --git a/docs/AddFieldsData.md b/docs/AddFieldsData.md
new file mode 100644
index 0000000..4d5bb0c
--- /dev/null
+++ b/docs/AddFieldsData.md
@@ -0,0 +1,13 @@
+
+
+# AddFieldsData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**fields** | **List&lt;Object&gt;** |  |  |
+
+
+
diff --git a/docs/BatchGeneratePdfs201Response.md b/docs/BatchGeneratePdfs201Response.md
new file mode 100644
index 0000000..53e49cc
--- /dev/null
+++ b/docs/BatchGeneratePdfs201Response.md
@@ -0,0 +1,26 @@
+
+
+# BatchGeneratePdfs201Response
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**error** | **String** |  |  [optional] |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+|**submissionBatch** | [**SubmissionBatch**](SubmissionBatch.md) |  |  |
+|**submissions** | **List&lt;Object&gt;** |  |  |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/CombinePdfsData.md b/docs/CombinePdfsData.md
new file mode 100644
index 0000000..fb28cc3
--- /dev/null
+++ b/docs/CombinePdfsData.md
@@ -0,0 +1,18 @@
+
+
+# CombinePdfsData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**deleteCustomFiles** | **Boolean** |  |  [optional] |
+|**expiresIn** | **Integer** |  |  [optional] |
+|**metadata** | **Object** |  |  [optional] |
+|**password** | **String** |  |  [optional] |
+|**sourcePdfs** | **List&lt;Object&gt;** |  |  |
+|**test** | **Boolean** |  |  [optional] |
+
+
+
diff --git a/docs/CombinedSubmission.md b/docs/CombinedSubmission.md
new file mode 100644
index 0000000..a6de479
--- /dev/null
+++ b/docs/CombinedSubmission.md
@@ -0,0 +1,36 @@
+
+
+# CombinedSubmission
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**expired** | **Boolean** |  |  |
+|**expiresIn** | **Integer** |  |  |
+|**expiresAt** | **String** |  |  |
+|**processedAt** | **String** |  |  |
+|**errorMessage** | **String** |  |  |
+|**submissionIds** | **List&lt;String&gt;** |  |  |
+|**sourcePdfs** | **List&lt;Object&gt;** |  |  |
+|**metadata** | **Object** |  |  |
+|**password** | **String** |  |  |
+|**pdfHash** | **String** |  |  |
+|**downloadUrl** | **String** |  |  |
+|**actions** | [**List&lt;CombinedSubmissionAction&gt;**](CombinedSubmissionAction.md) |  |  |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/CombinedSubmissionAction.md b/docs/CombinedSubmissionAction.md
new file mode 100644
index 0000000..2a1e2e9
--- /dev/null
+++ b/docs/CombinedSubmissionAction.md
@@ -0,0 +1,49 @@
+
+
+# CombinedSubmissionAction
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**integrationId** | **String** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**actionType** | [**ActionTypeEnum**](#ActionTypeEnum) |  |  |
+|**actionCategory** | [**ActionCategoryEnum**](#ActionCategoryEnum) |  |  |
+|**resultData** | **Object** |  |  |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| FAILED | &quot;failed&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
+## Enum: ActionTypeEnum
+
+| Name | Value |
+|---- | -----|
+| WEBHOOK | &quot;webhook&quot; |
+| SLACK_WEBHOOK | &quot;slack_webhook&quot; |
+| EMAIL | &quot;email&quot; |
+| AWS_S3_UPLOAD | &quot;aws_s3_upload&quot; |
+
+
+
+## Enum: ActionCategoryEnum
+
+| Name | Value |
+|---- | -----|
+| NOTIFICATION | &quot;notification&quot; |
+| FILE_UPLOAD | &quot;file_upload&quot; |
+
+
+
diff --git a/docs/CombinedSubmissionData.md b/docs/CombinedSubmissionData.md
new file mode 100644
index 0000000..413aacb
--- /dev/null
+++ b/docs/CombinedSubmissionData.md
@@ -0,0 +1,17 @@
+
+
+# CombinedSubmissionData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**expiresIn** | **Integer** |  |  [optional] |
+|**metadata** | **Object** |  |  [optional] |
+|**password** | **String** |  |  [optional] |
+|**submissionIds** | **List&lt;String&gt;** |  |  |
+|**test** | **Boolean** |  |  [optional] |
+
+
+
diff --git a/docs/CopyTemplateOptions.md b/docs/CopyTemplateOptions.md
new file mode 100644
index 0000000..ccaed61
--- /dev/null
+++ b/docs/CopyTemplateOptions.md
@@ -0,0 +1,14 @@
+
+
+# CopyTemplateOptions
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**name** | **String** |  |  [optional] |
+|**parentFolderId** | **String** |  |  |
+
+
+
diff --git a/docs/CreateCombinedSubmissionResponse.md b/docs/CreateCombinedSubmissionResponse.md
new file mode 100644
index 0000000..658101f
--- /dev/null
+++ b/docs/CreateCombinedSubmissionResponse.md
@@ -0,0 +1,24 @@
+
+
+# CreateCombinedSubmissionResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**combinedSubmission** | [**CombinedSubmission**](CombinedSubmission.md) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/CreateCustomFileData.md b/docs/CreateCustomFileData.md
new file mode 100644
index 0000000..4b36fa6
--- /dev/null
+++ b/docs/CreateCustomFileData.md
@@ -0,0 +1,13 @@
+
+
+# CreateCustomFileData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**cacheId** | **String** |  |  |
+
+
+
diff --git a/docs/CreateCustomFileResponse.md b/docs/CreateCustomFileResponse.md
new file mode 100644
index 0000000..cb826c0
--- /dev/null
+++ b/docs/CreateCustomFileResponse.md
@@ -0,0 +1,24 @@
+
+
+# CreateCustomFileResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**customFile** | [**CustomFile**](CustomFile.md) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/CreateFolderData.md b/docs/CreateFolderData.md
new file mode 100644
index 0000000..666b17b
--- /dev/null
+++ b/docs/CreateFolderData.md
@@ -0,0 +1,13 @@
+
+
+# CreateFolderData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**folder** | **Object** |  |  |
+
+
+
diff --git a/docs/CreateHtmlSubmissionData.md b/docs/CreateHtmlSubmissionData.md
new file mode 100644
index 0000000..2f2962a
--- /dev/null
+++ b/docs/CreateHtmlSubmissionData.md
@@ -0,0 +1,21 @@
+
+
+# CreateHtmlSubmissionData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**css** | **String** |  |  [optional] |
+|**data** | **Object** |  |  [optional] |
+|**editable** | **Boolean** |  |  [optional] |
+|**expiresIn** | **Integer** |  |  [optional] |
+|**fieldOverrides** | **Object** |  |  [optional] |
+|**html** | **String** |  |  [optional] |
+|**metadata** | **Object** |  |  [optional] |
+|**password** | **String** |  |  [optional] |
+|**test** | **Boolean** |  |  [optional] |
+
+
+
diff --git a/docs/CreateHtmlTemplate.md b/docs/CreateHtmlTemplate.md
new file mode 100644
index 0000000..8fd0144
--- /dev/null
+++ b/docs/CreateHtmlTemplate.md
@@ -0,0 +1,13 @@
+
+
+# CreateHtmlTemplate
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**template** | **Object** |  |  |
+
+
+
diff --git a/docs/CreatePdfSubmissionData.md b/docs/CreatePdfSubmissionData.md
new file mode 100644
index 0000000..a494cd8
--- /dev/null
+++ b/docs/CreatePdfSubmissionData.md
@@ -0,0 +1,20 @@
+
+
+# CreatePdfSubmissionData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**data** | **Object** |  |  |
+|**dataRequests** | [**List&lt;CreateSubmissionDataRequestData&gt;**](CreateSubmissionDataRequestData.md) |  |  [optional] |
+|**editable** | **Boolean** |  |  [optional] |
+|**expiresIn** | **Integer** |  |  [optional] |
+|**fieldOverrides** | **Object** |  |  [optional] |
+|**metadata** | **Object** |  |  [optional] |
+|**password** | **String** |  |  [optional] |
+|**test** | **Boolean** |  |  [optional] |
+
+
+
diff --git a/docs/CreatePdfTemplate.md b/docs/CreatePdfTemplate.md
new file mode 100644
index 0000000..c518dce
--- /dev/null
+++ b/docs/CreatePdfTemplate.md
@@ -0,0 +1,13 @@
+
+
+# CreatePdfTemplate
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**template** | **Object** |  |  |
+
+
+
diff --git a/docs/CreateSubmissionDataRequestData.md b/docs/CreateSubmissionDataRequestData.md
new file mode 100644
index 0000000..ca61621
--- /dev/null
+++ b/docs/CreateSubmissionDataRequestData.md
@@ -0,0 +1,44 @@
+
+
+# CreateSubmissionDataRequestData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**authSecondFactorType** | [**AuthSecondFactorTypeEnum**](#AuthSecondFactorTypeEnum) |  |  [optional] |
+|**authType** | [**AuthTypeEnum**](#AuthTypeEnum) |  |  [optional] |
+|**fields** | **List&lt;String&gt;** |  |  [optional] |
+|**metadata** | **Object** |  |  [optional] |
+|**order** | **Integer** |  |  [optional] |
+
+
+
+## Enum: AuthSecondFactorTypeEnum
+
+| Name | Value |
+|---- | -----|
+| NONE | &quot;none&quot; |
+| PHONE_NUMBER | &quot;phone_number&quot; |
+| TOTP | &quot;totp&quot; |
+| MOBILE_PUSH | &quot;mobile_push&quot; |
+| SECURITY_KEY | &quot;security_key&quot; |
+| FINGERPRINT | &quot;fingerprint&quot; |
+
+
+
+## Enum: AuthTypeEnum
+
+| Name | Value |
+|---- | -----|
+| NONE | &quot;none&quot; |
+| PASSWORD | &quot;password&quot; |
+| OAUTH | &quot;oauth&quot; |
+| EMAIL_LINK | &quot;email_link&quot; |
+| PHONE_NUMBER | &quot;phone_number&quot; |
+| LDAP | &quot;ldap&quot; |
+| SAML | &quot;saml&quot; |
+
+
+
diff --git a/docs/CreateSubmissionDataRequestEventRequest.md b/docs/CreateSubmissionDataRequestEventRequest.md
new file mode 100644
index 0000000..86edf6d
--- /dev/null
+++ b/docs/CreateSubmissionDataRequestEventRequest.md
@@ -0,0 +1,43 @@
+
+
+# CreateSubmissionDataRequestEventRequest
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**eventType** | [**EventTypeEnum**](#EventTypeEnum) |  |  |
+|**messageType** | [**MessageTypeEnum**](#MessageTypeEnum) |  |  [optional] |
+
+
+
+## Enum: EventTypeEnum
+
+| Name | Value |
+|---- | -----|
+| SEND_REQUEST | &quot;send_request&quot; |
+| VIEW_REQUEST | &quot;view_request&quot; |
+| ACCEPTED_TERMS | &quot;accepted_terms&quot; |
+| DECLINE_REQUEST | &quot;decline_request&quot; |
+| SIGN_REQUEST | &quot;sign_request&quot; |
+| ALL_COMPLETED | &quot;all_completed&quot; |
+
+
+
+## Enum: MessageTypeEnum
+
+| Name | Value |
+|---- | -----|
+| EMAIL | &quot;email&quot; |
+| SMS | &quot;sms&quot; |
+| FAX | &quot;fax&quot; |
+| MAIL | &quot;mail&quot; |
+| SLACK | &quot;slack&quot; |
+| MSTEAMS | &quot;msteams&quot; |
+| DISCORD | &quot;discord&quot; |
+| TELEGRAM | &quot;telegram&quot; |
+| WHATSAPP | &quot;whatsapp&quot; |
+
+
+
diff --git a/docs/CreateSubmissionDataRequestEventResponse.md b/docs/CreateSubmissionDataRequestEventResponse.md
new file mode 100644
index 0000000..23fadfb
--- /dev/null
+++ b/docs/CreateSubmissionDataRequestEventResponse.md
@@ -0,0 +1,24 @@
+
+
+# CreateSubmissionDataRequestEventResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**event** | [**SubmissionDataRequestEvent**](SubmissionDataRequestEvent.md) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/CreateSubmissionDataRequestResponse.md b/docs/CreateSubmissionDataRequestResponse.md
new file mode 100644
index 0000000..2cbcc9b
--- /dev/null
+++ b/docs/CreateSubmissionDataRequestResponse.md
@@ -0,0 +1,24 @@
+
+
+# CreateSubmissionDataRequestResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**dataRequest** | [**SubmissionDataRequestShow**](SubmissionDataRequestShow.md) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/CreateSubmissionDataRequestTokenResponse.md b/docs/CreateSubmissionDataRequestTokenResponse.md
new file mode 100644
index 0000000..22f693d
--- /dev/null
+++ b/docs/CreateSubmissionDataRequestTokenResponse.md
@@ -0,0 +1,24 @@
+
+
+# CreateSubmissionDataRequestTokenResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**token** | [**SubmissionDataRequestToken**](SubmissionDataRequestToken.md) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/CreateSubmissionResponse.md b/docs/CreateSubmissionResponse.md
new file mode 100644
index 0000000..1d2c937
--- /dev/null
+++ b/docs/CreateSubmissionResponse.md
@@ -0,0 +1,24 @@
+
+
+# CreateSubmissionResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**submission** | [**SubmissionPreview**](SubmissionPreview.md) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/CustomFile.md b/docs/CustomFile.md
new file mode 100644
index 0000000..f279175
--- /dev/null
+++ b/docs/CustomFile.md
@@ -0,0 +1,14 @@
+
+
+# CustomFile
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**url** | **String** |  |  |
+
+
+
diff --git a/docs/ErrorResponse.md b/docs/ErrorResponse.md
new file mode 100644
index 0000000..38768e9
--- /dev/null
+++ b/docs/ErrorResponse.md
@@ -0,0 +1,22 @@
+
+
+# ErrorResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**error** | **String** |  |  |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/Folder.md b/docs/Folder.md
new file mode 100644
index 0000000..4fa8918
--- /dev/null
+++ b/docs/Folder.md
@@ -0,0 +1,16 @@
+
+
+# Folder
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**name** | **String** |  |  |
+|**path** | **String** |  |  |
+|**parentFolderId** | **String** |  |  |
+
+
+
diff --git a/docs/JsonSchema.md b/docs/JsonSchema.md
new file mode 100644
index 0000000..226adba
--- /dev/null
+++ b/docs/JsonSchema.md
@@ -0,0 +1,21 @@
+
+
+# JsonSchema
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**$schema** | **URI** |  |  [optional] |
+|**id** | **String** |  |  [optional] |
+|**title** | **String** |  |  [optional] |
+|**description** | **String** |  |  [optional] |
+|**definitions** | **Object** |  |  [optional] |
+|**type** | **String** |  |  [optional] |
+|**properties** | **Object** |  |  [optional] |
+|**additionalProperties** | **Boolean** |  |  [optional] |
+|**required** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
diff --git a/docs/ListSubmissionsResponse.md b/docs/ListSubmissionsResponse.md
new file mode 100644
index 0000000..8663cec
--- /dev/null
+++ b/docs/ListSubmissionsResponse.md
@@ -0,0 +1,15 @@
+
+
+# ListSubmissionsResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**submissions** | [**List&lt;Submission&gt;**](Submission.md) |  |  |
+|**limit** | **BigDecimal** |  |  |
+|**nextCursor** | **String** |  |  |
+
+
+
diff --git a/docs/MoveFolderData.md b/docs/MoveFolderData.md
new file mode 100644
index 0000000..1365bc4
--- /dev/null
+++ b/docs/MoveFolderData.md
@@ -0,0 +1,13 @@
+
+
+# MoveFolderData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**parentFolderId** | **String** |  |  [optional] |
+
+
+
diff --git a/docs/MoveTemplateData.md b/docs/MoveTemplateData.md
new file mode 100644
index 0000000..79c6e55
--- /dev/null
+++ b/docs/MoveTemplateData.md
@@ -0,0 +1,13 @@
+
+
+# MoveTemplateData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**parentFolderId** | **String** |  |  |
+
+
+
diff --git a/docs/MultipleErrorsResponse.md b/docs/MultipleErrorsResponse.md
new file mode 100644
index 0000000..1cb5ffb
--- /dev/null
+++ b/docs/MultipleErrorsResponse.md
@@ -0,0 +1,22 @@
+
+
+# MultipleErrorsResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/PdfApi.md b/docs/PdfApi.md
new file mode 100644
index 0000000..707ee20
--- /dev/null
+++ b/docs/PdfApi.md
@@ -0,0 +1,2805 @@
+# PdfApi
+
+All URIs are relative to *https://sync.api.docspring.com/api/v1*
+
+| Method | HTTP request | Description |
+|------------- | ------------- | -------------|
+| [**addFieldsToTemplate**](PdfApi.md#addFieldsToTemplate) | **PUT** /templates/{template_id}/add_fields | Add new fields to a Template |
+| [**batchGeneratePdfs**](PdfApi.md#batchGeneratePdfs) | **POST** /submissions/batches | Generates multiple PDFs |
+| [**combinePdfs**](PdfApi.md#combinePdfs) | **POST** /combined_submissions?v&#x3D;2 | Merge submission PDFs, template PDFs, or custom files |
+| [**combineSubmissions**](PdfApi.md#combineSubmissions) | **POST** /combined_submissions | Merge generated PDFs together |
+| [**copyTemplate**](PdfApi.md#copyTemplate) | **POST** /templates/{template_id}/copy | Copy a Template |
+| [**createCustomFileFromUpload**](PdfApi.md#createCustomFileFromUpload) | **POST** /custom_files | Create a new custom file from a cached presign upload |
+| [**createDataRequestEvent**](PdfApi.md#createDataRequestEvent) | **POST** /data_requests/{data_request_id}/events | Creates a new event for emailing a signee a request for signature |
+| [**createDataRequestToken**](PdfApi.md#createDataRequestToken) | **POST** /data_requests/{data_request_id}/tokens | Creates a new data request token for form authentication |
+| [**createFolder**](PdfApi.md#createFolder) | **POST** /folders/ | Create a folder |
+| [**createHTMLTemplate**](PdfApi.md#createHTMLTemplate) | **POST** /templates?endpoint_description&#x3D;html | Create a new HTML template |
+| [**createPDFTemplate**](PdfApi.md#createPDFTemplate) | **POST** /templates | Create a new PDF template with a form POST file upload |
+| [**createPDFTemplateFromUpload**](PdfApi.md#createPDFTemplateFromUpload) | **POST** /templates?endpoint_description&#x3D;cached_upload | Create a new PDF template from a cached presign upload |
+| [**deleteFolder**](PdfApi.md#deleteFolder) | **DELETE** /folders/{folder_id} | Delete a folder |
+| [**deleteTemplate**](PdfApi.md#deleteTemplate) | **DELETE** /templates/{template_id} | Delete a template |
+| [**expireCombinedSubmission**](PdfApi.md#expireCombinedSubmission) | **DELETE** /combined_submissions/{combined_submission_id} | Expire a combined submission |
+| [**expireSubmission**](PdfApi.md#expireSubmission) | **DELETE** /submissions/{submission_id} | Expire a PDF submission |
+| [**generatePdf**](PdfApi.md#generatePdf) | **POST** /templates/{template_id}/submissions | Generates a new PDF |
+| [**generatePdfForHtmlTemplate**](PdfApi.md#generatePdfForHtmlTemplate) | **POST** /templates/{template_id}/submissions?endpoint_description&#x3D;html_templates | Generates a new PDF for an HTML template |
+| [**generatePreview**](PdfApi.md#generatePreview) | **POST** /submissions/{submission_id}/generate_preview | Generated a preview PDF for partially completed data requests |
+| [**getCombinedSubmission**](PdfApi.md#getCombinedSubmission) | **GET** /combined_submissions/{combined_submission_id} | Check the status of a combined submission (merged PDFs) |
+| [**getDataRequest**](PdfApi.md#getDataRequest) | **GET** /data_requests/{data_request_id} | Look up a submission data request |
+| [**getFullTemplate**](PdfApi.md#getFullTemplate) | **GET** /templates/{template_id}?full&#x3D;true | Fetch the full template attributes |
+| [**getPresignUrl**](PdfApi.md#getPresignUrl) | **GET** /uploads/presign | Get a presigned URL so that you can upload a file to our AWS S3 bucket |
+| [**getSubmission**](PdfApi.md#getSubmission) | **GET** /submissions/{submission_id} | Check the status of a PDF |
+| [**getSubmissionBatch**](PdfApi.md#getSubmissionBatch) | **GET** /submissions/batches/{submission_batch_id} | Check the status of a submission batch job |
+| [**getTemplate**](PdfApi.md#getTemplate) | **GET** /templates/{template_id} | Check the status of an uploaded template |
+| [**getTemplateSchema**](PdfApi.md#getTemplateSchema) | **GET** /templates/{template_id}/schema | Fetch the JSON schema for a template |
+| [**listCombinedSubmissions**](PdfApi.md#listCombinedSubmissions) | **GET** /combined_submissions | Get a list of all combined submissions |
+| [**listFolders**](PdfApi.md#listFolders) | **GET** /folders/ | Get a list of all folders |
+| [**listSubmissions**](PdfApi.md#listSubmissions) | **GET** /submissions | List all submissions |
+| [**listTemplateSubmissions**](PdfApi.md#listTemplateSubmissions) | **GET** /templates/{template_id}/submissions | List all submissions for a given template |
+| [**listTemplates**](PdfApi.md#listTemplates) | **GET** /templates | Get a list of all templates |
+| [**moveFolderToFolder**](PdfApi.md#moveFolderToFolder) | **POST** /folders/{folder_id}/move | Move a folder |
+| [**moveTemplateToFolder**](PdfApi.md#moveTemplateToFolder) | **POST** /templates/{template_id}/move | Move Template to folder |
+| [**renameFolder**](PdfApi.md#renameFolder) | **POST** /folders/{folder_id}/rename | Rename a folder |
+| [**testAuthentication**](PdfApi.md#testAuthentication) | **GET** /authentication | Test Authentication |
+| [**updateDataRequest**](PdfApi.md#updateDataRequest) | **PUT** /data_requests/{data_request_id} | Update a submission data request |
+| [**updateTemplate**](PdfApi.md#updateTemplate) | **PUT** /templates/{template_id} | Update a Template |
+
+
+
+## addFieldsToTemplate
+
+> TemplateAddFieldsResponse addFieldsToTemplate(templateId, data)
+
+Add new fields to a Template
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef02"; // String | 
+        AddFieldsData data = new AddFieldsData(); // AddFieldsData | 
+        try {
+            TemplateAddFieldsResponse result = apiInstance.addFieldsToTemplate(templateId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#addFieldsToTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **data** | [**AddFieldsData**](AddFieldsData.md)|  | |
+
+### Return type
+
+[**TemplateAddFieldsResponse**](TemplateAddFieldsResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | add fields success |  -  |
+| **422** | add fields error |  -  |
+
+
+## batchGeneratePdfs
+
+> BatchGeneratePdfs201Response batchGeneratePdfs(data, wait)
+
+Generates multiple PDFs
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        SubmissionBatchData data = new SubmissionBatchData(); // SubmissionBatchData | 
+        Boolean wait = true; // Boolean | Wait for submission batch to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain)
+        try {
+            BatchGeneratePdfs201Response result = apiInstance.batchGeneratePdfs(data, wait);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#batchGeneratePdfs");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **data** | [**SubmissionBatchData**](SubmissionBatchData.md)|  | |
+| **wait** | **Boolean**| Wait for submission batch to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) | [optional] [default to true] |
+
+### Return type
+
+[**BatchGeneratePdfs201Response**](BatchGeneratePdfs201Response.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | submissions created |  -  |
+| **200** | some PDFs with invalid data |  -  |
+| **401** | authentication failed |  -  |
+| **422** | array of arrays |  -  |
+| **400** | invalid JSON |  -  |
+
+
+## combinePdfs
+
+> CreateCombinedSubmissionResponse combinePdfs(data)
+
+Merge submission PDFs, template PDFs, or custom files
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        CombinePdfsData data = new CombinePdfsData(); // CombinePdfsData | 
+        try {
+            CreateCombinedSubmissionResponse result = apiInstance.combinePdfs(data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#combinePdfs");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **data** | [**CombinePdfsData**](CombinePdfsData.md)|  | |
+
+### Return type
+
+[**CreateCombinedSubmissionResponse**](CreateCombinedSubmissionResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | combined submission created |  -  |
+| **422** | invalid request |  -  |
+| **400** | invalid JSON |  -  |
+| **401** | authentication failed |  -  |
+
+
+## combineSubmissions
+
+> CreateCombinedSubmissionResponse combineSubmissions(data, wait)
+
+Merge generated PDFs together
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        CombinedSubmissionData data = new CombinedSubmissionData(); // CombinedSubmissionData | 
+        Boolean wait = true; // Boolean | Wait for combined submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain)
+        try {
+            CreateCombinedSubmissionResponse result = apiInstance.combineSubmissions(data, wait);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#combineSubmissions");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **data** | [**CombinedSubmissionData**](CombinedSubmissionData.md)|  | |
+| **wait** | **Boolean**| Wait for combined submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) | [optional] [default to true] |
+
+### Return type
+
+[**CreateCombinedSubmissionResponse**](CreateCombinedSubmissionResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | combined submission created |  -  |
+| **422** | invalid request |  -  |
+| **400** | invalid JSON |  -  |
+| **401** | authentication failed |  -  |
+
+
+## copyTemplate
+
+> TemplatePreview copyTemplate(templateId, options)
+
+Copy a Template
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        CopyTemplateOptions options = new CopyTemplateOptions(); // CopyTemplateOptions | 
+        try {
+            TemplatePreview result = apiInstance.copyTemplate(templateId, options);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#copyTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **options** | [**CopyTemplateOptions**](CopyTemplateOptions.md)|  | [optional] |
+
+### Return type
+
+[**TemplatePreview**](TemplatePreview.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | copy template success |  -  |
+| **404** | folder not found |  -  |
+
+
+## createCustomFileFromUpload
+
+> CreateCustomFileResponse createCustomFileFromUpload(data)
+
+Create a new custom file from a cached presign upload
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        CreateCustomFileData data = new CreateCustomFileData(); // CreateCustomFileData | 
+        try {
+            CreateCustomFileResponse result = apiInstance.createCustomFileFromUpload(data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#createCustomFileFromUpload");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **data** | [**CreateCustomFileData**](CreateCustomFileData.md)|  | |
+
+### Return type
+
+[**CreateCustomFileResponse**](CreateCustomFileResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | returns the custom file |  -  |
+| **401** | authentication failed |  -  |
+
+
+## createDataRequestEvent
+
+> CreateSubmissionDataRequestEventResponse createDataRequestEvent(dataRequestId, event)
+
+Creates a new event for emailing a signee a request for signature
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String dataRequestId = "drq_1234567890abcdef01"; // String | 
+        CreateSubmissionDataRequestEventRequest event = new CreateSubmissionDataRequestEventRequest(); // CreateSubmissionDataRequestEventRequest | 
+        try {
+            CreateSubmissionDataRequestEventResponse result = apiInstance.createDataRequestEvent(dataRequestId, event);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#createDataRequestEvent");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **dataRequestId** | **String**|  | |
+| **event** | [**CreateSubmissionDataRequestEventRequest**](CreateSubmissionDataRequestEventRequest.md)|  | |
+
+### Return type
+
+[**CreateSubmissionDataRequestEventResponse**](CreateSubmissionDataRequestEventResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | event created |  -  |
+| **401** | authentication failed |  -  |
+| **422** | message recipient must not be blank |  -  |
+
+
+## createDataRequestToken
+
+> CreateSubmissionDataRequestTokenResponse createDataRequestToken(dataRequestId, type)
+
+Creates a new data request token for form authentication
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String dataRequestId = "drq_1234567890abcdef01"; // String | 
+        String type = "api"; // String | 
+        try {
+            CreateSubmissionDataRequestTokenResponse result = apiInstance.createDataRequestToken(dataRequestId, type);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#createDataRequestToken");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **dataRequestId** | **String**|  | |
+| **type** | **String**|  | [optional] [enum: api, email] |
+
+### Return type
+
+[**CreateSubmissionDataRequestTokenResponse**](CreateSubmissionDataRequestTokenResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | token created |  -  |
+| **401** | authentication failed |  -  |
+| **422** | invalid request |  -  |
+
+
+## createFolder
+
+> Folder createFolder(data)
+
+Create a folder
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        CreateFolderData data = new CreateFolderData(); // CreateFolderData | 
+        try {
+            Folder result = apiInstance.createFolder(data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#createFolder");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **data** | [**CreateFolderData**](CreateFolderData.md)|  | |
+
+### Return type
+
+[**Folder**](Folder.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **422** | name already exist |  -  |
+| **404** | parent folder doesn&#39;t exist |  -  |
+| **200** | folder created inside another folder |  -  |
+| **401** | authentication failed |  -  |
+
+
+## createHTMLTemplate
+
+> TemplatePreview createHTMLTemplate(data)
+
+Create a new HTML template
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        CreateHtmlTemplate data = new CreateHtmlTemplate(); // CreateHtmlTemplate | 
+        try {
+            TemplatePreview result = apiInstance.createHTMLTemplate(data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#createHTMLTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **data** | [**CreateHtmlTemplate**](CreateHtmlTemplate.md)|  | |
+
+### Return type
+
+[**TemplatePreview**](TemplatePreview.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | returns a created template |  -  |
+| **401** | authentication failed |  -  |
+
+
+## createPDFTemplate
+
+> TemplatePreview createPDFTemplate(templateDocument, templateName, wait, templateDescription, templateParentFolderId)
+
+Create a new PDF template with a form POST file upload
+
+### Example
+
+```java
+import java.io.File;
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        File templateDocument = new File("/path/to/file"); // File | 
+        String templateName = "templateName_example"; // String | 
+        Boolean wait = true; // Boolean | Wait for template document to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain)
+        String templateDescription = "templateDescription_example"; // String | 
+        String templateParentFolderId = "templateParentFolderId_example"; // String | 
+        try {
+            TemplatePreview result = apiInstance.createPDFTemplate(templateDocument, templateName, wait, templateDescription, templateParentFolderId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#createPDFTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateDocument** | **File**|  | |
+| **templateName** | **String**|  | |
+| **wait** | **Boolean**| Wait for template document to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) | [optional] [default to true] |
+| **templateDescription** | **String**|  | [optional] |
+| **templateParentFolderId** | **String**|  | [optional] |
+
+### Return type
+
+[**TemplatePreview**](TemplatePreview.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: multipart/form-data
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | returns a pending template |  -  |
+| **401** | authentication failed |  -  |
+
+
+## createPDFTemplateFromUpload
+
+> TemplatePreview createPDFTemplateFromUpload(data)
+
+Create a new PDF template from a cached presign upload
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        CreatePdfTemplate data = new CreatePdfTemplate(); // CreatePdfTemplate | 
+        try {
+            TemplatePreview result = apiInstance.createPDFTemplateFromUpload(data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#createPDFTemplateFromUpload");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **data** | [**CreatePdfTemplate**](CreatePdfTemplate.md)|  | |
+
+### Return type
+
+[**TemplatePreview**](TemplatePreview.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | returns a pending template |  -  |
+| **401** | authentication failed |  -  |
+
+
+## deleteFolder
+
+> Folder deleteFolder(folderId)
+
+Delete a folder
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String folderId = "fld_1234567890abcdef01"; // String | 
+        try {
+            Folder result = apiInstance.deleteFolder(folderId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#deleteFolder");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **folderId** | **String**|  | |
+
+### Return type
+
+[**Folder**](Folder.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **404** | folder doesn&#39;t exist |  -  |
+| **422** | folder has contents |  -  |
+| **200** | folder is empty |  -  |
+| **401** | authentication failed |  -  |
+
+
+## deleteTemplate
+
+> SuccessMultipleErrorsResponse deleteTemplate(templateId)
+
+Delete a template
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        try {
+            SuccessMultipleErrorsResponse result = apiInstance.deleteTemplate(templateId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#deleteTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+
+### Return type
+
+[**SuccessMultipleErrorsResponse**](SuccessMultipleErrorsResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | template deleted |  -  |
+| **404** | template not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## expireCombinedSubmission
+
+> CombinedSubmission expireCombinedSubmission(combinedSubmissionId)
+
+Expire a combined submission
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String combinedSubmissionId = "com_1234567890abcdef01"; // String | 
+        try {
+            CombinedSubmission result = apiInstance.expireCombinedSubmission(combinedSubmissionId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#expireCombinedSubmission");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **combinedSubmissionId** | **String**|  | |
+
+### Return type
+
+[**CombinedSubmission**](CombinedSubmission.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | submission was expired |  -  |
+| **404** | combined submission not found |  -  |
+| **403** | test API token used |  -  |
+| **401** | authentication failed |  -  |
+
+
+## expireSubmission
+
+> SubmissionPreview expireSubmission(submissionId)
+
+Expire a PDF submission
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String submissionId = "sub_1234567890abcdef01"; // String | 
+        try {
+            SubmissionPreview result = apiInstance.expireSubmission(submissionId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#expireSubmission");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **submissionId** | **String**|  | |
+
+### Return type
+
+[**SubmissionPreview**](SubmissionPreview.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | submission was expired |  -  |
+| **404** | submission not found |  -  |
+| **401** | authentication failed |  -  |
+| **403** | test API token used |  -  |
+
+
+## generatePdf
+
+> CreateSubmissionResponse generatePdf(templateId, submission, wait)
+
+Generates a new PDF
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        CreatePdfSubmissionData submission = new CreatePdfSubmissionData(); // CreatePdfSubmissionData | 
+        Boolean wait = true; // Boolean | Wait for submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain)
+        try {
+            CreateSubmissionResponse result = apiInstance.generatePdf(templateId, submission, wait);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#generatePdf");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **submission** | [**CreatePdfSubmissionData**](CreatePdfSubmissionData.md)|  | |
+| **wait** | **Boolean**| Wait for submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) | [optional] [default to true] |
+
+### Return type
+
+[**CreateSubmissionResponse**](CreateSubmissionResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | submission created |  -  |
+| **422** | invalid request |  -  |
+| **401** | authentication failed |  -  |
+
+
+## generatePdfForHtmlTemplate
+
+> CreateSubmissionResponse generatePdfForHtmlTemplate(templateId, submission, wait)
+
+Generates a new PDF for an HTML template
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_HTML567890abcdef01"; // String | 
+        CreateHtmlSubmissionData submission = new CreateHtmlSubmissionData(); // CreateHtmlSubmissionData | 
+        Boolean wait = true; // Boolean | Wait for submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain)
+        try {
+            CreateSubmissionResponse result = apiInstance.generatePdfForHtmlTemplate(templateId, submission, wait);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#generatePdfForHtmlTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **submission** | [**CreateHtmlSubmissionData**](CreateHtmlSubmissionData.md)|  | |
+| **wait** | **Boolean**| Wait for submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) | [optional] [default to true] |
+
+### Return type
+
+[**CreateSubmissionResponse**](CreateSubmissionResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **201** | submission created |  -  |
+
+
+## generatePreview
+
+> SuccessErrorResponse generatePreview(submissionId)
+
+Generated a preview PDF for partially completed data requests
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String submissionId = "sub_1234567890abcdef01"; // String | 
+        try {
+            SuccessErrorResponse result = apiInstance.generatePreview(submissionId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#generatePreview");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **submissionId** | **String**|  | |
+
+### Return type
+
+[**SuccessErrorResponse**](SuccessErrorResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | preview was successfully requested |  -  |
+| **404** | submission not found |  -  |
+| **422** | error requesting preview |  -  |
+
+
+## getCombinedSubmission
+
+> CombinedSubmission getCombinedSubmission(combinedSubmissionId)
+
+Check the status of a combined submission (merged PDFs)
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String combinedSubmissionId = "com_1234567890abcdef01"; // String | 
+        try {
+            CombinedSubmission result = apiInstance.getCombinedSubmission(combinedSubmissionId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#getCombinedSubmission");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **combinedSubmissionId** | **String**|  | |
+
+### Return type
+
+[**CombinedSubmission**](CombinedSubmission.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | processed combined submission found |  -  |
+| **404** | combined submission not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## getDataRequest
+
+> SubmissionDataRequestShow getDataRequest(dataRequestId)
+
+Look up a submission data request
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String dataRequestId = "drq_1234567890abcdef01"; // String | 
+        try {
+            SubmissionDataRequestShow result = apiInstance.getDataRequest(dataRequestId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#getDataRequest");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **dataRequestId** | **String**|  | |
+
+### Return type
+
+[**SubmissionDataRequestShow**](SubmissionDataRequestShow.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | completed submission data request found |  -  |
+| **404** | submission data request not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## getFullTemplate
+
+> Template getFullTemplate(templateId)
+
+Fetch the full template attributes
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        try {
+            Template result = apiInstance.getFullTemplate(templateId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#getFullTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+
+### Return type
+
+[**Template**](Template.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | template found |  -  |
+| **404** | template not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## getPresignUrl
+
+> UploadPresignResponse getPresignUrl()
+
+Get a presigned URL so that you can upload a file to our AWS S3 bucket
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        try {
+            UploadPresignResponse result = apiInstance.getPresignUrl();
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#getPresignUrl");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+This endpoint does not need any parameter.
+
+### Return type
+
+[**UploadPresignResponse**](UploadPresignResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | presign URL generated |  -  |
+| **401** | authentication failed |  -  |
+
+
+## getSubmission
+
+> Submission getSubmission(submissionId, includeData)
+
+Check the status of a PDF
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String submissionId = "sub_1234567890abcdef01"; // String | 
+        Boolean includeData = true; // Boolean | 
+        try {
+            Submission result = apiInstance.getSubmission(submissionId, includeData);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#getSubmission");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **submissionId** | **String**|  | |
+| **includeData** | **Boolean**|  | [optional] |
+
+### Return type
+
+[**Submission**](Submission.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | processed submission found |  -  |
+| **404** | submission not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## getSubmissionBatch
+
+> SubmissionBatchWithSubmissions getSubmissionBatch(submissionBatchId, includeSubmissions)
+
+Check the status of a submission batch job
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String submissionBatchId = "sbb_1234567890abcdef01"; // String | 
+        Boolean includeSubmissions = true; // Boolean | 
+        try {
+            SubmissionBatchWithSubmissions result = apiInstance.getSubmissionBatch(submissionBatchId, includeSubmissions);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#getSubmissionBatch");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **submissionBatchId** | **String**|  | |
+| **includeSubmissions** | **Boolean**|  | [optional] |
+
+### Return type
+
+[**SubmissionBatchWithSubmissions**](SubmissionBatchWithSubmissions.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | processed submission batch found |  -  |
+| **404** | submission batch not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## getTemplate
+
+> TemplatePreview getTemplate(templateId)
+
+Check the status of an uploaded template
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        try {
+            TemplatePreview result = apiInstance.getTemplate(templateId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#getTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+
+### Return type
+
+[**TemplatePreview**](TemplatePreview.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | template found |  -  |
+| **404** | template not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## getTemplateSchema
+
+> JsonSchema getTemplateSchema(templateId)
+
+Fetch the JSON schema for a template
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        try {
+            JsonSchema result = apiInstance.getTemplateSchema(templateId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#getTemplateSchema");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+
+### Return type
+
+[**JsonSchema**](JsonSchema.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | template found |  -  |
+| **404** | template not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## listCombinedSubmissions
+
+> List&lt;CombinedSubmission&gt; listCombinedSubmissions(page, perPage)
+
+Get a list of all combined submissions
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        Integer page = 2; // Integer | Default: 1
+        Integer perPage = 1; // Integer | Default: 50
+        try {
+            List<CombinedSubmission> result = apiInstance.listCombinedSubmissions(page, perPage);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#listCombinedSubmissions");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **page** | **Integer**| Default: 1 | [optional] |
+| **perPage** | **Integer**| Default: 50 | [optional] |
+
+### Return type
+
+[**List&lt;CombinedSubmission&gt;**](CombinedSubmission.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | enumerate all combined submissions |  -  |
+| **401** | authentication failed |  -  |
+
+
+## listFolders
+
+> List&lt;Folder&gt; listFolders(parentFolderId)
+
+Get a list of all folders
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String parentFolderId = "fld_1234567890abcdef02"; // String | Filter By Folder Id
+        try {
+            List<Folder> result = apiInstance.listFolders(parentFolderId);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#listFolders");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **parentFolderId** | **String**| Filter By Folder Id | [optional] |
+
+### Return type
+
+[**List&lt;Folder&gt;**](Folder.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | enumerate all folders |  -  |
+| **401** | authentication failed |  -  |
+
+
+## listSubmissions
+
+> ListSubmissionsResponse listSubmissions(cursor, limit, createdAfter, createdBefore, type, includeData)
+
+List all submissions
+
+### Example
+
+```java
+import java.math.BigDecimal;
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String cursor = "sub_1234567890abcdef12"; // String | 
+        BigDecimal limit = new BigDecimal("3"); // BigDecimal | 
+        String createdAfter = "2019-01-01T09:00:00-05:00"; // String | 
+        String createdBefore = "2020-01-01T09:00:00.000+0200"; // String | 
+        String type = "test"; // String | 
+        Boolean includeData = true; // Boolean | 
+        try {
+            ListSubmissionsResponse result = apiInstance.listSubmissions(cursor, limit, createdAfter, createdBefore, type, includeData);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#listSubmissions");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **cursor** | **String**|  | [optional] |
+| **limit** | **BigDecimal**|  | [optional] |
+| **createdAfter** | **String**|  | [optional] |
+| **createdBefore** | **String**|  | [optional] |
+| **type** | **String**|  | [optional] |
+| **includeData** | **Boolean**|  | [optional] |
+
+### Return type
+
+[**ListSubmissionsResponse**](ListSubmissionsResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | listing submissions |  -  |
+| **422** | invalid type |  -  |
+| **401** | authentication failed |  -  |
+
+
+## listTemplateSubmissions
+
+> ListSubmissionsResponse listTemplateSubmissions(templateId, cursor, limit, createdAfter, createdBefore, type, includeData)
+
+List all submissions for a given template
+
+### Example
+
+```java
+import java.math.BigDecimal;
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef02"; // String | 
+        String cursor = "cursor_example"; // String | 
+        BigDecimal limit = new BigDecimal(78); // BigDecimal | 
+        String createdAfter = "createdAfter_example"; // String | 
+        String createdBefore = "createdBefore_example"; // String | 
+        String type = "type_example"; // String | 
+        Boolean includeData = true; // Boolean | 
+        try {
+            ListSubmissionsResponse result = apiInstance.listTemplateSubmissions(templateId, cursor, limit, createdAfter, createdBefore, type, includeData);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#listTemplateSubmissions");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **cursor** | **String**|  | [optional] |
+| **limit** | **BigDecimal**|  | [optional] |
+| **createdAfter** | **String**|  | [optional] |
+| **createdBefore** | **String**|  | [optional] |
+| **type** | **String**|  | [optional] |
+| **includeData** | **Boolean**|  | [optional] |
+
+### Return type
+
+[**ListSubmissionsResponse**](ListSubmissionsResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | listing submissions |  -  |
+| **404** | invalid template id |  -  |
+
+
+## listTemplates
+
+> List&lt;TemplatePreview&gt; listTemplates(query, parentFolderId, page, perPage)
+
+Get a list of all templates
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String query = "2"; // String | Search By Name
+        String parentFolderId = "fld_1234567890abcdef01"; // String | Filter By Folder Id
+        Integer page = 2; // Integer | Default: 1
+        Integer perPage = 1; // Integer | Default: 50
+        try {
+            List<TemplatePreview> result = apiInstance.listTemplates(query, parentFolderId, page, perPage);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#listTemplates");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **query** | **String**| Search By Name | [optional] |
+| **parentFolderId** | **String**| Filter By Folder Id | [optional] |
+| **page** | **Integer**| Default: 1 | [optional] |
+| **perPage** | **Integer**| Default: 50 | [optional] |
+
+### Return type
+
+[**List&lt;TemplatePreview&gt;**](TemplatePreview.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | enumerate all templates |  -  |
+| **404** | filter templates by invalid folder id |  -  |
+| **401** | authentication failed |  -  |
+
+
+## moveFolderToFolder
+
+> Folder moveFolderToFolder(folderId, data)
+
+Move a folder
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String folderId = "fld_1234567890abcdef01"; // String | 
+        MoveFolderData data = new MoveFolderData(); // MoveFolderData | 
+        try {
+            Folder result = apiInstance.moveFolderToFolder(folderId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#moveFolderToFolder");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **folderId** | **String**|  | |
+| **data** | [**MoveFolderData**](MoveFolderData.md)|  | |
+
+### Return type
+
+[**Folder**](Folder.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **404** | parent folder doesn&#39;t exist |  -  |
+| **200** | move to root folder |  -  |
+| **401** | authentication failed |  -  |
+
+
+## moveTemplateToFolder
+
+> TemplatePreview moveTemplateToFolder(templateId, data)
+
+Move Template to folder
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        MoveTemplateData data = new MoveTemplateData(); // MoveTemplateData | 
+        try {
+            TemplatePreview result = apiInstance.moveTemplateToFolder(templateId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#moveTemplateToFolder");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **data** | [**MoveTemplateData**](MoveTemplateData.md)|  | |
+
+### Return type
+
+[**TemplatePreview**](TemplatePreview.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | move template success |  -  |
+| **404** | folder not found |  -  |
+
+
+## renameFolder
+
+> Folder renameFolder(folderId, data)
+
+Rename a folder
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String folderId = "fld_1234567890abcdef01"; // String | 
+        RenameFolderData data = new RenameFolderData(); // RenameFolderData | 
+        try {
+            Folder result = apiInstance.renameFolder(folderId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#renameFolder");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **folderId** | **String**|  | |
+| **data** | [**RenameFolderData**](RenameFolderData.md)|  | |
+
+### Return type
+
+[**Folder**](Folder.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **422** | name already exist |  -  |
+| **404** | folder doesn&#39;t belong to me |  -  |
+| **200** | successful rename |  -  |
+| **401** | authentication failed |  -  |
+
+
+## testAuthentication
+
+> SuccessErrorResponse testAuthentication()
+
+Test Authentication
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        try {
+            SuccessErrorResponse result = apiInstance.testAuthentication();
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#testAuthentication");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+This endpoint does not need any parameter.
+
+### Return type
+
+[**SuccessErrorResponse**](SuccessErrorResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: Not defined
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | authentication succeeded |  -  |
+| **401** | authentication failed |  -  |
+
+
+## updateDataRequest
+
+> CreateSubmissionDataRequestResponse updateDataRequest(dataRequestId, data)
+
+Update a submission data request
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String dataRequestId = "drq_1234567890abcdef01"; // String | 
+        UpdateSubmissionDataRequestData data = new UpdateSubmissionDataRequestData(); // UpdateSubmissionDataRequestData | 
+        try {
+            CreateSubmissionDataRequestResponse result = apiInstance.updateDataRequest(dataRequestId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#updateDataRequest");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **dataRequestId** | **String**|  | |
+| **data** | [**UpdateSubmissionDataRequestData**](UpdateSubmissionDataRequestData.md)|  | |
+
+### Return type
+
+[**CreateSubmissionDataRequestResponse**](CreateSubmissionDataRequestResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | submission data request updated |  -  |
+| **422** | invalid request |  -  |
+| **404** | submission data request not found |  -  |
+| **401** | authentication failed |  -  |
+
+
+## updateTemplate
+
+> SuccessMultipleErrorsResponse updateTemplate(templateId, data)
+
+Update a Template
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef03"; // String | 
+        UpdateHtmlTemplate data = new UpdateHtmlTemplate(); // UpdateHtmlTemplate | 
+        try {
+            SuccessMultipleErrorsResponse result = apiInstance.updateTemplate(templateId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#updateTemplate");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **data** | [**UpdateHtmlTemplate**](UpdateHtmlTemplate.md)|  | |
+
+### Return type
+
+[**SuccessMultipleErrorsResponse**](SuccessMultipleErrorsResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | update template success |  -  |
+
diff --git a/docs/RenameFolderData.md b/docs/RenameFolderData.md
new file mode 100644
index 0000000..d940635
--- /dev/null
+++ b/docs/RenameFolderData.md
@@ -0,0 +1,13 @@
+
+
+# RenameFolderData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**name** | **String** |  |  |
+
+
+
diff --git a/docs/Submission.md b/docs/Submission.md
new file mode 100644
index 0000000..8a726e8
--- /dev/null
+++ b/docs/Submission.md
@@ -0,0 +1,65 @@
+
+
+# Submission
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**batchId** | **String** |  |  |
+|**dataRequests** | [**List&lt;SubmissionDataRequest&gt;**](SubmissionDataRequest.md) |  |  |
+|**editable** | **Boolean** |  |  |
+|**expired** | **Boolean** |  |  |
+|**expiresAt** | **String** |  |  |
+|**id** | **String** |  |  |
+|**jsonSchemaErrors** | **List&lt;String&gt;** |  |  |
+|**metadata** | **Object** |  |  |
+|**password** | **String** |  |  |
+|**processedAt** | **String** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**templateId** | **String** |  |  |
+|**test** | **Boolean** |  |  |
+|**truncatedText** | **Object** |  |  |
+|**pdfHash** | **String** |  |  |
+|**downloadUrl** | **String** |  |  |
+|**permanentDownloadUrl** | **String** |  |  |
+|**previewDownloadUrl** | **String** |  |  |
+|**previewGeneratedAt** | **String** |  |  |
+|**auditTrailDownloadUrl** | **String** |  |  |
+|**actions** | [**List&lt;SubmissionAction&gt;**](SubmissionAction.md) |  |  |
+|**source** | [**SourceEnum**](#SourceEnum) |  |  |
+|**referrer** | **String** |  |  |
+|**data** | **Object** |  |  |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| INVALID_DATA | &quot;invalid_data&quot; |
+| ERROR | &quot;error&quot; |
+| IMAGE_DOWNLOAD_FAILED | &quot;image_download_failed&quot; |
+| IMAGE_PROCESSING_FAILED | &quot;image_processing_failed&quot; |
+| WAITING_FOR_DATA_REQUESTS | &quot;waiting_for_data_requests&quot; |
+| SYNTAX_ERROR | &quot;syntax_error&quot; |
+| ACCOUNT_SUSPENDED | &quot;account_suspended&quot; |
+| LICENSE_REVOKED | &quot;license_revoked&quot; |
+| ACCIDENTAL | &quot;accidental&quot; |
+
+
+
+## Enum: SourceEnum
+
+| Name | Value |
+|---- | -----|
+| API | &quot;api&quot; |
+| WEB | &quot;web&quot; |
+| REPROCESS | &quot;reprocess&quot; |
+| WEBHOOK | &quot;webhook&quot; |
+
+
+
diff --git a/docs/SubmissionAction.md b/docs/SubmissionAction.md
new file mode 100644
index 0000000..44b239a
--- /dev/null
+++ b/docs/SubmissionAction.md
@@ -0,0 +1,49 @@
+
+
+# SubmissionAction
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**integrationId** | **String** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**actionType** | [**ActionTypeEnum**](#ActionTypeEnum) |  |  |
+|**actionCategory** | [**ActionCategoryEnum**](#ActionCategoryEnum) |  |  |
+|**resultData** | **Object** |  |  |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| FAILED | &quot;failed&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
+## Enum: ActionTypeEnum
+
+| Name | Value |
+|---- | -----|
+| WEBHOOK | &quot;webhook&quot; |
+| SLACK_WEBHOOK | &quot;slack_webhook&quot; |
+| EMAIL | &quot;email&quot; |
+| AWS_S3_UPLOAD | &quot;aws_s3_upload&quot; |
+
+
+
+## Enum: ActionCategoryEnum
+
+| Name | Value |
+|---- | -----|
+| NOTIFICATION | &quot;notification&quot; |
+| FILE_UPLOAD | &quot;file_upload&quot; |
+
+
+
diff --git a/docs/SubmissionBatch.md b/docs/SubmissionBatch.md
new file mode 100644
index 0000000..9f1c444
--- /dev/null
+++ b/docs/SubmissionBatch.md
@@ -0,0 +1,30 @@
+
+
+# SubmissionBatch
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**metadata** | **Object** |  |  |
+|**processedAt** | **String** |  |  |
+|**totalCount** | **Integer** |  |  |
+|**pendingCount** | **Integer** |  |  |
+|**errorCount** | **Integer** |  |  |
+|**completionPercentage** | **BigDecimal** |  |  |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/SubmissionBatchData.md b/docs/SubmissionBatchData.md
new file mode 100644
index 0000000..233f323
--- /dev/null
+++ b/docs/SubmissionBatchData.md
@@ -0,0 +1,15 @@
+
+
+# SubmissionBatchData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**metadata** | **Object** |  |  [optional] |
+|**submissions** | **List&lt;Object&gt;** |  |  |
+|**test** | **Boolean** |  |  [optional] |
+
+
+
diff --git a/docs/SubmissionBatchWithSubmissions.md b/docs/SubmissionBatchWithSubmissions.md
new file mode 100644
index 0000000..c50babf
--- /dev/null
+++ b/docs/SubmissionBatchWithSubmissions.md
@@ -0,0 +1,31 @@
+
+
+# SubmissionBatchWithSubmissions
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**metadata** | **Object** |  |  |
+|**processedAt** | **String** |  |  |
+|**totalCount** | **Integer** |  |  |
+|**pendingCount** | **Integer** |  |  |
+|**errorCount** | **Integer** |  |  |
+|**completionPercentage** | **BigDecimal** |  |  |
+|**submissions** | [**List&lt;SubmissionPreview&gt;**](SubmissionPreview.md) |  |  [optional] |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/SubmissionDataRequest.md b/docs/SubmissionDataRequest.md
new file mode 100644
index 0000000..50bde3e
--- /dev/null
+++ b/docs/SubmissionDataRequest.md
@@ -0,0 +1,69 @@
+
+
+# SubmissionDataRequest
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**email** | **String** |  |  |
+|**name** | **String** |  |  |
+|**order** | **Integer** |  |  |
+|**sortOrder** | **Integer** |  |  |
+|**fields** | **List&lt;String&gt;** |  |  |
+|**metadata** | **Object** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**viewedAt** | **String** |  |  |
+|**completedAt** | **String** |  |  |
+|**data** | **Object** |  |  |
+|**authType** | [**AuthTypeEnum**](#AuthTypeEnum) |  |  |
+|**authSecondFactorType** | [**AuthSecondFactorTypeEnum**](#AuthSecondFactorTypeEnum) |  |  |
+|**authProvider** | **String** |  |  |
+|**authSessionStartedAt** | **String** |  |  |
+|**authSessionIdHash** | **String** |  |  |
+|**authUserIdHash** | **String** |  |  |
+|**authUsernameHash** | **String** |  |  |
+|**authPhoneNumberHash** | **String** |  |  |
+|**ipAddress** | **String** |  |  |
+|**userAgent** | **String** |  |  |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| COMPLETED | &quot;completed&quot; |
+
+
+
+## Enum: AuthTypeEnum
+
+| Name | Value |
+|---- | -----|
+| NONE | &quot;none&quot; |
+| PASSWORD | &quot;password&quot; |
+| OAUTH | &quot;oauth&quot; |
+| EMAIL_LINK | &quot;email_link&quot; |
+| PHONE_NUMBER | &quot;phone_number&quot; |
+| LDAP | &quot;ldap&quot; |
+| SAML | &quot;saml&quot; |
+
+
+
+## Enum: AuthSecondFactorTypeEnum
+
+| Name | Value |
+|---- | -----|
+| NONE | &quot;none&quot; |
+| PHONE_NUMBER | &quot;phone_number&quot; |
+| TOTP | &quot;totp&quot; |
+| MOBILE_PUSH | &quot;mobile_push&quot; |
+| SECURITY_KEY | &quot;security_key&quot; |
+| FINGERPRINT | &quot;fingerprint&quot; |
+
+
+
diff --git a/docs/SubmissionDataRequestEvent.md b/docs/SubmissionDataRequestEvent.md
new file mode 100644
index 0000000..826beb9
--- /dev/null
+++ b/docs/SubmissionDataRequestEvent.md
@@ -0,0 +1,48 @@
+
+
+# SubmissionDataRequestEvent
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**submissionId** | **String** |  |  |
+|**submissionDataRequestId** | **String** |  |  |
+|**eventType** | [**EventTypeEnum**](#EventTypeEnum) |  |  |
+|**messageType** | [**MessageTypeEnum**](#MessageTypeEnum) |  |  |
+|**messageRecipient** | **String** |  |  |
+|**occurredAt** | **String** |  |  |
+
+
+
+## Enum: EventTypeEnum
+
+| Name | Value |
+|---- | -----|
+| SEND_REQUEST | &quot;send_request&quot; |
+| VIEW_REQUEST | &quot;view_request&quot; |
+| ACCEPTED_TERMS | &quot;accepted_terms&quot; |
+| DECLINE_REQUEST | &quot;decline_request&quot; |
+| SIGN_REQUEST | &quot;sign_request&quot; |
+| ALL_COMPLETED | &quot;all_completed&quot; |
+
+
+
+## Enum: MessageTypeEnum
+
+| Name | Value |
+|---- | -----|
+| EMAIL | &quot;email&quot; |
+| SMS | &quot;sms&quot; |
+| FAX | &quot;fax&quot; |
+| MAIL | &quot;mail&quot; |
+| SLACK | &quot;slack&quot; |
+| MSTEAMS | &quot;msteams&quot; |
+| DISCORD | &quot;discord&quot; |
+| TELEGRAM | &quot;telegram&quot; |
+| WHATSAPP | &quot;whatsapp&quot; |
+
+
+
diff --git a/docs/SubmissionDataRequestShow.md b/docs/SubmissionDataRequestShow.md
new file mode 100644
index 0000000..8118393
--- /dev/null
+++ b/docs/SubmissionDataRequestShow.md
@@ -0,0 +1,70 @@
+
+
+# SubmissionDataRequestShow
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**email** | **String** |  |  |
+|**name** | **String** |  |  |
+|**order** | **Integer** |  |  |
+|**sortOrder** | **Integer** |  |  |
+|**fields** | **List&lt;String&gt;** |  |  |
+|**metadata** | **Object** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**viewedAt** | **String** |  |  |
+|**completedAt** | **String** |  |  |
+|**data** | **Object** |  |  |
+|**authType** | [**AuthTypeEnum**](#AuthTypeEnum) |  |  |
+|**authSecondFactorType** | [**AuthSecondFactorTypeEnum**](#AuthSecondFactorTypeEnum) |  |  |
+|**authProvider** | **String** |  |  |
+|**authSessionStartedAt** | **String** |  |  |
+|**authSessionIdHash** | **String** |  |  |
+|**authUserIdHash** | **String** |  |  |
+|**authUsernameHash** | **String** |  |  |
+|**authPhoneNumberHash** | **String** |  |  |
+|**ipAddress** | **String** |  |  |
+|**userAgent** | **String** |  |  |
+|**submissionId** | **String** |  |  |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| COMPLETED | &quot;completed&quot; |
+
+
+
+## Enum: AuthTypeEnum
+
+| Name | Value |
+|---- | -----|
+| NONE | &quot;none&quot; |
+| PASSWORD | &quot;password&quot; |
+| OAUTH | &quot;oauth&quot; |
+| EMAIL_LINK | &quot;email_link&quot; |
+| PHONE_NUMBER | &quot;phone_number&quot; |
+| LDAP | &quot;ldap&quot; |
+| SAML | &quot;saml&quot; |
+
+
+
+## Enum: AuthSecondFactorTypeEnum
+
+| Name | Value |
+|---- | -----|
+| NONE | &quot;none&quot; |
+| PHONE_NUMBER | &quot;phone_number&quot; |
+| TOTP | &quot;totp&quot; |
+| MOBILE_PUSH | &quot;mobile_push&quot; |
+| SECURITY_KEY | &quot;security_key&quot; |
+| FINGERPRINT | &quot;fingerprint&quot; |
+
+
+
diff --git a/docs/SubmissionDataRequestToken.md b/docs/SubmissionDataRequestToken.md
new file mode 100644
index 0000000..b8a4c54
--- /dev/null
+++ b/docs/SubmissionDataRequestToken.md
@@ -0,0 +1,16 @@
+
+
+# SubmissionDataRequestToken
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**id** | **String** |  |  |
+|**secret** | **String** |  |  |
+|**expiresAt** | **String** |  |  |
+|**dataRequestUrl** | **String** |  |  |
+
+
+
diff --git a/docs/SubmissionPreview.md b/docs/SubmissionPreview.md
new file mode 100644
index 0000000..9a2a554
--- /dev/null
+++ b/docs/SubmissionPreview.md
@@ -0,0 +1,51 @@
+
+
+# SubmissionPreview
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**batchId** | **String** |  |  |
+|**dataRequests** | [**List&lt;SubmissionDataRequest&gt;**](SubmissionDataRequest.md) |  |  |
+|**editable** | **Boolean** |  |  |
+|**expired** | **Boolean** |  |  |
+|**expiresAt** | **String** |  |  |
+|**id** | **String** |  |  |
+|**jsonSchemaErrors** | **List&lt;String&gt;** |  |  |
+|**metadata** | **Object** |  |  |
+|**password** | **String** |  |  |
+|**processedAt** | **String** |  |  |
+|**state** | [**StateEnum**](#StateEnum) |  |  |
+|**templateId** | **String** |  |  |
+|**test** | **Boolean** |  |  |
+|**truncatedText** | **Object** |  |  |
+|**pdfHash** | **String** |  |  |
+|**downloadUrl** | **String** |  |  |
+|**permanentDownloadUrl** | **String** |  |  |
+|**previewDownloadUrl** | **String** |  |  |
+|**previewGeneratedAt** | **String** |  |  |
+|**auditTrailDownloadUrl** | **String** |  |  |
+|**actions** | [**List&lt;SubmissionAction&gt;**](SubmissionAction.md) |  |  |
+
+
+
+## Enum: StateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| INVALID_DATA | &quot;invalid_data&quot; |
+| ERROR | &quot;error&quot; |
+| IMAGE_DOWNLOAD_FAILED | &quot;image_download_failed&quot; |
+| IMAGE_PROCESSING_FAILED | &quot;image_processing_failed&quot; |
+| WAITING_FOR_DATA_REQUESTS | &quot;waiting_for_data_requests&quot; |
+| SYNTAX_ERROR | &quot;syntax_error&quot; |
+| ACCOUNT_SUSPENDED | &quot;account_suspended&quot; |
+| LICENSE_REVOKED | &quot;license_revoked&quot; |
+| ACCIDENTAL | &quot;accidental&quot; |
+
+
+
diff --git a/docs/SuccessErrorResponse.md b/docs/SuccessErrorResponse.md
new file mode 100644
index 0000000..9cb286d
--- /dev/null
+++ b/docs/SuccessErrorResponse.md
@@ -0,0 +1,23 @@
+
+
+# SuccessErrorResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**error** | **String** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/SuccessMultipleErrorsResponse.md b/docs/SuccessMultipleErrorsResponse.md
new file mode 100644
index 0000000..af8eba7
--- /dev/null
+++ b/docs/SuccessMultipleErrorsResponse.md
@@ -0,0 +1,23 @@
+
+
+# SuccessMultipleErrorsResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/Template.md b/docs/Template.md
new file mode 100644
index 0000000..dec9b8e
--- /dev/null
+++ b/docs/Template.md
@@ -0,0 +1,79 @@
+
+
+# Template
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**addDataRequestSubmissionIdFooters** | **Boolean** |  |  |
+|**allowAdditionalProperties** | **Boolean** |  |  |
+|**description** | **String** |  |  |
+|**documentFilename** | **String** |  |  |
+|**documentMd5** | **String** |  |  |
+|**documentParseError** | **Boolean** |  |  |
+|**documentProcessed** | **Boolean** |  |  |
+|**documentState** | [**DocumentStateEnum**](#DocumentStateEnum) |  |  |
+|**documentUrl** | **String** |  |  |
+|**editableSubmissions** | **Boolean** |  |  |
+|**embedDomains** | **String** |  |  |
+|**encryptPdfsPassword** | **String** |  |  |
+|**encryptPdfs** | **Boolean** |  |  |
+|**expirationInterval** | **String** |  |  |
+|**expireAfter** | **Integer** |  |  |
+|**expireSubmissions** | **Boolean** |  |  |
+|**externalPredefinedFieldsTemplateId** | **String** |  |  |
+|**externalPredefinedFieldsTemplateName** | **String** |  |  |
+|**firstTemplate** | **Boolean** |  |  |
+|**id** | **String** |  |  |
+|**locked** | **Boolean** |  |  |
+|**mergeAuditTrailPdf** | **Boolean** |  |  |
+|**name** | **String** |  |  |
+|**pageCount** | **Integer** |  |  |
+|**pageDimensions** | **List&lt;List&lt;BigDecimal&gt;&gt;** |  |  |
+|**parentFolderId** | **String** |  |  |
+|**path** | **String** |  |  |
+|**permanentDocumentUrl** | **String** |  |  |
+|**publicSubmissions** | **Boolean** |  |  |
+|**publicWebForm** | **Boolean** |  |  |
+|**redirectUrl** | **String** |  |  |
+|**slackWebhookUrl** | **String** |  |  |
+|**templateType** | [**TemplateTypeEnum**](#TemplateTypeEnum) |  |  |
+|**updatedAt** | **String** |  |  |
+|**webhookUrl** | **String** |  |  |
+|**demo** | **Boolean** |  |  |
+|**defaults** | **Object** |  |  |
+|**fieldOrder** | **List&lt;List&lt;BigDecimal&gt;&gt;** |  |  |
+|**fields** | **Object** |  |  |
+|**footerHtml** | **String** |  |  |
+|**headerHtml** | **String** |  |  |
+|**htmlEngineOptions** | **Object** |  |  |
+|**html** | **String** |  |  |
+|**predefinedFields** | **List&lt;Object&gt;** |  |  |
+|**scss** | **String** |  |  |
+|**sharedFieldData** | **Object** |  |  |
+
+
+
+## Enum: DocumentStateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| PASSWORD_REQUIRED | &quot;password_required&quot; |
+| MALFORMED_PDF | &quot;malformed_pdf&quot; |
+| UNKNOWN_ERROR | &quot;unknown_error&quot; |
+
+
+
+## Enum: TemplateTypeEnum
+
+| Name | Value |
+|---- | -----|
+| PDF | &quot;pdf&quot; |
+| HTML | &quot;html&quot; |
+
+
+
diff --git a/docs/TemplateAddFieldsResponse.md b/docs/TemplateAddFieldsResponse.md
new file mode 100644
index 0000000..4020f7a
--- /dev/null
+++ b/docs/TemplateAddFieldsResponse.md
@@ -0,0 +1,24 @@
+
+
+# TemplateAddFieldsResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+|**newFieldIds** | **List&lt;Integer&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/TemplatePreview.md b/docs/TemplatePreview.md
new file mode 100644
index 0000000..db9d10f
--- /dev/null
+++ b/docs/TemplatePreview.md
@@ -0,0 +1,69 @@
+
+
+# TemplatePreview
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**addDataRequestSubmissionIdFooters** | **Boolean** |  |  |
+|**allowAdditionalProperties** | **Boolean** |  |  |
+|**description** | **String** |  |  |
+|**documentFilename** | **String** |  |  |
+|**documentMd5** | **String** |  |  |
+|**documentParseError** | **Boolean** |  |  |
+|**documentProcessed** | **Boolean** |  |  |
+|**documentState** | [**DocumentStateEnum**](#DocumentStateEnum) |  |  |
+|**documentUrl** | **String** |  |  |
+|**editableSubmissions** | **Boolean** |  |  |
+|**embedDomains** | **String** |  |  |
+|**encryptPdfsPassword** | **String** |  |  |
+|**encryptPdfs** | **Boolean** |  |  |
+|**expirationInterval** | **String** |  |  |
+|**expireAfter** | **Integer** |  |  |
+|**expireSubmissions** | **Boolean** |  |  |
+|**externalPredefinedFieldsTemplateId** | **String** |  |  |
+|**externalPredefinedFieldsTemplateName** | **String** |  |  |
+|**firstTemplate** | **Boolean** |  |  |
+|**id** | **String** |  |  |
+|**locked** | **Boolean** |  |  |
+|**mergeAuditTrailPdf** | **Boolean** |  |  |
+|**name** | **String** |  |  |
+|**pageCount** | **Integer** |  |  |
+|**pageDimensions** | **List&lt;List&lt;BigDecimal&gt;&gt;** |  |  |
+|**parentFolderId** | **String** |  |  |
+|**path** | **String** |  |  |
+|**permanentDocumentUrl** | **String** |  |  |
+|**publicSubmissions** | **Boolean** |  |  |
+|**publicWebForm** | **Boolean** |  |  |
+|**redirectUrl** | **String** |  |  |
+|**slackWebhookUrl** | **String** |  |  |
+|**templateType** | [**TemplateTypeEnum**](#TemplateTypeEnum) |  |  |
+|**updatedAt** | **String** |  |  |
+|**webhookUrl** | **String** |  |  |
+|**demo** | **Boolean** |  |  |
+
+
+
+## Enum: DocumentStateEnum
+
+| Name | Value |
+|---- | -----|
+| PENDING | &quot;pending&quot; |
+| PROCESSED | &quot;processed&quot; |
+| PASSWORD_REQUIRED | &quot;password_required&quot; |
+| MALFORMED_PDF | &quot;malformed_pdf&quot; |
+| UNKNOWN_ERROR | &quot;unknown_error&quot; |
+
+
+
+## Enum: TemplateTypeEnum
+
+| Name | Value |
+|---- | -----|
+| PDF | &quot;pdf&quot; |
+| HTML | &quot;html&quot; |
+
+
+
diff --git a/docs/UpdateHtmlTemplate.md b/docs/UpdateHtmlTemplate.md
new file mode 100644
index 0000000..70849ac
--- /dev/null
+++ b/docs/UpdateHtmlTemplate.md
@@ -0,0 +1,13 @@
+
+
+# UpdateHtmlTemplate
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**template** | **Object** |  |  |
+
+
+
diff --git a/docs/UpdateSubmissionDataRequestData.md b/docs/UpdateSubmissionDataRequestData.md
new file mode 100644
index 0000000..0185434
--- /dev/null
+++ b/docs/UpdateSubmissionDataRequestData.md
@@ -0,0 +1,30 @@
+
+
+# UpdateSubmissionDataRequestData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**authType** | [**AuthTypeEnum**](#AuthTypeEnum) |  |  [optional] |
+|**fields** | **List&lt;String&gt;** |  |  [optional] |
+|**metadata** | **Object** |  |  [optional] |
+|**order** | **Integer** |  |  [optional] |
+
+
+
+## Enum: AuthTypeEnum
+
+| Name | Value |
+|---- | -----|
+| NONE | &quot;none&quot; |
+| PASSWORD | &quot;password&quot; |
+| OAUTH | &quot;oauth&quot; |
+| EMAIL_LINK | &quot;email_link&quot; |
+| PHONE_NUMBER | &quot;phone_number&quot; |
+| LDAP | &quot;ldap&quot; |
+| SAML | &quot;saml&quot; |
+
+
+
diff --git a/docs/UploadPresignResponse.md b/docs/UploadPresignResponse.md
new file mode 100644
index 0000000..9f6ceb9
--- /dev/null
+++ b/docs/UploadPresignResponse.md
@@ -0,0 +1,24 @@
+
+
+# UploadPresignResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**fields** | **Object** |  |  |
+|**headers** | **Object** |  |  |
+|**url** | **String** |  |  |
+|**method** | [**MethodEnum**](#MethodEnum) |  |  [optional] |
+
+
+
+## Enum: MethodEnum
+
+| Name | Value |
+|---- | -----|
+| POST | &quot;post&quot; |
+
+
+
diff --git a/git_push.sh b/git_push.sh
new file mode 100644
index 0000000..f53a75d
--- /dev/null
+++ b/git_push.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
+#
+# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
+
+git_user_id=$1
+git_repo_id=$2
+release_note=$3
+git_host=$4
+
+if [ "$git_host" = "" ]; then
+    git_host="github.com"
+    echo "[INFO] No command line input provided. Set \$git_host to $git_host"
+fi
+
+if [ "$git_user_id" = "" ]; then
+    git_user_id="GIT_USER_ID"
+    echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
+fi
+
+if [ "$git_repo_id" = "" ]; then
+    git_repo_id="GIT_REPO_ID"
+    echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
+fi
+
+if [ "$release_note" = "" ]; then
+    release_note="Minor update"
+    echo "[INFO] No command line input provided. Set \$release_note to $release_note"
+fi
+
+# Initialize the local directory as a Git repository
+git init
+
+# Adds the files in the local repository and stages them for commit.
+git add .
+
+# Commits the tracked changes and prepares them to be pushed to a remote repository.
+git commit -m "$release_note"
+
+# Sets the new remote
+git_remote=$(git remote)
+if [ "$git_remote" = "" ]; then # git remote not defined
+
+    if [ "$GIT_TOKEN" = "" ]; then
+        echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
+        git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
+    else
+        git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
+    fi
+
+fi
+
+git pull origin master
+
+# Pushes (Forces) the changes in the local repository up to the remote repository
+echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
+git push origin master 2>&1 | grep -v 'To https'
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..a340857
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,6 @@
+# This file is automatically generated by OpenAPI Generator (https://github.com/openAPITools/openapi-generator).
+# To include other gradle properties as part of the code generation process, please use the `gradleProperties` option.
+#
+# Gradle properties reference: https://docs.gradle.org/current/userguide/build_environment.html#sec:gradle_configuration_properties
+# For example, uncomment below to build for Android
+#target = android
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..e6441136f3d4ba8a0da8d277868979cfbc8ad796
GIT binary patch
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..b82aa23
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git a/gradlew b/gradlew
new file mode 100755
index 0000000..9d0ce63
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,249 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# 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
+#
+#      https://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,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+#   Gradle start up script for POSIX generated by Gradle.
+#
+#   Important for running:
+#
+#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+#       noncompliant, but you have some other compliant shell such as ksh or
+#       bash, then to run this script, type that shell name before the whole
+#       command line, like:
+#
+#           ksh Gradle
+#
+#       Busybox and similar reduced shells will NOT work, because this script
+#       requires all of these POSIX shell features:
+#         * functions;
+#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+#         * compound commands having a testable exit status, especially «case»;
+#         * various built-in commands including «command», «set», and «ulimit».
+#
+#   Important for patching:
+#
+#   (2) This script targets any POSIX shell, so it avoids extensions provided
+#       by Bash, Ksh, etc; in particular arrays are avoided.
+#
+#       The "traditional" practice of packing multiple parameters into a
+#       space-separated string is a well documented source of bugs and security
+#       problems, so this is (mostly) avoided, by progressively accumulating
+#       options in "$@", and eventually passing that to Java.
+#
+#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+#       see the in-line comments for details.
+#
+#       There are tweaks for specific operating systems such as AIX, CygWin,
+#       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
+#       within the Gradle project.
+#
+#       You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
+[ -h "$app_path" ]
+do
+ls=$( ls -ld "$app_path" )
+link=${ls#*' -> '}
+case $link in             #(
+/*)   app_path=$link ;; #(
+*)    app_path=$APP_HOME$link ;;
+esac
+done
+
+# This is normally unused
+# 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
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+echo "$*"
+} >&2
+
+die () {
+echo
+echo "$*"
+echo
+exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in                #(
+CYGWIN* )         cygwin=true  ;; #(
+Darwin* )         darwin=true  ;; #(
+MSYS* | MINGW* )  msys=true    ;; #(
+NONSTOP* )        nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+# IBM's JDK on AIX uses strange locations for the executables
+JAVACMD=$JAVA_HOME/jre/sh/java
+else
+JAVACMD=$JAVA_HOME/bin/java
+fi
+if [ ! -x "$JAVACMD" ] ; then
+die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+else
+JAVACMD=java
+if ! command -v java >/dev/null 2>&1
+then
+die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+case $MAX_FD in #(
+max*)
+# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+# shellcheck disable=SC2039,SC3045
+MAX_FD=$( ulimit -H -n ) ||
+warn "Could not query maximum file descriptor limit"
+esac
+case $MAX_FD in  #(
+'' | soft) :;; #(
+*)
+# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+# shellcheck disable=SC2039,SC3045
+ulimit -n "$MAX_FD" ||
+warn "Could not set maximum file descriptor limit to $MAX_FD"
+esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+#   * args from the command line
+#   * the main class name
+#   * -classpath
+#   * -D...appname settings
+#   * --module-path (only if needed)
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+# Now convert the arguments - kludge to limit ourselves to /bin/sh
+for arg do
+if
+case $arg in                                #(
+-*)   false ;;                            # don't mess with options #(
+/?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
+[ -e "$t" ] ;;                      #(
+*)    false ;;
+esac
+then
+arg=$( cygpath --path --ignore --mixed "$arg" )
+fi
+# Roll the args list around exactly as many times as the number of
+# args, so each arg winds up back in the position where it started, but
+# possibly modified.
+#
+# NB: a `for` loop captures its iteration list before it begins, so
+# changing the positional parameters here affects neither the number of
+# iterations, nor the values presented in `arg`.
+shift                   # remove old arg
+set -- "$@" "$arg"      # push replacement arg
+done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+#     and any embedded shellness will be escaped.
+#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+#     treated as '${Hostname}' itself on the command line.
+
+set -- \
+"-Dorg.gradle.appname=$APP_BASE_NAME" \
+-classpath "$CLASSPATH" \
+org.gradle.wrapper.GradleWrapperMain \
+"$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+#   set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+xargs -n1 |
+sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+tr '\n' ' '
+)" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..25da30d
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem      https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+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
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+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
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..4aac798
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,341 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.docspring</groupId>
+    <artifactId>DocSpring</artifactId>
+    <packaging>jar</packaging>
+    <name>DocSpring</name>
+    <version>2.0.0</version>
+    <url>https://github.com/DocSpring/docspring-java</url>
+    <description>Java API client for the DocSpring PDF generation service</description>
+    <scm>
+        <connection>scm:git:git@github.com:DocSpring/docspring-java.git</connection>
+        <developerConnection>scm:git:git@github.com:DocSpring/docspring-java.git</developerConnection>
+        <url>https://github.com/DocSpring/docspring-java</url>
+    </scm>
+
+    <licenses>
+        <license>
+            <name>MIT</name>
+            <url>https://opensource.org/licenses/MIT</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <developers>
+        <developer>
+            <name>DocSpring</name>
+            <email>support@docspring.com</email>
+            <organization>DocSpring</organization>
+            <organizationUrl>https://docspring.com</organizationUrl>
+        </developer>
+    </developers>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-enforcer-plugin</artifactId>
+                <version>3.0.0</version>
+                <executions>
+                    <execution>
+                        <id>enforce-maven</id>
+                        <goals>
+                            <goal>enforce</goal>
+                        </goals>
+                        <configuration>
+                            <rules>
+                                <requireMavenVersion>
+                                    <version>2.2.0</version>
+                                </requireMavenVersion>
+                            </rules>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>3.0.0-M5</version>
+                <configuration>
+                    <systemPropertyVariables>
+                        <property>
+                            <name>loggerPath</name>
+                            <value>conf/log4j.properties</value>
+                        </property>
+                    </systemPropertyVariables>
+                    <argLine>-Xms512m -Xmx1500m</argLine>
+                    <parallel>methods</parallel>
+                    <threadCount>10</threadCount>
+                    <trimStackTrace>false</trimStackTrace>
+                </configuration>
+            </plugin>
+            <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- attach test jar -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>3.2.2</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <version>3.3.0</version>
+                <executions>
+                    <execution>
+                        <id>add_sources</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>src/main/java</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>add_test_sources</id>
+                        <phase>generate-test-sources</phase>
+                        <goals>
+                            <goal>add-test-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>src/test/java</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>3.10.1</version>
+                <configuration>
+                    <source>1.8</source>
+                    <target>1.8</target>
+                    <fork>true</fork>
+                    <meminitial>128m</meminitial>
+                    <maxmem>512m</maxmem>
+                    <compilerArgs>
+                        <arg>-Xlint:all</arg>
+                        <arg>-J-Xss4m</arg><!-- Compiling the generated JSON.java file may require larger stack size. -->
+                    </compilerArgs>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <version>3.3.2</version>
+                <executions>
+                    <execution>
+                        <id>attach-javadocs</id>
+                        <goals>
+                            <goal>jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <doclint>none</doclint>
+                    <source>1.8</source>
+                    <tags>
+                        <tag>
+                            <name>http.response.details</name>
+                            <placement>a</placement>
+                            <head>Http Response Details:</head>
+                        </tag>
+                    </tags>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-source-plugin</artifactId>
+                <version>3.2.0</version>
+                <executions>
+                    <execution>
+                        <id>attach-sources</id>
+                        <goals>
+                            <goal>jar-no-fork</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- Use spotless plugin to automatically format code, remove unused import, etc
+                 To apply changes directly to the file, run `mvn spotless:apply`
+                 Ref: https://github.com/diffplug/spotless/tree/main/plugin-maven
+            -->
+            <plugin>
+              <groupId>com.diffplug.spotless</groupId>
+              <artifactId>spotless-maven-plugin</artifactId>
+              <version>${spotless.version}</version>
+              <configuration>
+                <formats>
+                  <!-- you can define as many formats as you want, each is independent -->
+                  <format>
+                    <!-- define the files to apply to -->
+                    <includes>
+                      <include>.gitignore</include>
+                    </includes>
+                    <!-- define the steps to apply to those files -->
+                    <trimTrailingWhitespace/>
+                    <endWithNewline/>
+                    <indent>
+                      <spaces>true</spaces> <!-- or <tabs>true</tabs> -->
+                      <spacesPerTab>4</spacesPerTab> <!-- optional, default is 4 -->
+                    </indent>
+                  </format>
+                </formats>
+                <!-- define a language-specific format -->
+                <java>
+                  <!-- no need to specify files, inferred automatically, but you can if you want -->
+
+                  <!-- apply a specific flavor of google-java-format and reflow long strings -->
+                  <googleJavaFormat>
+                    <version>1.8</version>
+                    <style>AOSP</style>
+                    <reflowLongStrings>true</reflowLongStrings>
+                  </googleJavaFormat>
+                  <removeUnusedImports/>
+                  <importOrder/>
+                </java>
+              </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+    <profiles>
+        <profile>
+            <id>sign-artifacts</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-gpg-plugin</artifactId>
+                        <version>3.0.1</version>
+                        <executions>
+                            <execution>
+                                <id>sign-artifacts</id>
+                                <phase>verify</phase>
+                                <goals>
+                                    <goal>sign</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+    <dependencies>
+
+        <!-- @Nullable annotation -->
+        <dependency>
+            <groupId>com.google.code.findbugs</groupId>
+            <artifactId>jsr305</artifactId>
+            <version>3.0.2</version>
+        </dependency>
+
+        <!-- HTTP client: jersey-client -->
+        <dependency>
+            <groupId>org.glassfish.jersey.core</groupId>
+            <artifactId>jersey-client</artifactId>
+            <version>${jersey-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.inject</groupId>
+            <artifactId>jersey-hk2</artifactId>
+            <version>${jersey-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.media</groupId>
+            <artifactId>jersey-media-multipart</artifactId>
+            <version>${jersey-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.media</groupId>
+            <artifactId>jersey-media-json-jackson</artifactId>
+            <version>${jersey-version}</version>
+        </dependency>
+
+        <!-- JSON processing: jackson -->
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-core</artifactId>
+            <version>${jackson-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-annotations</artifactId>
+            <version>${jackson-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.core</groupId>
+            <artifactId>jackson-databind</artifactId>
+            <version>${jackson-databind-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.openapitools</groupId>
+            <artifactId>jackson-databind-nullable</artifactId>
+            <version>${jackson-databind-nullable-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jsr310</artifactId>
+            <version>${jackson-version}</version>
+        </dependency>
+        <dependency>
+            <groupId>jakarta.annotation</groupId>
+            <artifactId>jakarta.annotation-api</artifactId>
+            <version>${jakarta-annotation-version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.connectors</groupId>
+            <artifactId>jersey-apache-connector</artifactId>
+            <version>${jersey-version}</version>
+        </dependency>
+
+        <!-- test dependencies -->
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-api</artifactId>
+            <version>${junit-version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <jersey-version>2.37</jersey-version>
+        <jackson-version>2.17.1</jackson-version>
+        <jackson-databind-version>2.17.1</jackson-databind-version>
+        <jackson-databind-nullable-version>0.2.6</jackson-databind-nullable-version>
+        <jakarta-annotation-version>1.3.5</jakarta-annotation-version>
+        <beanvalidation-version>2.0.2</beanvalidation-version>
+        <junit-version>5.10.0</junit-version>
+        <spotless.version>2.21.0</spotless.version>
+    </properties>
+</project>
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..111e4e8
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+rootProject.name = "DocSpring"
\ No newline at end of file
diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..0aaffa7
--- /dev/null
+++ b/src/main/AndroidManifest.xml
@@ -0,0 +1,3 @@
+<manifest package="com.docspring" xmlns:android="http://schemas.android.com/apk/res/android">
+    <application />
+</manifest>
diff --git a/src/main/java/com/docspring/AbstractOpenApiSchema.java b/src/main/java/com/docspring/AbstractOpenApiSchema.java
new file mode 100644
index 0000000..f8bbb1f
--- /dev/null
+++ b/src/main/java/com/docspring/AbstractOpenApiSchema.java
@@ -0,0 +1,149 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.ApiException;
+import java.util.Objects;
+import java.lang.reflect.Type;
+import java.util.Map;
+import javax.ws.rs.core.GenericType;
+
+import com.fasterxml.jackson.annotation.JsonValue;
+
+/**
+ * Abstract class for oneOf,anyOf schemas defined in OpenAPI spec
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public abstract class AbstractOpenApiSchema {
+
+    // store the actual instance of the schema/object
+    private Object instance;
+
+    // is nullable
+    private Boolean isNullable;
+
+    // schema type (e.g. oneOf, anyOf)
+    private final String schemaType;
+
+    public AbstractOpenApiSchema(String schemaType, Boolean isNullable) {
+        this.schemaType = schemaType;
+        this.isNullable = isNullable;
+    }
+
+    /**
+     * Get the list of oneOf/anyOf composed schemas allowed to be stored in this object
+     *
+     * @return an instance of the actual schema/object
+     */
+    public abstract Map<String, GenericType<?>> getSchemas();
+
+    /**
+     * Get the actual instance
+     *
+     * @return an instance of the actual schema/object
+     */
+    @JsonValue
+    public Object getActualInstance() {return instance;}
+
+    /**
+     * Set the actual instance
+     *
+     * @param instance the actual instance of the schema/object
+     */
+    public void setActualInstance(Object instance) {this.instance = instance;}
+
+    /**
+     * Get the instant recursively when the schemas defined in oneOf/anyof happen to be oneOf/anyOf schema as well
+     *
+     * @return an instance of the actual schema/object
+     */
+    public Object getActualInstanceRecursively() {
+        return getActualInstanceRecursively(this);
+    }
+
+    private Object getActualInstanceRecursively(AbstractOpenApiSchema object) {
+        if (object.getActualInstance() == null) {
+            return null;
+        } else if (object.getActualInstance() instanceof AbstractOpenApiSchema) {
+            return getActualInstanceRecursively((AbstractOpenApiSchema)object.getActualInstance());
+        } else {
+            return object.getActualInstance();
+        }
+    }
+
+    /**
+     * Get the schema type (e.g. anyOf, oneOf)
+     *
+     * @return the schema type
+     */
+    public String getSchemaType() {
+        return schemaType;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("class ").append(getClass()).append(" {\n");
+        sb.append("    instance: ").append(toIndentedString(instance)).append("\n");
+        sb.append("    isNullable: ").append(toIndentedString(isNullable)).append("\n");
+        sb.append("    schemaType: ").append(toIndentedString(schemaType)).append("\n");
+        sb.append("}");
+        return sb.toString();
+    }
+
+    /**
+     * Convert the given object to string with each line indented by 4 spaces
+     * (except the first line).
+     */
+    private String toIndentedString(Object o) {
+        if (o == null) {
+            return "null";
+        }
+        return o.toString().replace("\n", "\n    ");
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        AbstractOpenApiSchema a = (AbstractOpenApiSchema) o;
+        return Objects.equals(this.instance, a.instance) &&
+            Objects.equals(this.isNullable, a.isNullable) &&
+            Objects.equals(this.schemaType, a.schemaType);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(instance, isNullable, schemaType);
+    }
+
+    /**
+     * Is nullable
+     *
+     * @return true if it's nullable
+     */
+    public Boolean isNullable() {
+        if (Boolean.TRUE.equals(isNullable)) {
+            return Boolean.TRUE;
+        } else {
+            return Boolean.FALSE;
+        }
+    }
+
+
+
+}
diff --git a/src/main/java/com/docspring/AddFieldsData.java b/src/main/java/com/docspring/AddFieldsData.java
new file mode 100644
index 0000000..0a382df
--- /dev/null
+++ b/src/main/java/com/docspring/AddFieldsData.java
@@ -0,0 +1,121 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * AddFieldsData
+ */
+@JsonPropertyOrder({
+  AddFieldsData.JSON_PROPERTY_FIELDS
+})
+@JsonTypeName("add_fields_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class AddFieldsData {
+  public static final String JSON_PROPERTY_FIELDS = "fields";
+  @javax.annotation.Nonnull
+  private List<Object> fields = new ArrayList<>();
+
+  public AddFieldsData() { 
+  }
+
+  public AddFieldsData fields(@javax.annotation.Nonnull List<Object> fields) {
+    this.fields = fields;
+    return this;
+  }
+
+  public AddFieldsData addFieldsItem(Object fieldsItem) {
+    if (this.fields == null) {
+      this.fields = new ArrayList<>();
+    }
+    this.fields.add(fieldsItem);
+    return this;
+  }
+
+  /**
+   * Get fields
+   * @return fields
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<Object> getFields() {
+    return fields;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFields(@javax.annotation.Nonnull List<Object> fields) {
+    this.fields = fields;
+  }
+
+
+  /**
+   * Return true if this add_fields_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    AddFieldsData addFieldsData = (AddFieldsData) o;
+    return Objects.equals(this.fields, addFieldsData.fields);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(fields);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class AddFieldsData {\n");
+    sb.append("    fields: ").append(toIndentedString(fields)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/ApiClient.java b/src/main/java/com/docspring/ApiClient.java
new file mode 100644
index 0000000..ffcde76
--- /dev/null
+++ b/src/main/java/com/docspring/ApiClient.java
@@ -0,0 +1,1274 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Form;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.Status;
+
+import org.glassfish.jersey.client.ClientConfig;
+import org.glassfish.jersey.client.ClientProperties;
+import org.glassfish.jersey.client.HttpUrlConnectorProvider;
+import org.glassfish.jersey.jackson.JacksonFeature;
+import org.glassfish.jersey.media.multipart.FormDataBodyPart;
+import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
+import org.glassfish.jersey.media.multipart.MultiPart;
+import org.glassfish.jersey.media.multipart.MultiPartFeature;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import java.net.URI;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.security.cert.X509Certificate;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import org.glassfish.jersey.logging.LoggingFeature;
+import java.util.AbstractMap.SimpleEntry;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Arrays;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.time.OffsetDateTime;
+
+import java.net.URLEncoder;
+
+import java.io.File;
+import java.io.UnsupportedEncodingException;
+
+import java.text.DateFormat;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.docspring.auth.Authentication;
+import com.docspring.auth.HttpBasicAuth;
+import com.docspring.auth.HttpBearerAuth;
+import com.docspring.auth.ApiKeyAuth;
+
+/**
+ * <p>ApiClient class.</p>
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class ApiClient extends JavaTimeFormatter {
+  private static final Pattern JSON_MIME_PATTERN = Pattern.compile("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$");
+
+  protected Map<String, String> defaultHeaderMap = new HashMap<>();
+  protected Map<String, String> defaultCookieMap = new HashMap<>();
+  protected String basePath = "https://sync.api.docspring.com/api/v1";
+  protected String userAgent;
+  private static final Logger log = Logger.getLogger(ApiClient.class.getName());
+
+  protected List<ServerConfiguration> servers = new ArrayList<>(Arrays.asList(
+          new ServerConfiguration(
+                  "https://sync.api.docspring.com/api/v1",
+                  "No description provided",
+                  new LinkedHashMap<>()
+          )
+  ));
+  protected Integer serverIndex = 0;
+  protected Map<String, String> serverVariables = null;
+  protected Map<String, List<ServerConfiguration>> operationServers = new HashMap<>();
+  protected Map<String, Integer> operationServerIndex = new HashMap<>();
+  protected Map<String, Map<String, String>> operationServerVariables = new HashMap<>();
+  protected boolean debugging = false;
+  protected ClientConfig clientConfig;
+  protected int connectionTimeout = 0;
+  private int readTimeout = 0;
+
+  protected Client httpClient;
+  protected JSON json;
+  protected String tempFolderPath = null;
+
+  protected Map<String, Authentication> authentications;
+  protected Map<String, String> authenticationLookup;
+
+  protected DateFormat dateFormat;
+
+  /**
+   * Constructs a new ApiClient with default parameters.
+   */
+  public ApiClient() {
+    this(null);
+  }
+
+  /**
+   * Constructs a new ApiClient with the specified authentication parameters.
+   *
+   * @param authMap A hash map containing authentication parameters.
+   */
+  public ApiClient(Map<String, Authentication> authMap) {
+    json = new JSON();
+    httpClient = buildHttpClient();
+
+    this.dateFormat = new RFC3339DateFormat();
+
+    // Set default User-Agent.
+    setUserAgent("docspring-java-2.0.0");
+
+    // Setup authentications (key: authentication name, value: authentication).
+    authentications = new HashMap<>();
+    Authentication auth = null;
+    if (authMap != null) {
+      auth = authMap.get("api_token_basic");
+    }
+    if (auth instanceof HttpBasicAuth) {
+      authentications.put("api_token_basic", auth);
+    } else {
+      authentications.put("api_token_basic", new HttpBasicAuth());
+    }
+    // Prevent the authentications from being modified.
+    authentications = Collections.unmodifiableMap(authentications);
+
+    // Setup authentication lookup (key: authentication alias, value: authentication name)
+    authenticationLookup = new HashMap<>();
+  }
+
+  /**
+   * Gets the JSON instance to do JSON serialization and deserialization.
+   *
+   * @return JSON
+   */
+  public JSON getJSON() {
+    return json;
+  }
+
+  /**
+   * <p>Getter for the field <code>httpClient</code>.</p>
+   *
+   * @return a {@link javax.ws.rs.client.Client} object.
+   */
+  public Client getHttpClient() {
+    return httpClient;
+  }
+
+  /**
+   * <p>Setter for the field <code>httpClient</code>.</p>
+   *
+   * @param httpClient a {@link javax.ws.rs.client.Client} object.
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setHttpClient(Client httpClient) {
+    this.httpClient = httpClient;
+    return this;
+  }
+
+  /**
+   * Returns the base URL to the location where the OpenAPI document is being served.
+   *
+   * @return The base URL to the target host.
+   */
+  public String getBasePath() {
+    return basePath;
+  }
+
+  /**
+   * Sets the base URL to the location where the OpenAPI document is being served.
+   *
+   * @param basePath The base URL to the target host.
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setBasePath(String basePath) {
+    this.basePath = basePath;
+    return this;
+  }
+
+  /**
+   * <p>Getter for the field <code>servers</code>.</p>
+   *
+   * @return a {@link java.util.List} of servers.
+   */
+  public List<ServerConfiguration> getServers() {
+    return servers;
+  }
+
+  /**
+   * <p>Setter for the field <code>servers</code>.</p>
+   *
+   * @param servers a {@link java.util.List} of servers.
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setServers(List<ServerConfiguration> servers) {
+    this.servers = servers;
+    updateBasePath();
+    return this;
+  }
+
+  /**
+   * <p>Getter for the field <code>serverIndex</code>.</p>
+   *
+   * @return a {@link java.lang.Integer} object.
+   */
+  public Integer getServerIndex() {
+    return serverIndex;
+  }
+
+  /**
+   * <p>Setter for the field <code>serverIndex</code>.</p>
+   *
+   * @param serverIndex the server index
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setServerIndex(Integer serverIndex) {
+    this.serverIndex = serverIndex;
+    updateBasePath();
+    return this;
+  }
+
+  /**
+   * <p>Getter for the field <code>serverVariables</code>.</p>
+   *
+   * @return a {@link java.util.Map} of server variables.
+   */
+  public Map<String, String> getServerVariables() {
+    return serverVariables;
+  }
+
+  /**
+   * <p>Setter for the field <code>serverVariables</code>.</p>
+   *
+   * @param serverVariables a {@link java.util.Map} of server variables.
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setServerVariables(Map<String, String> serverVariables) {
+    this.serverVariables = serverVariables;
+    updateBasePath();
+    return this;
+  }
+
+  private void updateBasePath() {
+    if (serverIndex != null) {
+        setBasePath(servers.get(serverIndex).URL(serverVariables));
+    }
+  }
+
+  /**
+   * Get authentications (key: authentication name, value: authentication).
+   *
+   * @return Map of authentication object
+   */
+  public Map<String, Authentication> getAuthentications() {
+    return authentications;
+  }
+
+  /**
+   * Get authentication for the given name.
+   *
+   * @param authName The authentication name
+   * @return The authentication, null if not found
+   */
+  public Authentication getAuthentication(String authName) {
+    return authentications.get(authName);
+  }
+
+  /**
+   * Helper method to set username for the first HTTP basic authentication.
+   *
+   * @param username Username
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setUsername(String username) {
+    for (Authentication auth : authentications.values()) {
+      if (auth instanceof HttpBasicAuth) {
+        ((HttpBasicAuth) auth).setUsername(username);
+        return this;
+      }
+    }
+    throw new RuntimeException("No HTTP basic authentication configured!");
+  }
+
+  /**
+   * Helper method to set password for the first HTTP basic authentication.
+   *
+   * @param password Password
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setPassword(String password) {
+    for (Authentication auth : authentications.values()) {
+      if (auth instanceof HttpBasicAuth) {
+        ((HttpBasicAuth) auth).setPassword(password);
+        return this;
+      }
+    }
+    throw new RuntimeException("No HTTP basic authentication configured!");
+  }
+
+  /**
+   * Helper method to set API key value for the first API key authentication.
+   *
+   * @param apiKey API key
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setApiKey(String apiKey) {
+    for (Authentication auth : authentications.values()) {
+      if (auth instanceof ApiKeyAuth) {
+        ((ApiKeyAuth) auth).setApiKey(apiKey);
+        return this;
+      }
+    }
+    throw new RuntimeException("No API key authentication configured!");
+  }
+
+  /**
+   * Helper method to configure authentications which respects aliases of API keys.
+   *
+   * @param secrets Hash map from authentication name to its secret.
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient configureApiKeys(Map<String, String> secrets) {
+    for (Map.Entry<String, Authentication> authEntry : authentications.entrySet()) {
+      Authentication auth = authEntry.getValue();
+      if (auth instanceof ApiKeyAuth) {
+        String name = authEntry.getKey();
+        // respect x-auth-id-alias property
+        name = authenticationLookup.getOrDefault(name, name);
+        String secret = secrets.get(name);
+        if (secret != null) {
+          ((ApiKeyAuth) auth).setApiKey(secret);
+        }
+      }
+    }
+    return this;
+  }
+
+  /**
+   * Helper method to set API key prefix for the first API key authentication.
+   *
+   * @param apiKeyPrefix API key prefix
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setApiKeyPrefix(String apiKeyPrefix) {
+    for (Authentication auth : authentications.values()) {
+      if (auth instanceof ApiKeyAuth) {
+        ((ApiKeyAuth) auth).setApiKeyPrefix(apiKeyPrefix);
+        return this;
+      }
+    }
+    throw new RuntimeException("No API key authentication configured!");
+  }
+
+  /**
+   * Helper method to set bearer token for the first Bearer authentication.
+   *
+   * @param bearerToken Bearer token
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setBearerToken(String bearerToken) {
+    for (Authentication auth : authentications.values()) {
+      if (auth instanceof HttpBearerAuth) {
+        ((HttpBearerAuth) auth).setBearerToken(bearerToken);
+        return this;
+      }
+    }
+    throw new RuntimeException("No Bearer authentication configured!");
+  }
+
+  /**
+   * Set the User-Agent header's value (by adding to the default header map).
+   *
+   * @param userAgent Http user agent
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setUserAgent(String userAgent) {
+    this.userAgent = userAgent;
+    addDefaultHeader("User-Agent", userAgent);
+    return this;
+  }
+
+  /**
+   * Get the User-Agent header's value.
+   *
+   * @return User-Agent string
+   */
+  public String getUserAgent(){
+    return userAgent;
+  }
+
+  /**
+   * Add a default header.
+   *
+   * @param key The header's key
+   * @param value The header's value
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient addDefaultHeader(String key, String value) {
+    defaultHeaderMap.put(key, value);
+    return this;
+  }
+
+  /**
+   * Add a default cookie.
+   *
+   * @param key The cookie's key
+   * @param value The cookie's value
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient addDefaultCookie(String key, String value) {
+    defaultCookieMap.put(key, value);
+    return this;
+  }
+
+  /**
+   * Gets the client config.
+   *
+   * @return Client config
+   */
+  public ClientConfig getClientConfig() {
+    return clientConfig;
+  }
+
+  /**
+   * Set the client config.
+   *
+   * @param clientConfig Set the client config
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setClientConfig(ClientConfig clientConfig) {
+    this.clientConfig = clientConfig;
+    // Rebuild HTTP Client according to the new "clientConfig" value.
+    this.httpClient = buildHttpClient();
+    return this;
+  }
+
+  /**
+   * Check that whether debugging is enabled for this API client.
+   *
+   * @return True if debugging is switched on
+   */
+  public boolean isDebugging() {
+    return debugging;
+  }
+
+  /**
+   * Enable/disable debugging for this API client.
+   *
+   * @param debugging To enable (true) or disable (false) debugging
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setDebugging(boolean debugging) {
+    this.debugging = debugging;
+    // Rebuild HTTP Client according to the new "debugging" value.
+    this.httpClient = buildHttpClient();
+    return this;
+  }
+
+  /**
+   * The path of temporary folder used to store downloaded files from endpoints
+   * with file response. The default value is <code>null</code>, i.e. using
+   * the system's default temporary folder.
+   *
+   * @return Temp folder path
+   */
+  public String getTempFolderPath() {
+    return tempFolderPath;
+  }
+
+  /**
+   * Set temp folder path
+   *
+   * @param tempFolderPath Temp folder path
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setTempFolderPath(String tempFolderPath) {
+    this.tempFolderPath = tempFolderPath;
+    return this;
+  }
+
+  /**
+   * Connect timeout (in milliseconds).
+   *
+   * @return Connection timeout
+   */
+  public int getConnectTimeout() {
+    return connectionTimeout;
+  }
+
+  /**
+   * Set the connect timeout (in milliseconds).
+   * A value of 0 means no timeout, otherwise values must be between 1 and
+   * {@link Integer#MAX_VALUE}.
+   *
+   * @param connectionTimeout Connection timeout in milliseconds
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setConnectTimeout(int connectionTimeout) {
+    this.connectionTimeout = connectionTimeout;
+    httpClient.property(ClientProperties.CONNECT_TIMEOUT, connectionTimeout);
+    return this;
+  }
+
+  /**
+   * read timeout (in milliseconds).
+   *
+   * @return Read timeout
+   */
+  public int getReadTimeout() {
+    return readTimeout;
+  }
+
+  /**
+   * Set the read timeout (in milliseconds).
+   * A value of 0 means no timeout, otherwise values must be between 1 and
+   * {@link Integer#MAX_VALUE}.
+   *
+   * @param readTimeout Read timeout in milliseconds
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setReadTimeout(int readTimeout) {
+    this.readTimeout = readTimeout;
+    httpClient.property(ClientProperties.READ_TIMEOUT, readTimeout);
+    return this;
+  }
+
+  /**
+   * Get the date format used to parse/format date parameters.
+   *
+   * @return Date format
+   */
+  public DateFormat getDateFormat() {
+    return dateFormat;
+  }
+
+  /**
+   * Set the date format used to parse/format date parameters.
+   *
+   * @param dateFormat Date format
+   * @return a {@link ApiClient} object.
+   */
+  public ApiClient setDateFormat(DateFormat dateFormat) {
+    this.dateFormat = dateFormat;
+    // also set the date format for model (de)serialization with Date properties
+    this.json.setDateFormat((DateFormat) dateFormat.clone());
+    return this;
+  }
+
+  /**
+   * Parse the given string into Date object.
+   *
+   * @param str String
+   * @return Date
+   */
+  public Date parseDate(String str) {
+    try {
+      return dateFormat.parse(str);
+    } catch (java.text.ParseException e) {
+      throw new RuntimeException(e);
+    }
+  }
+
+  /**
+   * Format the given Date object into string.
+   *
+   * @param date Date
+   * @return Date in string format
+   */
+  public String formatDate(Date date) {
+    return dateFormat.format(date);
+  }
+
+  /**
+   * Format the given parameter object into string.
+   *
+   * @param param Object
+   * @return Object in string format
+   */
+  public String parameterToString(Object param) {
+    if (param == null) {
+      return "";
+    } else if (param instanceof Date) {
+      return formatDate((Date) param);
+    } else if (param instanceof OffsetDateTime) {
+      return formatOffsetDateTime((OffsetDateTime) param);
+    } else if (param instanceof Collection<?>) {
+      StringBuilder b = new StringBuilder();
+      for(Object o : (Collection<?>)param) {
+        if(b.length() > 0) {
+          b.append(',');
+        }
+        b.append(String.valueOf(o));
+      }
+      return b.toString();
+    } else {
+      return String.valueOf(param);
+    }
+  }
+
+  /*
+   * Format to {@code Pair} objects.
+   *
+   * @param collectionFormat Collection format
+   * @param name Name
+   * @param value Value
+   * @return List of pairs
+   */
+  public List<Pair> parameterToPairs(String collectionFormat, String name, Object value){
+    List<Pair> params = new ArrayList<>();
+
+    // preconditions
+    if (name == null || name.isEmpty() || value == null) return params;
+
+    Collection<?> valueCollection;
+    if (value instanceof Collection<?>) {
+      valueCollection = (Collection<?>) value;
+    } else {
+      params.add(new Pair(name, parameterToString(value)));
+      return params;
+    }
+
+    if (valueCollection.isEmpty()){
+      return params;
+    }
+
+    // get the collection format (default: csv)
+    String format = (collectionFormat == null || collectionFormat.isEmpty() ? "csv" : collectionFormat);
+
+    // create the params based on the collection format
+    if ("multi".equals(format)) {
+      for (Object item : valueCollection) {
+        params.add(new Pair(name, parameterToString(item)));
+      }
+
+      return params;
+    }
+
+    String delimiter = ",";
+
+    if ("csv".equals(format)) {
+      delimiter = ",";
+    } else if ("ssv".equals(format)) {
+      delimiter = " ";
+    } else if ("tsv".equals(format)) {
+      delimiter = "\t";
+    } else if ("pipes".equals(format)) {
+      delimiter = "|";
+    }
+
+    StringBuilder sb = new StringBuilder() ;
+    for (Object item : valueCollection) {
+      sb.append(delimiter);
+      sb.append(parameterToString(item));
+    }
+
+    params.add(new Pair(name, sb.substring(1)));
+
+    return params;
+  }
+
+  /**
+   * Check if the given MIME is a JSON MIME.
+   * JSON MIME examples:
+   *   application/json
+   *   application/json; charset=UTF8
+   *   APPLICATION/JSON
+   *   application/vnd.company+json
+   * "*{@literal /}*" is also considered JSON by this method.
+   *
+   * @param mime MIME
+   * @return True if the MIME type is JSON
+   */
+  public boolean isJsonMime(String mime) {
+    return mime != null && (mime.equals("*/*") || JSON_MIME_PATTERN.matcher(mime).matches());
+  }
+
+  /**
+   * Select the Accept header's value from the given accepts array:
+   *   if JSON exists in the given array, use it;
+   *   otherwise use all of them (joining into a string)
+   *
+   * @param accepts The accepts array to select from
+   * @return The Accept header to use. If the given array is empty,
+   *   null will be returned (not to set the Accept header explicitly).
+   */
+  public String selectHeaderAccept(String... accepts) {
+    if (accepts == null || accepts.length == 0) {
+      return null;
+    }
+    for (String accept : accepts) {
+      if (isJsonMime(accept)) {
+        return accept;
+      }
+    }
+    return StringUtil.join(accepts, ",");
+  }
+
+  /**
+   * Select the Content-Type header's value from the given array:
+   *   if JSON exists in the given array, use it;
+   *   otherwise use the first one of the array.
+   *
+   * @param contentTypes The Content-Type array to select from
+   * @return The Content-Type header to use. If the given array is empty,
+   *   JSON will be used.
+   */
+  public String selectHeaderContentType(String... contentTypes) {
+    if (contentTypes == null || contentTypes.length == 0) {
+      return "application/json";
+    }
+    for (String contentType : contentTypes) {
+      if (isJsonMime(contentType)) {
+        return contentType;
+      }
+    }
+    return contentTypes[0];
+  }
+
+  /**
+   * Escape the given string to be used as URL query value.
+   *
+   * @param str String
+   * @return Escaped string
+   */
+  public String escapeString(String str) {
+    try {
+      return URLEncoder.encode(str, "utf8").replaceAll("\\+", "%20");
+    } catch (UnsupportedEncodingException e) {
+      return str;
+    }
+  }
+
+  /**
+   * Serialize the given Java object into string entity according the given
+   * Content-Type (only JSON is supported for now).
+   *
+   * @param obj Object
+   * @param formParams Form parameters
+   * @param contentType Context type
+   * @return Entity
+   * @throws ApiException API exception
+   */
+  public Entity<?> serialize(Object obj, Map<String, Object> formParams, String contentType, boolean isBodyNullable) throws ApiException {
+    Entity<?> entity;
+    if (contentType.startsWith("multipart/form-data")) {
+      MultiPart multiPart = new MultiPart();
+      for (Entry<String, Object> param: formParams.entrySet()) {
+        if (param.getValue() instanceof Iterable<?>) {
+          ((Iterable<?>)param.getValue()).forEach(v -> addParamToMultipart(v, param.getKey(), multiPart));
+        } else {
+          addParamToMultipart(param.getValue(), param.getKey(), multiPart);
+        }
+      }
+      entity = Entity.entity(multiPart, MediaType.MULTIPART_FORM_DATA_TYPE);
+    } else if (contentType.startsWith("application/x-www-form-urlencoded")) {
+      Form form = new Form();
+      for (Entry<String, Object> param: formParams.entrySet()) {
+        form.param(param.getKey(), parameterToString(param.getValue()));
+      }
+      entity = Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE);
+    } else {
+      // We let jersey handle the serialization
+      if (isBodyNullable) { // payload is nullable
+        if (obj instanceof String) {
+          entity = Entity.entity(obj == null ? "null" : "\"" + ((String)obj).replaceAll("\"", Matcher.quoteReplacement("\\\"")) + "\"", contentType);
+        } else {
+          entity = Entity.entity(obj == null ? "null" : obj, contentType);
+        }
+      } else {
+        if (obj instanceof String) {
+          entity = Entity.entity(obj == null ? "" : "\"" + ((String)obj).replaceAll("\"", Matcher.quoteReplacement("\\\"")) + "\"", contentType);
+        } else {
+          entity = Entity.entity(obj == null ? "" : obj, contentType);
+        }
+      }
+    }
+    return entity;
+  }
+
+    /**
+   * Adds the object with the provided key to the MultiPart.
+   * Based on the object type sets Content-Disposition and Content-Type.
+   *
+   * @param obj Object
+   * @param key Key of the object
+   * @param multiPart MultiPart to add the form param to
+   */
+  private void addParamToMultipart(Object value, String key, MultiPart multiPart) {
+    if (value instanceof File) {
+      File file = (File) value;
+      FormDataContentDisposition contentDisp = FormDataContentDisposition.name(key)
+          .fileName(file.getName()).size(file.length()).build();
+
+      // Attempt to probe the content type for the file so that the form part is more correctly
+      // and precisely identified, but fall back to application/octet-stream if that fails.
+      MediaType type;
+      try {
+        type = MediaType.valueOf(Files.probeContentType(file.toPath()));
+      } catch (IOException | IllegalArgumentException e) {
+        type = MediaType.APPLICATION_OCTET_STREAM_TYPE;
+      }
+
+      multiPart.bodyPart(new FormDataBodyPart(contentDisp, file, type));
+    } else {
+      FormDataContentDisposition contentDisp = FormDataContentDisposition.name(key).build();
+      multiPart.bodyPart(new FormDataBodyPart(contentDisp, parameterToString(value)));
+    }
+  } 
+
+  /**
+   * Serialize the given Java object into string according the given
+   * Content-Type (only JSON, HTTP form is supported for now).
+   *
+   * @param obj Object
+   * @param formParams Form parameters
+   * @param contentType Context type
+   * @param isBodyNullable True if the body is nullable
+   * @return String
+   * @throws ApiException API exception
+   */
+  public String serializeToString(Object obj, Map<String, Object> formParams, String contentType, boolean isBodyNullable) throws ApiException {
+    try {
+      if (contentType.startsWith("multipart/form-data")) {
+        throw new ApiException("multipart/form-data not yet supported for serializeToString (http signature authentication)");
+      } else if (contentType.startsWith("application/x-www-form-urlencoded")) {
+        String formString = "";
+        for (Entry<String, Object> param : formParams.entrySet()) {
+          formString = param.getKey() + "=" + URLEncoder.encode(parameterToString(param.getValue()), "UTF-8") + "&";
+        }
+
+        if (formString.length() == 0) { // empty string
+          return formString;
+        } else {
+          return formString.substring(0, formString.length() - 1);
+        }
+      } else {
+        if (isBodyNullable) {
+          return obj == null ? "null" : json.getMapper().writeValueAsString(obj);
+        } else {
+          return obj == null ? "" : json.getMapper().writeValueAsString(obj);
+        }
+      }
+    } catch (Exception ex) {
+      throw new ApiException("Failed to perform serializeToString: " + ex.toString());
+    }
+  }
+
+  /**
+   * Deserialize response body to Java object according to the Content-Type.
+   *
+   * @param <T> Type
+   * @param response Response
+   * @param returnType Return type
+   * @return Deserialize object
+   * @throws ApiException API exception
+   */
+  @SuppressWarnings("unchecked")
+  public <T> T deserialize(Response response, GenericType<T> returnType) throws ApiException {
+    if (response == null || returnType == null) {
+      return null;
+    }
+
+    if ("byte[]".equals(returnType.toString())) {
+      // Handle binary response (byte array).
+      return (T) response.readEntity(byte[].class);
+    } else if (returnType.getRawType() == File.class) {
+      // Handle file downloading.
+      T file = (T) downloadFileFromResponse(response);
+      return file;
+    }
+
+    // read the entity stream multiple times
+    response.bufferEntity();
+
+    return response.readEntity(returnType);
+  }
+
+  /**
+   * Download file from the given response.
+   *
+   * @param response Response
+   * @return File
+   * @throws ApiException If fail to read file content from response and write to disk
+   */
+  public File downloadFileFromResponse(Response response) throws ApiException {
+    try {
+      File file = prepareDownloadFile(response);
+      Files.copy(response.readEntity(InputStream.class), file.toPath(), StandardCopyOption.REPLACE_EXISTING);
+      return file;
+    } catch (IOException e) {
+      throw new ApiException(e);
+    }
+  }
+
+  /**
+   * <p>Prepare the file for download from the response.</p>
+   *
+   * @param response a {@link javax.ws.rs.core.Response} object.
+   * @return a {@link java.io.File} object.
+   * @throws java.io.IOException if any.
+   */
+  public File prepareDownloadFile(Response response) throws IOException {
+    String filename = null;
+    String contentDisposition = (String) response.getHeaders().getFirst("Content-Disposition");
+    if (contentDisposition != null && !"".equals(contentDisposition)) {
+      // Get filename from the Content-Disposition header.
+      Pattern pattern = Pattern.compile("filename=['\"]?([^'\"\\s]+)['\"]?");
+      Matcher matcher = pattern.matcher(contentDisposition);
+      if (matcher.find())
+        filename = matcher.group(1);
+    }
+
+    String prefix;
+    String suffix = null;
+    if (filename == null) {
+      prefix = "download-";
+      suffix = "";
+    } else {
+      int pos = filename.lastIndexOf('.');
+      if (pos == -1) {
+        prefix = filename + "-";
+      } else {
+        prefix = filename.substring(0, pos) + "-";
+        suffix = filename.substring(pos);
+      }
+      // Files.createTempFile requires the prefix to be at least three characters long
+      if (prefix.length() < 3)
+        prefix = "download-";
+    }
+
+    if (tempFolderPath == null)
+      return Files.createTempFile(prefix, suffix).toFile();
+    else
+      return Files.createTempFile(Paths.get(tempFolderPath), prefix, suffix).toFile();
+  }
+
+  /**
+   * Invoke API by sending HTTP request with the given options.
+   *
+   * @param <T> Type
+   * @param operation The qualified name of the operation
+   * @param path The sub-path of the HTTP URL
+   * @param method The request method, one of "GET", "POST", "PUT", "HEAD" and "DELETE"
+   * @param queryParams The query parameters
+   * @param body The request body object
+   * @param headerParams The header parameters
+   * @param cookieParams The cookie parameters
+   * @param formParams The form parameters
+   * @param accept The request's Accept header
+   * @param contentType The request's Content-Type header
+   * @param authNames The authentications to apply
+   * @param returnType The return type into which to deserialize the response
+   * @param isBodyNullable True if the body is nullable
+   * @return The response body in type of string
+   * @throws ApiException API exception
+   */
+  public <T> ApiResponse<T> invokeAPI(
+      String operation,
+      String path,
+      String method,
+      List<Pair> queryParams,
+      Object body,
+      Map<String, String> headerParams,
+      Map<String, String> cookieParams,
+      Map<String, Object> formParams,
+      String accept,
+      String contentType,
+      String[] authNames,
+      GenericType<T> returnType,
+      boolean isBodyNullable)
+      throws ApiException {
+
+    String targetURL;
+    List<ServerConfiguration> serverConfigurations;
+    if (serverIndex != null && (serverConfigurations = operationServers.get(operation)) != null) {
+      int index = operationServerIndex.getOrDefault(operation, serverIndex).intValue();
+      Map<String, String> variables = operationServerVariables.getOrDefault(operation, serverVariables);
+      if (index < 0 || index >= serverConfigurations.size()) {
+        throw new ArrayIndexOutOfBoundsException(
+            String.format(
+                "Invalid index %d when selecting the host settings. Must be less than %d",
+                index, serverConfigurations.size()));
+      }
+      targetURL = serverConfigurations.get(index).URL(variables) + path;
+    } else {
+      targetURL = this.basePath + path;
+    }
+    // Not using `.target(targetURL).path(path)` below,
+    // to support (constant) query string in `path`, e.g. "/posts?draft=1"
+    WebTarget target = httpClient.target(targetURL);
+
+    if (queryParams != null) {
+      for (Pair queryParam : queryParams) {
+        if (queryParam.getValue() != null) {
+          target = target.queryParam(queryParam.getName(), escapeString(queryParam.getValue()));
+        }
+      }
+    }
+
+    Invocation.Builder invocationBuilder = target.request();
+
+    if (accept != null) {
+      invocationBuilder = invocationBuilder.accept(accept);
+    }
+
+    for (Entry<String, String> entry : cookieParams.entrySet()) {
+      String value = entry.getValue();
+      if (value != null) {
+        invocationBuilder = invocationBuilder.cookie(entry.getKey(), value);
+      }
+    }
+
+    for (Entry<String, String> entry : defaultCookieMap.entrySet()) {
+      String value = entry.getValue();
+      if (value != null) {
+        invocationBuilder = invocationBuilder.cookie(entry.getKey(), value);
+      }
+    }
+
+    Entity<?> entity = serialize(body, formParams, contentType, isBodyNullable);
+
+    // put all headers in one place
+    Map<String, String> allHeaderParams = new HashMap<>(defaultHeaderMap);
+    allHeaderParams.putAll(headerParams);
+
+    if (authNames != null) {
+      // update different parameters (e.g. headers) for authentication
+      updateParamsForAuth(
+          authNames,
+          queryParams,
+          allHeaderParams,
+          cookieParams,
+          null,
+          method,
+          target.getUri());
+    }
+
+    for (Entry<String, String> entry : allHeaderParams.entrySet()) {
+      String value = entry.getValue();
+      if (value != null) {
+        invocationBuilder = invocationBuilder.header(entry.getKey(), value);
+      }
+    }
+
+    Response response = null;
+
+    try {
+      response = sendRequest(method, invocationBuilder, entity);
+
+      final int statusCode = response.getStatusInfo().getStatusCode();
+
+      Map<String, List<String>> responseHeaders = buildResponseHeaders(response);
+
+      if (statusCode == Status.NO_CONTENT.getStatusCode()) {
+        return new ApiResponse<T>(statusCode, responseHeaders);
+      } else if (response.getStatusInfo().getFamily() == Status.Family.SUCCESSFUL) {
+        if (returnType == null) {
+          return new ApiResponse<T>(statusCode, responseHeaders);
+        } else {
+          return new ApiResponse<T>(statusCode, responseHeaders, deserialize(response, returnType));
+        }
+      } else {
+        String message = "error";
+        String respBody = null;
+        if (response.hasEntity()) {
+          try {
+            respBody = String.valueOf(response.readEntity(String.class));
+            message = respBody;
+          } catch (RuntimeException e) {
+            // e.printStackTrace();
+          }
+        }
+        throw new ApiException(
+            response.getStatus(), message, buildResponseHeaders(response), respBody);
+      }
+    } finally {
+      try {
+        response.close();
+      } catch (Exception e) {
+        // it's not critical, since the response object is local in method invokeAPI; that's fine,
+        // just continue
+      }
+    }
+  }
+
+  private Response sendRequest(String method, Invocation.Builder invocationBuilder, Entity<?> entity) {
+    Response response;
+    if ("POST".equals(method)) {
+      response = invocationBuilder.post(entity);
+    } else if ("PUT".equals(method)) {
+      response = invocationBuilder.put(entity);
+    } else if ("DELETE".equals(method)) {
+      if ("".equals(entity.getEntity())) {
+        response = invocationBuilder.method("DELETE");
+      } else {
+        response = invocationBuilder.method("DELETE", entity);
+      }
+    } else if ("PATCH".equals(method)) {
+      response = invocationBuilder.method("PATCH", entity);
+    } else {
+      response = invocationBuilder.method(method);
+    }
+    return response;
+  }
+
+  /**
+   * @deprecated Add qualified name of the operation as a first parameter.
+   */
+  @Deprecated
+  public <T> ApiResponse<T> invokeAPI(String path, String method, List<Pair> queryParams, Object body, Map<String, String> headerParams, Map<String, String> cookieParams, Map<String, Object> formParams, String accept, String contentType, String[] authNames, GenericType<T> returnType, boolean isBodyNullable) throws ApiException {
+    return invokeAPI(null, path, method, queryParams, body, headerParams, cookieParams, formParams, accept, contentType, authNames, returnType, isBodyNullable);
+  }
+
+  /**
+   * Build the Client used to make HTTP requests.
+   *
+   * @return Client
+   */
+  protected Client buildHttpClient() {
+    // recreate the client config to pickup changes
+    clientConfig = getDefaultClientConfig();
+
+    ClientBuilder clientBuilder = ClientBuilder.newBuilder();
+    clientBuilder = clientBuilder.withConfig(clientConfig);
+    customizeClientBuilder(clientBuilder);
+    return clientBuilder.build();
+  }
+
+  /**
+   * Get the default client config.
+   *
+   * @return Client config
+   */
+  public ClientConfig getDefaultClientConfig() {
+    ClientConfig clientConfig = new ClientConfig();
+    clientConfig.register(MultiPartFeature.class);
+    clientConfig.register(json);
+    clientConfig.register(JacksonFeature.class);
+    clientConfig.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
+    // turn off compliance validation to be able to send payloads with DELETE calls
+    clientConfig.property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
+    if (debugging) {
+      clientConfig.register(new LoggingFeature(java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME), java.util.logging.Level.INFO, LoggingFeature.Verbosity.PAYLOAD_ANY, 1024*50 /* Log payloads up to 50K */));
+      clientConfig.property(LoggingFeature.LOGGING_FEATURE_VERBOSITY, LoggingFeature.Verbosity.PAYLOAD_ANY);
+      // Set logger to ALL
+      java.util.logging.Logger.getLogger(LoggingFeature.DEFAULT_LOGGER_NAME).setLevel(java.util.logging.Level.ALL);
+    } else {
+      // suppress warnings for payloads with DELETE calls:
+      java.util.logging.Logger.getLogger("org.glassfish.jersey.client").setLevel(java.util.logging.Level.SEVERE);
+    }
+
+    return clientConfig;
+  }
+
+  /**
+   * Customize the client builder.
+   *
+   * This method can be overridden to customize the API client. For example, this can be used to:
+   * 1. Set the hostname verifier to be used by the client to verify the endpoint's hostname
+   *    against its identification information.
+   * 2. Set the client-side key store.
+   * 3. Set the SSL context that will be used when creating secured transport connections to
+   *    server endpoints from web targets created by the client instance that is using this SSL context.
+   * 4. Set the client-side trust store.
+   *
+   * To completely disable certificate validation (at your own risk), you can
+   * override this method and invoke disableCertificateValidation(clientBuilder).
+   *
+   * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object.
+   */
+  protected void customizeClientBuilder(ClientBuilder clientBuilder) {
+    // No-op extension point
+  }
+
+  /**
+   * Disable X.509 certificate validation in TLS connections.
+   *
+   * Please note that trusting all certificates is extremely risky.
+   * This may be useful in a development environment with self-signed certificates.
+   *
+   * @param clientBuilder a {@link javax.ws.rs.client.ClientBuilder} object.
+   * @throws java.security.KeyManagementException if any.
+   * @throws java.security.NoSuchAlgorithmException if any.
+   */
+  protected void disableCertificateValidation(ClientBuilder clientBuilder) throws KeyManagementException, NoSuchAlgorithmException {
+    TrustManager[] trustAllCerts = new X509TrustManager[] {
+      new X509TrustManager() {
+        @Override
+        public X509Certificate[] getAcceptedIssuers() {
+          return null;
+        }
+        @Override
+        public void checkClientTrusted(X509Certificate[] certs, String authType) {
+        }
+        @Override
+        public void checkServerTrusted(X509Certificate[] certs, String authType) {
+        }
+      }
+    };
+    SSLContext sslContext = SSLContext.getInstance("TLS");
+    sslContext.init(null, trustAllCerts, new SecureRandom());
+    clientBuilder.sslContext(sslContext);
+  }
+
+  /**
+   * <p>Build the response headers.</p>
+   *
+   * @param response a {@link javax.ws.rs.core.Response} object.
+   * @return a {@link java.util.Map} of response headers.
+   */
+  protected Map<String, List<String>> buildResponseHeaders(Response response) {
+    Map<String, List<String>> responseHeaders = new HashMap<>();
+    for (Entry<String, List<Object>> entry: response.getHeaders().entrySet()) {
+      List<Object> values = entry.getValue();
+      List<String> headers = new ArrayList<>();
+      for (Object o : values) {
+        headers.add(String.valueOf(o));
+      }
+      responseHeaders.put(entry.getKey(), headers);
+    }
+    return responseHeaders;
+  }
+
+  /**
+   * Update query and header parameters based on authentication settings.
+   *
+   * @param authNames The authentications to apply
+   * @param queryParams List of query parameters
+   * @param headerParams Map of header parameters
+   * @param cookieParams Map of cookie parameters
+   * @param method HTTP method (e.g. POST)
+   * @param uri HTTP URI
+   */
+  protected void updateParamsForAuth(String[] authNames, List<Pair> queryParams, Map<String, String> headerParams,
+                                     Map<String, String> cookieParams, String payload, String method, URI uri) throws ApiException {
+    for (String authName : authNames) {
+      Authentication auth = authentications.get(authName);
+      if (auth == null) {
+        continue;
+      }
+      auth.applyToParams(queryParams, headerParams, cookieParams, payload, method, uri);
+    }
+  }
+}
diff --git a/src/main/java/com/docspring/ApiException.java b/src/main/java/com/docspring/ApiException.java
new file mode 100644
index 0000000..9e6909d
--- /dev/null
+++ b/src/main/java/com/docspring/ApiException.java
@@ -0,0 +1,96 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Map;
+import java.util.List;
+
+/**
+ * API Exception
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class ApiException extends Exception {
+    private static final long serialVersionUID = 1L;
+
+    private int code = 0;
+    private Map<String, List<String>> responseHeaders = null;
+    private String responseBody = null;
+
+    public ApiException() {}
+
+    public ApiException(Throwable throwable) {
+        super(throwable);
+    }
+
+    public ApiException(String message) {
+        super(message);
+    }
+
+    public ApiException(String message, Throwable throwable, int code, Map<String, List<String>> responseHeaders, String responseBody) {
+        super(message, throwable);
+        this.code = code;
+        this.responseHeaders = responseHeaders;
+        this.responseBody = responseBody;
+    }
+
+    public ApiException(String message, int code, Map<String, List<String>> responseHeaders, String responseBody) {
+        this(message, (Throwable) null, code, responseHeaders, responseBody);
+    }
+
+    public ApiException(String message, Throwable throwable, int code, Map<String, List<String>> responseHeaders) {
+        this(message, throwable, code, responseHeaders, null);
+    }
+
+    public ApiException(int code, Map<String, List<String>> responseHeaders, String responseBody) {
+        this((String) null, (Throwable) null, code, responseHeaders, responseBody);
+    }
+
+    public ApiException(int code, String message) {
+        super(message);
+        this.code = code;
+    }
+
+    public ApiException(int code, String message, Map<String, List<String>> responseHeaders, String responseBody) {
+        this(code, message);
+        this.responseHeaders = responseHeaders;
+        this.responseBody = responseBody;
+    }
+
+    /**
+     * Get the HTTP status code.
+     *
+     * @return HTTP status code
+     */
+    public int getCode() {
+        return code;
+    }
+
+    /**
+     * Get the HTTP response headers.
+     *
+     * @return A map of list of string
+     */
+    public Map<String, List<String>> getResponseHeaders() {
+        return responseHeaders;
+    }
+
+    /**
+     * Get the HTTP response body.
+     *
+     * @return Response body in the form of string
+     */
+    public String getResponseBody() {
+        return responseBody;
+    }
+}
diff --git a/src/main/java/com/docspring/ApiResponse.java b/src/main/java/com/docspring/ApiResponse.java
new file mode 100644
index 0000000..6eee466
--- /dev/null
+++ b/src/main/java/com/docspring/ApiResponse.java
@@ -0,0 +1,74 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * API response returned by API call.
+ *
+ * @param <T> The type of data that is deserialized from response body
+ */
+public class ApiResponse<T> {
+    private final int statusCode;
+    private final Map<String, List<String>> headers;
+    private final T data;
+
+    /**
+     * @param statusCode The status code of HTTP response
+     * @param headers The headers of HTTP response
+     */
+    public ApiResponse(int statusCode, Map<String, List<String>> headers) {
+        this(statusCode, headers, null);
+    }
+
+    /**
+     * @param statusCode The status code of HTTP response
+     * @param headers The headers of HTTP response
+     * @param data The object deserialized from response bod
+     */
+    public ApiResponse(int statusCode, Map<String, List<String>> headers, T data) {
+        this.statusCode = statusCode;
+        this.headers = headers;
+        this.data = data;
+    }
+
+    /**
+     * Get the status code
+     *
+     * @return status code
+     */
+    public int getStatusCode() {
+        return statusCode;
+    }
+
+    /**
+     * Get the headers
+     *
+     * @return map of headers
+     */
+    public Map<String, List<String>> getHeaders() {
+        return headers;
+    }
+
+    /**
+     * Get the data
+     *
+     * @return data
+     */
+    public T getData() {
+        return data;
+    }
+}
diff --git a/src/main/java/com/docspring/BatchGeneratePdfs201Response.java b/src/main/java/com/docspring/BatchGeneratePdfs201Response.java
new file mode 100644
index 0000000..3c9d1e5
--- /dev/null
+++ b/src/main/java/com/docspring/BatchGeneratePdfs201Response.java
@@ -0,0 +1,293 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.SubmissionBatch;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * BatchGeneratePdfs201Response
+ */
+@JsonPropertyOrder({
+  BatchGeneratePdfs201Response.JSON_PROPERTY_STATUS,
+  BatchGeneratePdfs201Response.JSON_PROPERTY_ERROR,
+  BatchGeneratePdfs201Response.JSON_PROPERTY_ERRORS,
+  BatchGeneratePdfs201Response.JSON_PROPERTY_SUBMISSION_BATCH,
+  BatchGeneratePdfs201Response.JSON_PROPERTY_SUBMISSIONS
+})
+@JsonTypeName("batchGeneratePdfs_201_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class BatchGeneratePdfs201Response {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_ERROR = "error";
+  @javax.annotation.Nullable
+  private String error;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_SUBMISSION_BATCH = "submission_batch";
+  @javax.annotation.Nonnull
+  private SubmissionBatch submissionBatch;
+
+  public static final String JSON_PROPERTY_SUBMISSIONS = "submissions";
+  @javax.annotation.Nonnull
+  private List<Object> submissions = new ArrayList<>();
+
+  public BatchGeneratePdfs201Response() { 
+  }
+
+  public BatchGeneratePdfs201Response status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public BatchGeneratePdfs201Response error(@javax.annotation.Nullable String error) {
+    this.error = error;
+    return this;
+  }
+
+  /**
+   * Get error
+   * @return error
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERROR)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getError() {
+    return error;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERROR)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setError(@javax.annotation.Nullable String error) {
+    this.error = error;
+  }
+
+
+  public BatchGeneratePdfs201Response errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public BatchGeneratePdfs201Response addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  public BatchGeneratePdfs201Response submissionBatch(@javax.annotation.Nonnull SubmissionBatch submissionBatch) {
+    this.submissionBatch = submissionBatch;
+    return this;
+  }
+
+  /**
+   * Get submissionBatch
+   * @return submissionBatch
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_BATCH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public SubmissionBatch getSubmissionBatch() {
+    return submissionBatch;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_BATCH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissionBatch(@javax.annotation.Nonnull SubmissionBatch submissionBatch) {
+    this.submissionBatch = submissionBatch;
+  }
+
+
+  public BatchGeneratePdfs201Response submissions(@javax.annotation.Nonnull List<Object> submissions) {
+    this.submissions = submissions;
+    return this;
+  }
+
+  public BatchGeneratePdfs201Response addSubmissionsItem(Object submissionsItem) {
+    if (this.submissions == null) {
+      this.submissions = new ArrayList<>();
+    }
+    this.submissions.add(submissionsItem);
+    return this;
+  }
+
+  /**
+   * Get submissions
+   * @return submissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<Object> getSubmissions() {
+    return submissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissions(@javax.annotation.Nonnull List<Object> submissions) {
+    this.submissions = submissions;
+  }
+
+
+  /**
+   * Return true if this batchGeneratePdfs_201_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    BatchGeneratePdfs201Response batchGeneratePdfs201Response = (BatchGeneratePdfs201Response) o;
+    return Objects.equals(this.status, batchGeneratePdfs201Response.status) &&
+        Objects.equals(this.error, batchGeneratePdfs201Response.error) &&
+        Objects.equals(this.errors, batchGeneratePdfs201Response.errors) &&
+        Objects.equals(this.submissionBatch, batchGeneratePdfs201Response.submissionBatch) &&
+        Objects.equals(this.submissions, batchGeneratePdfs201Response.submissions);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, error, errors, submissionBatch, submissions);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class BatchGeneratePdfs201Response {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    error: ").append(toIndentedString(error)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("    submissionBatch: ").append(toIndentedString(submissionBatch)).append("\n");
+    sb.append("    submissions: ").append(toIndentedString(submissions)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CombinePdfsData.java b/src/main/java/com/docspring/CombinePdfsData.java
new file mode 100644
index 0000000..a240331
--- /dev/null
+++ b/src/main/java/com/docspring/CombinePdfsData.java
@@ -0,0 +1,281 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CombinePdfsData
+ */
+@JsonPropertyOrder({
+  CombinePdfsData.JSON_PROPERTY_DELETE_CUSTOM_FILES,
+  CombinePdfsData.JSON_PROPERTY_EXPIRES_IN,
+  CombinePdfsData.JSON_PROPERTY_METADATA,
+  CombinePdfsData.JSON_PROPERTY_PASSWORD,
+  CombinePdfsData.JSON_PROPERTY_SOURCE_PDFS,
+  CombinePdfsData.JSON_PROPERTY_TEST
+})
+@JsonTypeName("combine_pdfs_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CombinePdfsData {
+  public static final String JSON_PROPERTY_DELETE_CUSTOM_FILES = "delete_custom_files";
+  @javax.annotation.Nullable
+  private Boolean deleteCustomFiles;
+
+  public static final String JSON_PROPERTY_EXPIRES_IN = "expires_in";
+  @javax.annotation.Nullable
+  private Integer expiresIn;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PASSWORD = "password";
+  @javax.annotation.Nullable
+  private String password;
+
+  public static final String JSON_PROPERTY_SOURCE_PDFS = "source_pdfs";
+  @javax.annotation.Nonnull
+  private List<Object> sourcePdfs = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_TEST = "test";
+  @javax.annotation.Nullable
+  private Boolean test;
+
+  public CombinePdfsData() { 
+  }
+
+  public CombinePdfsData deleteCustomFiles(@javax.annotation.Nullable Boolean deleteCustomFiles) {
+    this.deleteCustomFiles = deleteCustomFiles;
+    return this;
+  }
+
+  /**
+   * Get deleteCustomFiles
+   * @return deleteCustomFiles
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DELETE_CUSTOM_FILES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getDeleteCustomFiles() {
+    return deleteCustomFiles;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DELETE_CUSTOM_FILES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setDeleteCustomFiles(@javax.annotation.Nullable Boolean deleteCustomFiles) {
+    this.deleteCustomFiles = deleteCustomFiles;
+  }
+
+
+  public CombinePdfsData expiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+    return this;
+  }
+
+  /**
+   * Get expiresIn
+   * @return expiresIn
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Integer getExpiresIn() {
+    return expiresIn;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setExpiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+  }
+
+
+  public CombinePdfsData metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public CombinePdfsData password(@javax.annotation.Nullable String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getPassword() {
+    return password;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setPassword(@javax.annotation.Nullable String password) {
+    this.password = password;
+  }
+
+
+  public CombinePdfsData sourcePdfs(@javax.annotation.Nonnull List<Object> sourcePdfs) {
+    this.sourcePdfs = sourcePdfs;
+    return this;
+  }
+
+  public CombinePdfsData addSourcePdfsItem(Object sourcePdfsItem) {
+    if (this.sourcePdfs == null) {
+      this.sourcePdfs = new ArrayList<>();
+    }
+    this.sourcePdfs.add(sourcePdfsItem);
+    return this;
+  }
+
+  /**
+   * Get sourcePdfs
+   * @return sourcePdfs
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SOURCE_PDFS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<Object> getSourcePdfs() {
+    return sourcePdfs;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SOURCE_PDFS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSourcePdfs(@javax.annotation.Nonnull List<Object> sourcePdfs) {
+    this.sourcePdfs = sourcePdfs;
+  }
+
+
+  public CombinePdfsData test(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+    return this;
+  }
+
+  /**
+   * Get test
+   * @return test
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getTest() {
+    return test;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setTest(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+  }
+
+
+  /**
+   * Return true if this combine_pdfs_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CombinePdfsData combinePdfsData = (CombinePdfsData) o;
+    return Objects.equals(this.deleteCustomFiles, combinePdfsData.deleteCustomFiles) &&
+        Objects.equals(this.expiresIn, combinePdfsData.expiresIn) &&
+        Objects.equals(this.metadata, combinePdfsData.metadata) &&
+        Objects.equals(this.password, combinePdfsData.password) &&
+        Objects.equals(this.sourcePdfs, combinePdfsData.sourcePdfs) &&
+        Objects.equals(this.test, combinePdfsData.test);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(deleteCustomFiles, expiresIn, metadata, password, sourcePdfs, test);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CombinePdfsData {\n");
+    sb.append("    deleteCustomFiles: ").append(toIndentedString(deleteCustomFiles)).append("\n");
+    sb.append("    expiresIn: ").append(toIndentedString(expiresIn)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    sourcePdfs: ").append(toIndentedString(sourcePdfs)).append("\n");
+    sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CombinedSubmission.java b/src/main/java/com/docspring/CombinedSubmission.java
new file mode 100644
index 0000000..67c8c29
--- /dev/null
+++ b/src/main/java/com/docspring/CombinedSubmission.java
@@ -0,0 +1,591 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.CombinedSubmissionAction;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CombinedSubmission
+ */
+@JsonPropertyOrder({
+  CombinedSubmission.JSON_PROPERTY_ID,
+  CombinedSubmission.JSON_PROPERTY_STATE,
+  CombinedSubmission.JSON_PROPERTY_EXPIRED,
+  CombinedSubmission.JSON_PROPERTY_EXPIRES_IN,
+  CombinedSubmission.JSON_PROPERTY_EXPIRES_AT,
+  CombinedSubmission.JSON_PROPERTY_PROCESSED_AT,
+  CombinedSubmission.JSON_PROPERTY_ERROR_MESSAGE,
+  CombinedSubmission.JSON_PROPERTY_SUBMISSION_IDS,
+  CombinedSubmission.JSON_PROPERTY_SOURCE_PDFS,
+  CombinedSubmission.JSON_PROPERTY_METADATA,
+  CombinedSubmission.JSON_PROPERTY_PASSWORD,
+  CombinedSubmission.JSON_PROPERTY_PDF_HASH,
+  CombinedSubmission.JSON_PROPERTY_DOWNLOAD_URL,
+  CombinedSubmission.JSON_PROPERTY_ACTIONS
+})
+@JsonTypeName("combined_submission")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CombinedSubmission {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  public static final String JSON_PROPERTY_EXPIRED = "expired";
+  @javax.annotation.Nonnull
+  private Boolean expired;
+
+  public static final String JSON_PROPERTY_EXPIRES_IN = "expires_in";
+  @javax.annotation.Nullable
+  private Integer expiresIn;
+
+  public static final String JSON_PROPERTY_EXPIRES_AT = "expires_at";
+  @javax.annotation.Nullable
+  private String expiresAt;
+
+  public static final String JSON_PROPERTY_PROCESSED_AT = "processed_at";
+  @javax.annotation.Nullable
+  private String processedAt;
+
+  public static final String JSON_PROPERTY_ERROR_MESSAGE = "error_message";
+  @javax.annotation.Nullable
+  private String errorMessage;
+
+  public static final String JSON_PROPERTY_SUBMISSION_IDS = "submission_ids";
+  @javax.annotation.Nonnull
+  private List<String> submissionIds = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_SOURCE_PDFS = "source_pdfs";
+  @javax.annotation.Nonnull
+  private List<Object> sourcePdfs = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nonnull
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PASSWORD = "password";
+  @javax.annotation.Nullable
+  private String password;
+
+  public static final String JSON_PROPERTY_PDF_HASH = "pdf_hash";
+  @javax.annotation.Nullable
+  private String pdfHash;
+
+  public static final String JSON_PROPERTY_DOWNLOAD_URL = "download_url";
+  @javax.annotation.Nullable
+  private String downloadUrl;
+
+  public static final String JSON_PROPERTY_ACTIONS = "actions";
+  @javax.annotation.Nonnull
+  private List<CombinedSubmissionAction> actions = new ArrayList<>();
+
+  public CombinedSubmission() { 
+  }
+
+  public CombinedSubmission id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public CombinedSubmission state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public CombinedSubmission expired(@javax.annotation.Nonnull Boolean expired) {
+    this.expired = expired;
+    return this;
+  }
+
+  /**
+   * Get expired
+   * @return expired
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getExpired() {
+    return expired;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpired(@javax.annotation.Nonnull Boolean expired) {
+    this.expired = expired;
+  }
+
+
+  public CombinedSubmission expiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+    return this;
+  }
+
+  /**
+   * Get expiresIn
+   * @return expiresIn
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getExpiresIn() {
+    return expiresIn;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+  }
+
+
+  public CombinedSubmission expiresAt(@javax.annotation.Nullable String expiresAt) {
+    this.expiresAt = expiresAt;
+    return this;
+  }
+
+  /**
+   * Get expiresAt
+   * @return expiresAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExpiresAt() {
+    return expiresAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpiresAt(@javax.annotation.Nullable String expiresAt) {
+    this.expiresAt = expiresAt;
+  }
+
+
+  public CombinedSubmission processedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+    return this;
+  }
+
+  /**
+   * Get processedAt
+   * @return processedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getProcessedAt() {
+    return processedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setProcessedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+  }
+
+
+  public CombinedSubmission errorMessage(@javax.annotation.Nullable String errorMessage) {
+    this.errorMessage = errorMessage;
+    return this;
+  }
+
+  /**
+   * Get errorMessage
+   * @return errorMessage
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERROR_MESSAGE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getErrorMessage() {
+    return errorMessage;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERROR_MESSAGE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setErrorMessage(@javax.annotation.Nullable String errorMessage) {
+    this.errorMessage = errorMessage;
+  }
+
+
+  public CombinedSubmission submissionIds(@javax.annotation.Nonnull List<String> submissionIds) {
+    this.submissionIds = submissionIds;
+    return this;
+  }
+
+  public CombinedSubmission addSubmissionIdsItem(String submissionIdsItem) {
+    if (this.submissionIds == null) {
+      this.submissionIds = new ArrayList<>();
+    }
+    this.submissionIds.add(submissionIdsItem);
+    return this;
+  }
+
+  /**
+   * Get submissionIds
+   * @return submissionIds
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_IDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<String> getSubmissionIds() {
+    return submissionIds;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_IDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissionIds(@javax.annotation.Nonnull List<String> submissionIds) {
+    this.submissionIds = submissionIds;
+  }
+
+
+  public CombinedSubmission sourcePdfs(@javax.annotation.Nonnull List<Object> sourcePdfs) {
+    this.sourcePdfs = sourcePdfs;
+    return this;
+  }
+
+  public CombinedSubmission addSourcePdfsItem(Object sourcePdfsItem) {
+    if (this.sourcePdfs == null) {
+      this.sourcePdfs = new ArrayList<>();
+    }
+    this.sourcePdfs.add(sourcePdfsItem);
+    return this;
+  }
+
+  /**
+   * Get sourcePdfs
+   * @return sourcePdfs
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SOURCE_PDFS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<Object> getSourcePdfs() {
+    return sourcePdfs;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SOURCE_PDFS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSourcePdfs(@javax.annotation.Nonnull List<Object> sourcePdfs) {
+    this.sourcePdfs = sourcePdfs;
+  }
+
+
+  public CombinedSubmission metadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMetadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public CombinedSubmission password(@javax.annotation.Nullable String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPassword() {
+    return password;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPassword(@javax.annotation.Nullable String password) {
+    this.password = password;
+  }
+
+
+  public CombinedSubmission pdfHash(@javax.annotation.Nullable String pdfHash) {
+    this.pdfHash = pdfHash;
+    return this;
+  }
+
+  /**
+   * Get pdfHash
+   * @return pdfHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PDF_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPdfHash() {
+    return pdfHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PDF_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPdfHash(@javax.annotation.Nullable String pdfHash) {
+    this.pdfHash = pdfHash;
+  }
+
+
+  public CombinedSubmission downloadUrl(@javax.annotation.Nullable String downloadUrl) {
+    this.downloadUrl = downloadUrl;
+    return this;
+  }
+
+  /**
+   * Get downloadUrl
+   * @return downloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDownloadUrl() {
+    return downloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDownloadUrl(@javax.annotation.Nullable String downloadUrl) {
+    this.downloadUrl = downloadUrl;
+  }
+
+
+  public CombinedSubmission actions(@javax.annotation.Nonnull List<CombinedSubmissionAction> actions) {
+    this.actions = actions;
+    return this;
+  }
+
+  public CombinedSubmission addActionsItem(CombinedSubmissionAction actionsItem) {
+    if (this.actions == null) {
+      this.actions = new ArrayList<>();
+    }
+    this.actions.add(actionsItem);
+    return this;
+  }
+
+  /**
+   * Get actions
+   * @return actions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ACTIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<CombinedSubmissionAction> getActions() {
+    return actions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ACTIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setActions(@javax.annotation.Nonnull List<CombinedSubmissionAction> actions) {
+    this.actions = actions;
+  }
+
+
+  /**
+   * Return true if this combined_submission object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CombinedSubmission combinedSubmission = (CombinedSubmission) o;
+    return Objects.equals(this.id, combinedSubmission.id) &&
+        Objects.equals(this.state, combinedSubmission.state) &&
+        Objects.equals(this.expired, combinedSubmission.expired) &&
+        Objects.equals(this.expiresIn, combinedSubmission.expiresIn) &&
+        Objects.equals(this.expiresAt, combinedSubmission.expiresAt) &&
+        Objects.equals(this.processedAt, combinedSubmission.processedAt) &&
+        Objects.equals(this.errorMessage, combinedSubmission.errorMessage) &&
+        Objects.equals(this.submissionIds, combinedSubmission.submissionIds) &&
+        Objects.equals(this.sourcePdfs, combinedSubmission.sourcePdfs) &&
+        Objects.equals(this.metadata, combinedSubmission.metadata) &&
+        Objects.equals(this.password, combinedSubmission.password) &&
+        Objects.equals(this.pdfHash, combinedSubmission.pdfHash) &&
+        Objects.equals(this.downloadUrl, combinedSubmission.downloadUrl) &&
+        Objects.equals(this.actions, combinedSubmission.actions);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, state, expired, expiresIn, expiresAt, processedAt, errorMessage, submissionIds, sourcePdfs, metadata, password, pdfHash, downloadUrl, actions);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CombinedSubmission {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    expired: ").append(toIndentedString(expired)).append("\n");
+    sb.append("    expiresIn: ").append(toIndentedString(expiresIn)).append("\n");
+    sb.append("    expiresAt: ").append(toIndentedString(expiresAt)).append("\n");
+    sb.append("    processedAt: ").append(toIndentedString(processedAt)).append("\n");
+    sb.append("    errorMessage: ").append(toIndentedString(errorMessage)).append("\n");
+    sb.append("    submissionIds: ").append(toIndentedString(submissionIds)).append("\n");
+    sb.append("    sourcePdfs: ").append(toIndentedString(sourcePdfs)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    pdfHash: ").append(toIndentedString(pdfHash)).append("\n");
+    sb.append("    downloadUrl: ").append(toIndentedString(downloadUrl)).append("\n");
+    sb.append("    actions: ").append(toIndentedString(actions)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CombinedSubmissionAction.java b/src/main/java/com/docspring/CombinedSubmissionAction.java
new file mode 100644
index 0000000..261c9a1
--- /dev/null
+++ b/src/main/java/com/docspring/CombinedSubmissionAction.java
@@ -0,0 +1,384 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CombinedSubmissionAction
+ */
+@JsonPropertyOrder({
+  CombinedSubmissionAction.JSON_PROPERTY_ID,
+  CombinedSubmissionAction.JSON_PROPERTY_INTEGRATION_ID,
+  CombinedSubmissionAction.JSON_PROPERTY_STATE,
+  CombinedSubmissionAction.JSON_PROPERTY_ACTION_TYPE,
+  CombinedSubmissionAction.JSON_PROPERTY_ACTION_CATEGORY,
+  CombinedSubmissionAction.JSON_PROPERTY_RESULT_DATA
+})
+@JsonTypeName("combined_submission_action")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CombinedSubmissionAction {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_INTEGRATION_ID = "integration_id";
+  @javax.annotation.Nullable
+  private String integrationId;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    FAILED(String.valueOf("failed")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  /**
+   * Gets or Sets actionType
+   */
+  public enum ActionTypeEnum {
+    WEBHOOK(String.valueOf("webhook")),
+    
+    SLACK_WEBHOOK(String.valueOf("slack_webhook")),
+    
+    EMAIL(String.valueOf("email")),
+    
+    AWS_S3_UPLOAD(String.valueOf("aws_s3_upload"));
+
+    private String value;
+
+    ActionTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ActionTypeEnum fromValue(String value) {
+      for (ActionTypeEnum b : ActionTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_ACTION_TYPE = "action_type";
+  @javax.annotation.Nonnull
+  private ActionTypeEnum actionType;
+
+  /**
+   * Gets or Sets actionCategory
+   */
+  public enum ActionCategoryEnum {
+    NOTIFICATION(String.valueOf("notification")),
+    
+    FILE_UPLOAD(String.valueOf("file_upload"));
+
+    private String value;
+
+    ActionCategoryEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ActionCategoryEnum fromValue(String value) {
+      for (ActionCategoryEnum b : ActionCategoryEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_ACTION_CATEGORY = "action_category";
+  @javax.annotation.Nonnull
+  private ActionCategoryEnum actionCategory;
+
+  public static final String JSON_PROPERTY_RESULT_DATA = "result_data";
+  @javax.annotation.Nonnull
+  private Object resultData;
+
+  public CombinedSubmissionAction() { 
+  }
+
+  public CombinedSubmissionAction id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public CombinedSubmissionAction integrationId(@javax.annotation.Nullable String integrationId) {
+    this.integrationId = integrationId;
+    return this;
+  }
+
+  /**
+   * Get integrationId
+   * @return integrationId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_INTEGRATION_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getIntegrationId() {
+    return integrationId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_INTEGRATION_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setIntegrationId(@javax.annotation.Nullable String integrationId) {
+    this.integrationId = integrationId;
+  }
+
+
+  public CombinedSubmissionAction state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public CombinedSubmissionAction actionType(@javax.annotation.Nonnull ActionTypeEnum actionType) {
+    this.actionType = actionType;
+    return this;
+  }
+
+  /**
+   * Get actionType
+   * @return actionType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ACTION_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public ActionTypeEnum getActionType() {
+    return actionType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ACTION_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setActionType(@javax.annotation.Nonnull ActionTypeEnum actionType) {
+    this.actionType = actionType;
+  }
+
+
+  public CombinedSubmissionAction actionCategory(@javax.annotation.Nonnull ActionCategoryEnum actionCategory) {
+    this.actionCategory = actionCategory;
+    return this;
+  }
+
+  /**
+   * Get actionCategory
+   * @return actionCategory
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ACTION_CATEGORY)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public ActionCategoryEnum getActionCategory() {
+    return actionCategory;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ACTION_CATEGORY)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setActionCategory(@javax.annotation.Nonnull ActionCategoryEnum actionCategory) {
+    this.actionCategory = actionCategory;
+  }
+
+
+  public CombinedSubmissionAction resultData(@javax.annotation.Nonnull Object resultData) {
+    this.resultData = resultData;
+    return this;
+  }
+
+  /**
+   * Get resultData
+   * @return resultData
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_RESULT_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getResultData() {
+    return resultData;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_RESULT_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setResultData(@javax.annotation.Nonnull Object resultData) {
+    this.resultData = resultData;
+  }
+
+
+  /**
+   * Return true if this combined_submission_action object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CombinedSubmissionAction combinedSubmissionAction = (CombinedSubmissionAction) o;
+    return Objects.equals(this.id, combinedSubmissionAction.id) &&
+        Objects.equals(this.integrationId, combinedSubmissionAction.integrationId) &&
+        Objects.equals(this.state, combinedSubmissionAction.state) &&
+        Objects.equals(this.actionType, combinedSubmissionAction.actionType) &&
+        Objects.equals(this.actionCategory, combinedSubmissionAction.actionCategory) &&
+        Objects.equals(this.resultData, combinedSubmissionAction.resultData);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, integrationId, state, actionType, actionCategory, resultData);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CombinedSubmissionAction {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    integrationId: ").append(toIndentedString(integrationId)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    actionType: ").append(toIndentedString(actionType)).append("\n");
+    sb.append("    actionCategory: ").append(toIndentedString(actionCategory)).append("\n");
+    sb.append("    resultData: ").append(toIndentedString(resultData)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CombinedSubmissionData.java b/src/main/java/com/docspring/CombinedSubmissionData.java
new file mode 100644
index 0000000..2c32ff9
--- /dev/null
+++ b/src/main/java/com/docspring/CombinedSubmissionData.java
@@ -0,0 +1,249 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CombinedSubmissionData
+ */
+@JsonPropertyOrder({
+  CombinedSubmissionData.JSON_PROPERTY_EXPIRES_IN,
+  CombinedSubmissionData.JSON_PROPERTY_METADATA,
+  CombinedSubmissionData.JSON_PROPERTY_PASSWORD,
+  CombinedSubmissionData.JSON_PROPERTY_SUBMISSION_IDS,
+  CombinedSubmissionData.JSON_PROPERTY_TEST
+})
+@JsonTypeName("combined_submission_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CombinedSubmissionData {
+  public static final String JSON_PROPERTY_EXPIRES_IN = "expires_in";
+  @javax.annotation.Nullable
+  private Integer expiresIn;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PASSWORD = "password";
+  @javax.annotation.Nullable
+  private String password;
+
+  public static final String JSON_PROPERTY_SUBMISSION_IDS = "submission_ids";
+  @javax.annotation.Nonnull
+  private List<String> submissionIds = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_TEST = "test";
+  @javax.annotation.Nullable
+  private Boolean test;
+
+  public CombinedSubmissionData() { 
+  }
+
+  public CombinedSubmissionData expiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+    return this;
+  }
+
+  /**
+   * Get expiresIn
+   * @return expiresIn
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Integer getExpiresIn() {
+    return expiresIn;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setExpiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+  }
+
+
+  public CombinedSubmissionData metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public CombinedSubmissionData password(@javax.annotation.Nullable String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getPassword() {
+    return password;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setPassword(@javax.annotation.Nullable String password) {
+    this.password = password;
+  }
+
+
+  public CombinedSubmissionData submissionIds(@javax.annotation.Nonnull List<String> submissionIds) {
+    this.submissionIds = submissionIds;
+    return this;
+  }
+
+  public CombinedSubmissionData addSubmissionIdsItem(String submissionIdsItem) {
+    if (this.submissionIds == null) {
+      this.submissionIds = new ArrayList<>();
+    }
+    this.submissionIds.add(submissionIdsItem);
+    return this;
+  }
+
+  /**
+   * Get submissionIds
+   * @return submissionIds
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_IDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<String> getSubmissionIds() {
+    return submissionIds;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_IDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissionIds(@javax.annotation.Nonnull List<String> submissionIds) {
+    this.submissionIds = submissionIds;
+  }
+
+
+  public CombinedSubmissionData test(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+    return this;
+  }
+
+  /**
+   * Get test
+   * @return test
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getTest() {
+    return test;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setTest(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+  }
+
+
+  /**
+   * Return true if this combined_submission_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CombinedSubmissionData combinedSubmissionData = (CombinedSubmissionData) o;
+    return Objects.equals(this.expiresIn, combinedSubmissionData.expiresIn) &&
+        Objects.equals(this.metadata, combinedSubmissionData.metadata) &&
+        Objects.equals(this.password, combinedSubmissionData.password) &&
+        Objects.equals(this.submissionIds, combinedSubmissionData.submissionIds) &&
+        Objects.equals(this.test, combinedSubmissionData.test);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(expiresIn, metadata, password, submissionIds, test);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CombinedSubmissionData {\n");
+    sb.append("    expiresIn: ").append(toIndentedString(expiresIn)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    submissionIds: ").append(toIndentedString(submissionIds)).append("\n");
+    sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/Configuration.java b/src/main/java/com/docspring/Configuration.java
new file mode 100644
index 0000000..5df7efe
--- /dev/null
+++ b/src/main/java/com/docspring/Configuration.java
@@ -0,0 +1,41 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class Configuration {
+    public static final String VERSION = "2.0.0";
+
+    private static ApiClient defaultApiClient = new ApiClient();
+
+    /**
+     * Get the default API client, which would be used when creating API
+     * instances without providing an API client.
+     *
+     * @return Default API client
+     */
+    public static ApiClient getDefaultApiClient() {
+        return defaultApiClient;
+    }
+
+    /**
+     * Set the default API client, which would be used when creating API
+     * instances without providing an API client.
+     *
+     * @param apiClient API client
+     */
+    public static void setDefaultApiClient(ApiClient apiClient) {
+        defaultApiClient = apiClient;
+    }
+}
diff --git a/src/main/java/com/docspring/CopyTemplateOptions.java b/src/main/java/com/docspring/CopyTemplateOptions.java
new file mode 100644
index 0000000..9f124ed
--- /dev/null
+++ b/src/main/java/com/docspring/CopyTemplateOptions.java
@@ -0,0 +1,143 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CopyTemplateOptions
+ */
+@JsonPropertyOrder({
+  CopyTemplateOptions.JSON_PROPERTY_NAME,
+  CopyTemplateOptions.JSON_PROPERTY_PARENT_FOLDER_ID
+})
+@JsonTypeName("copy_template_options")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CopyTemplateOptions {
+  public static final String JSON_PROPERTY_NAME = "name";
+  @javax.annotation.Nullable
+  private String name;
+
+  public static final String JSON_PROPERTY_PARENT_FOLDER_ID = "parent_folder_id";
+  @javax.annotation.Nonnull
+  private String parentFolderId;
+
+  public CopyTemplateOptions() { 
+  }
+
+  public CopyTemplateOptions name(@javax.annotation.Nullable String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getName() {
+    return name;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setName(@javax.annotation.Nullable String name) {
+    this.name = name;
+  }
+
+
+  public CopyTemplateOptions parentFolderId(@javax.annotation.Nonnull String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+    return this;
+  }
+
+  /**
+   * Get parentFolderId
+   * @return parentFolderId
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getParentFolderId() {
+    return parentFolderId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setParentFolderId(@javax.annotation.Nonnull String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+  }
+
+
+  /**
+   * Return true if this copy_template_options object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CopyTemplateOptions copyTemplateOptions = (CopyTemplateOptions) o;
+    return Objects.equals(this.name, copyTemplateOptions.name) &&
+        Objects.equals(this.parentFolderId, copyTemplateOptions.parentFolderId);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, parentFolderId);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CopyTemplateOptions {\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    parentFolderId: ").append(toIndentedString(parentFolderId)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateCombinedSubmissionResponse.java b/src/main/java/com/docspring/CreateCombinedSubmissionResponse.java
new file mode 100644
index 0000000..d0c0f97
--- /dev/null
+++ b/src/main/java/com/docspring/CreateCombinedSubmissionResponse.java
@@ -0,0 +1,221 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.CombinedSubmission;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateCombinedSubmissionResponse
+ */
+@JsonPropertyOrder({
+  CreateCombinedSubmissionResponse.JSON_PROPERTY_STATUS,
+  CreateCombinedSubmissionResponse.JSON_PROPERTY_COMBINED_SUBMISSION,
+  CreateCombinedSubmissionResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("create_combined_submission_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateCombinedSubmissionResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_COMBINED_SUBMISSION = "combined_submission";
+  @javax.annotation.Nonnull
+  private CombinedSubmission combinedSubmission;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public CreateCombinedSubmissionResponse() { 
+  }
+
+  public CreateCombinedSubmissionResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public CreateCombinedSubmissionResponse combinedSubmission(@javax.annotation.Nonnull CombinedSubmission combinedSubmission) {
+    this.combinedSubmission = combinedSubmission;
+    return this;
+  }
+
+  /**
+   * Get combinedSubmission
+   * @return combinedSubmission
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_COMBINED_SUBMISSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public CombinedSubmission getCombinedSubmission() {
+    return combinedSubmission;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_COMBINED_SUBMISSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setCombinedSubmission(@javax.annotation.Nonnull CombinedSubmission combinedSubmission) {
+    this.combinedSubmission = combinedSubmission;
+  }
+
+
+  public CreateCombinedSubmissionResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public CreateCombinedSubmissionResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this create_combined_submission_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateCombinedSubmissionResponse createCombinedSubmissionResponse = (CreateCombinedSubmissionResponse) o;
+    return Objects.equals(this.status, createCombinedSubmissionResponse.status) &&
+        Objects.equals(this.combinedSubmission, createCombinedSubmissionResponse.combinedSubmission) &&
+        Objects.equals(this.errors, createCombinedSubmissionResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, combinedSubmission, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateCombinedSubmissionResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    combinedSubmission: ").append(toIndentedString(combinedSubmission)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateCustomFileData.java b/src/main/java/com/docspring/CreateCustomFileData.java
new file mode 100644
index 0000000..f494b25
--- /dev/null
+++ b/src/main/java/com/docspring/CreateCustomFileData.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateCustomFileData
+ */
+@JsonPropertyOrder({
+  CreateCustomFileData.JSON_PROPERTY_CACHE_ID
+})
+@JsonTypeName("create_custom_file_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateCustomFileData {
+  public static final String JSON_PROPERTY_CACHE_ID = "cache_id";
+  @javax.annotation.Nonnull
+  private String cacheId;
+
+  public CreateCustomFileData() { 
+  }
+
+  public CreateCustomFileData cacheId(@javax.annotation.Nonnull String cacheId) {
+    this.cacheId = cacheId;
+    return this;
+  }
+
+  /**
+   * Get cacheId
+   * @return cacheId
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_CACHE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getCacheId() {
+    return cacheId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_CACHE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setCacheId(@javax.annotation.Nonnull String cacheId) {
+    this.cacheId = cacheId;
+  }
+
+
+  /**
+   * Return true if this create_custom_file_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateCustomFileData createCustomFileData = (CreateCustomFileData) o;
+    return Objects.equals(this.cacheId, createCustomFileData.cacheId);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(cacheId);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateCustomFileData {\n");
+    sb.append("    cacheId: ").append(toIndentedString(cacheId)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateCustomFileResponse.java b/src/main/java/com/docspring/CreateCustomFileResponse.java
new file mode 100644
index 0000000..2026b13
--- /dev/null
+++ b/src/main/java/com/docspring/CreateCustomFileResponse.java
@@ -0,0 +1,221 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.CustomFile;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateCustomFileResponse
+ */
+@JsonPropertyOrder({
+  CreateCustomFileResponse.JSON_PROPERTY_STATUS,
+  CreateCustomFileResponse.JSON_PROPERTY_CUSTOM_FILE,
+  CreateCustomFileResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("create_custom_file_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateCustomFileResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_CUSTOM_FILE = "custom_file";
+  @javax.annotation.Nonnull
+  private CustomFile customFile;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public CreateCustomFileResponse() { 
+  }
+
+  public CreateCustomFileResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public CreateCustomFileResponse customFile(@javax.annotation.Nonnull CustomFile customFile) {
+    this.customFile = customFile;
+    return this;
+  }
+
+  /**
+   * Get customFile
+   * @return customFile
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_CUSTOM_FILE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public CustomFile getCustomFile() {
+    return customFile;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_CUSTOM_FILE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setCustomFile(@javax.annotation.Nonnull CustomFile customFile) {
+    this.customFile = customFile;
+  }
+
+
+  public CreateCustomFileResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public CreateCustomFileResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this create_custom_file_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateCustomFileResponse createCustomFileResponse = (CreateCustomFileResponse) o;
+    return Objects.equals(this.status, createCustomFileResponse.status) &&
+        Objects.equals(this.customFile, createCustomFileResponse.customFile) &&
+        Objects.equals(this.errors, createCustomFileResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, customFile, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateCustomFileResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    customFile: ").append(toIndentedString(customFile)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateFolderData.java b/src/main/java/com/docspring/CreateFolderData.java
new file mode 100644
index 0000000..5c3d161
--- /dev/null
+++ b/src/main/java/com/docspring/CreateFolderData.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateFolderData
+ */
+@JsonPropertyOrder({
+  CreateFolderData.JSON_PROPERTY_FOLDER
+})
+@JsonTypeName("create_folder_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateFolderData {
+  public static final String JSON_PROPERTY_FOLDER = "folder";
+  @javax.annotation.Nonnull
+  private Object folder;
+
+  public CreateFolderData() { 
+  }
+
+  public CreateFolderData folder(@javax.annotation.Nonnull Object folder) {
+    this.folder = folder;
+    return this;
+  }
+
+  /**
+   * Get folder
+   * @return folder
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_FOLDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getFolder() {
+    return folder;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FOLDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFolder(@javax.annotation.Nonnull Object folder) {
+    this.folder = folder;
+  }
+
+
+  /**
+   * Return true if this create_folder_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateFolderData createFolderData = (CreateFolderData) o;
+    return Objects.equals(this.folder, createFolderData.folder);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(folder);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateFolderData {\n");
+    sb.append("    folder: ").append(toIndentedString(folder)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateHtmlSubmissionData.java b/src/main/java/com/docspring/CreateHtmlSubmissionData.java
new file mode 100644
index 0000000..2acacc3
--- /dev/null
+++ b/src/main/java/com/docspring/CreateHtmlSubmissionData.java
@@ -0,0 +1,367 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateHtmlSubmissionData
+ */
+@JsonPropertyOrder({
+  CreateHtmlSubmissionData.JSON_PROPERTY_CSS,
+  CreateHtmlSubmissionData.JSON_PROPERTY_DATA,
+  CreateHtmlSubmissionData.JSON_PROPERTY_EDITABLE,
+  CreateHtmlSubmissionData.JSON_PROPERTY_EXPIRES_IN,
+  CreateHtmlSubmissionData.JSON_PROPERTY_FIELD_OVERRIDES,
+  CreateHtmlSubmissionData.JSON_PROPERTY_HTML,
+  CreateHtmlSubmissionData.JSON_PROPERTY_METADATA,
+  CreateHtmlSubmissionData.JSON_PROPERTY_PASSWORD,
+  CreateHtmlSubmissionData.JSON_PROPERTY_TEST
+})
+@JsonTypeName("create_html_submission_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateHtmlSubmissionData {
+  public static final String JSON_PROPERTY_CSS = "css";
+  @javax.annotation.Nullable
+  private String css;
+
+  public static final String JSON_PROPERTY_DATA = "data";
+  @javax.annotation.Nullable
+  private Object data;
+
+  public static final String JSON_PROPERTY_EDITABLE = "editable";
+  @javax.annotation.Nullable
+  private Boolean editable;
+
+  public static final String JSON_PROPERTY_EXPIRES_IN = "expires_in";
+  @javax.annotation.Nullable
+  private Integer expiresIn;
+
+  public static final String JSON_PROPERTY_FIELD_OVERRIDES = "field_overrides";
+  @javax.annotation.Nullable
+  private Object fieldOverrides;
+
+  public static final String JSON_PROPERTY_HTML = "html";
+  @javax.annotation.Nullable
+  private String html;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PASSWORD = "password";
+  @javax.annotation.Nullable
+  private String password;
+
+  public static final String JSON_PROPERTY_TEST = "test";
+  @javax.annotation.Nullable
+  private Boolean test;
+
+  public CreateHtmlSubmissionData() { 
+  }
+
+  public CreateHtmlSubmissionData css(@javax.annotation.Nullable String css) {
+    this.css = css;
+    return this;
+  }
+
+  /**
+   * Get css
+   * @return css
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_CSS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getCss() {
+    return css;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_CSS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setCss(@javax.annotation.Nullable String css) {
+    this.css = css;
+  }
+
+
+  public CreateHtmlSubmissionData data(@javax.annotation.Nullable Object data) {
+    this.data = data;
+    return this;
+  }
+
+  /**
+   * Get data
+   * @return data
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getData() {
+    return data;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setData(@javax.annotation.Nullable Object data) {
+    this.data = data;
+  }
+
+
+  public CreateHtmlSubmissionData editable(@javax.annotation.Nullable Boolean editable) {
+    this.editable = editable;
+    return this;
+  }
+
+  /**
+   * Get editable
+   * @return editable
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EDITABLE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getEditable() {
+    return editable;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EDITABLE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setEditable(@javax.annotation.Nullable Boolean editable) {
+    this.editable = editable;
+  }
+
+
+  public CreateHtmlSubmissionData expiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+    return this;
+  }
+
+  /**
+   * Get expiresIn
+   * @return expiresIn
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Integer getExpiresIn() {
+    return expiresIn;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setExpiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+  }
+
+
+  public CreateHtmlSubmissionData fieldOverrides(@javax.annotation.Nullable Object fieldOverrides) {
+    this.fieldOverrides = fieldOverrides;
+    return this;
+  }
+
+  /**
+   * Get fieldOverrides
+   * @return fieldOverrides
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_FIELD_OVERRIDES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getFieldOverrides() {
+    return fieldOverrides;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELD_OVERRIDES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setFieldOverrides(@javax.annotation.Nullable Object fieldOverrides) {
+    this.fieldOverrides = fieldOverrides;
+  }
+
+
+  public CreateHtmlSubmissionData html(@javax.annotation.Nullable String html) {
+    this.html = html;
+    return this;
+  }
+
+  /**
+   * Get html
+   * @return html
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_HTML)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getHtml() {
+    return html;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_HTML)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setHtml(@javax.annotation.Nullable String html) {
+    this.html = html;
+  }
+
+
+  public CreateHtmlSubmissionData metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public CreateHtmlSubmissionData password(@javax.annotation.Nullable String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getPassword() {
+    return password;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setPassword(@javax.annotation.Nullable String password) {
+    this.password = password;
+  }
+
+
+  public CreateHtmlSubmissionData test(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+    return this;
+  }
+
+  /**
+   * Get test
+   * @return test
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getTest() {
+    return test;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setTest(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+  }
+
+
+  /**
+   * Return true if this create_html_submission_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateHtmlSubmissionData createHtmlSubmissionData = (CreateHtmlSubmissionData) o;
+    return Objects.equals(this.css, createHtmlSubmissionData.css) &&
+        Objects.equals(this.data, createHtmlSubmissionData.data) &&
+        Objects.equals(this.editable, createHtmlSubmissionData.editable) &&
+        Objects.equals(this.expiresIn, createHtmlSubmissionData.expiresIn) &&
+        Objects.equals(this.fieldOverrides, createHtmlSubmissionData.fieldOverrides) &&
+        Objects.equals(this.html, createHtmlSubmissionData.html) &&
+        Objects.equals(this.metadata, createHtmlSubmissionData.metadata) &&
+        Objects.equals(this.password, createHtmlSubmissionData.password) &&
+        Objects.equals(this.test, createHtmlSubmissionData.test);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(css, data, editable, expiresIn, fieldOverrides, html, metadata, password, test);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateHtmlSubmissionData {\n");
+    sb.append("    css: ").append(toIndentedString(css)).append("\n");
+    sb.append("    data: ").append(toIndentedString(data)).append("\n");
+    sb.append("    editable: ").append(toIndentedString(editable)).append("\n");
+    sb.append("    expiresIn: ").append(toIndentedString(expiresIn)).append("\n");
+    sb.append("    fieldOverrides: ").append(toIndentedString(fieldOverrides)).append("\n");
+    sb.append("    html: ").append(toIndentedString(html)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateHtmlTemplate.java b/src/main/java/com/docspring/CreateHtmlTemplate.java
new file mode 100644
index 0000000..26cafbc
--- /dev/null
+++ b/src/main/java/com/docspring/CreateHtmlTemplate.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateHtmlTemplate
+ */
+@JsonPropertyOrder({
+  CreateHtmlTemplate.JSON_PROPERTY_TEMPLATE
+})
+@JsonTypeName("create_html_template")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateHtmlTemplate {
+  public static final String JSON_PROPERTY_TEMPLATE = "template";
+  @javax.annotation.Nonnull
+  private Object template;
+
+  public CreateHtmlTemplate() { 
+  }
+
+  public CreateHtmlTemplate template(@javax.annotation.Nonnull Object template) {
+    this.template = template;
+    return this;
+  }
+
+  /**
+   * Get template
+   * @return template
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getTemplate() {
+    return template;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplate(@javax.annotation.Nonnull Object template) {
+    this.template = template;
+  }
+
+
+  /**
+   * Return true if this create_html_template object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateHtmlTemplate createHtmlTemplate = (CreateHtmlTemplate) o;
+    return Objects.equals(this.template, createHtmlTemplate.template);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(template);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateHtmlTemplate {\n");
+    sb.append("    template: ").append(toIndentedString(template)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreatePdfSubmissionData.java b/src/main/java/com/docspring/CreatePdfSubmissionData.java
new file mode 100644
index 0000000..432f107
--- /dev/null
+++ b/src/main/java/com/docspring/CreatePdfSubmissionData.java
@@ -0,0 +1,346 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.CreateSubmissionDataRequestData;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreatePdfSubmissionData
+ */
+@JsonPropertyOrder({
+  CreatePdfSubmissionData.JSON_PROPERTY_DATA,
+  CreatePdfSubmissionData.JSON_PROPERTY_DATA_REQUESTS,
+  CreatePdfSubmissionData.JSON_PROPERTY_EDITABLE,
+  CreatePdfSubmissionData.JSON_PROPERTY_EXPIRES_IN,
+  CreatePdfSubmissionData.JSON_PROPERTY_FIELD_OVERRIDES,
+  CreatePdfSubmissionData.JSON_PROPERTY_METADATA,
+  CreatePdfSubmissionData.JSON_PROPERTY_PASSWORD,
+  CreatePdfSubmissionData.JSON_PROPERTY_TEST
+})
+@JsonTypeName("create_pdf_submission_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreatePdfSubmissionData {
+  public static final String JSON_PROPERTY_DATA = "data";
+  @javax.annotation.Nonnull
+  private Object data;
+
+  public static final String JSON_PROPERTY_DATA_REQUESTS = "data_requests";
+  @javax.annotation.Nullable
+  private List<CreateSubmissionDataRequestData> dataRequests = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_EDITABLE = "editable";
+  @javax.annotation.Nullable
+  private Boolean editable;
+
+  public static final String JSON_PROPERTY_EXPIRES_IN = "expires_in";
+  @javax.annotation.Nullable
+  private Integer expiresIn;
+
+  public static final String JSON_PROPERTY_FIELD_OVERRIDES = "field_overrides";
+  @javax.annotation.Nullable
+  private Object fieldOverrides;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PASSWORD = "password";
+  @javax.annotation.Nullable
+  private String password;
+
+  public static final String JSON_PROPERTY_TEST = "test";
+  @javax.annotation.Nullable
+  private Boolean test;
+
+  public CreatePdfSubmissionData() { 
+  }
+
+  public CreatePdfSubmissionData data(@javax.annotation.Nonnull Object data) {
+    this.data = data;
+    return this;
+  }
+
+  /**
+   * Get data
+   * @return data
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getData() {
+    return data;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setData(@javax.annotation.Nonnull Object data) {
+    this.data = data;
+  }
+
+
+  public CreatePdfSubmissionData dataRequests(@javax.annotation.Nullable List<CreateSubmissionDataRequestData> dataRequests) {
+    this.dataRequests = dataRequests;
+    return this;
+  }
+
+  public CreatePdfSubmissionData addDataRequestsItem(CreateSubmissionDataRequestData dataRequestsItem) {
+    if (this.dataRequests == null) {
+      this.dataRequests = new ArrayList<>();
+    }
+    this.dataRequests.add(dataRequestsItem);
+    return this;
+  }
+
+  /**
+   * Get dataRequests
+   * @return dataRequests
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DATA_REQUESTS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<CreateSubmissionDataRequestData> getDataRequests() {
+    return dataRequests;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA_REQUESTS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setDataRequests(@javax.annotation.Nullable List<CreateSubmissionDataRequestData> dataRequests) {
+    this.dataRequests = dataRequests;
+  }
+
+
+  public CreatePdfSubmissionData editable(@javax.annotation.Nullable Boolean editable) {
+    this.editable = editable;
+    return this;
+  }
+
+  /**
+   * Get editable
+   * @return editable
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EDITABLE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getEditable() {
+    return editable;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EDITABLE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setEditable(@javax.annotation.Nullable Boolean editable) {
+    this.editable = editable;
+  }
+
+
+  public CreatePdfSubmissionData expiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+    return this;
+  }
+
+  /**
+   * Get expiresIn
+   * @return expiresIn
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Integer getExpiresIn() {
+    return expiresIn;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_IN)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setExpiresIn(@javax.annotation.Nullable Integer expiresIn) {
+    this.expiresIn = expiresIn;
+  }
+
+
+  public CreatePdfSubmissionData fieldOverrides(@javax.annotation.Nullable Object fieldOverrides) {
+    this.fieldOverrides = fieldOverrides;
+    return this;
+  }
+
+  /**
+   * Get fieldOverrides
+   * @return fieldOverrides
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_FIELD_OVERRIDES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getFieldOverrides() {
+    return fieldOverrides;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELD_OVERRIDES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setFieldOverrides(@javax.annotation.Nullable Object fieldOverrides) {
+    this.fieldOverrides = fieldOverrides;
+  }
+
+
+  public CreatePdfSubmissionData metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public CreatePdfSubmissionData password(@javax.annotation.Nullable String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getPassword() {
+    return password;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setPassword(@javax.annotation.Nullable String password) {
+    this.password = password;
+  }
+
+
+  public CreatePdfSubmissionData test(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+    return this;
+  }
+
+  /**
+   * Get test
+   * @return test
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getTest() {
+    return test;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setTest(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+  }
+
+
+  /**
+   * Return true if this create_pdf_submission_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreatePdfSubmissionData createPdfSubmissionData = (CreatePdfSubmissionData) o;
+    return Objects.equals(this.data, createPdfSubmissionData.data) &&
+        Objects.equals(this.dataRequests, createPdfSubmissionData.dataRequests) &&
+        Objects.equals(this.editable, createPdfSubmissionData.editable) &&
+        Objects.equals(this.expiresIn, createPdfSubmissionData.expiresIn) &&
+        Objects.equals(this.fieldOverrides, createPdfSubmissionData.fieldOverrides) &&
+        Objects.equals(this.metadata, createPdfSubmissionData.metadata) &&
+        Objects.equals(this.password, createPdfSubmissionData.password) &&
+        Objects.equals(this.test, createPdfSubmissionData.test);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(data, dataRequests, editable, expiresIn, fieldOverrides, metadata, password, test);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreatePdfSubmissionData {\n");
+    sb.append("    data: ").append(toIndentedString(data)).append("\n");
+    sb.append("    dataRequests: ").append(toIndentedString(dataRequests)).append("\n");
+    sb.append("    editable: ").append(toIndentedString(editable)).append("\n");
+    sb.append("    expiresIn: ").append(toIndentedString(expiresIn)).append("\n");
+    sb.append("    fieldOverrides: ").append(toIndentedString(fieldOverrides)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreatePdfTemplate.java b/src/main/java/com/docspring/CreatePdfTemplate.java
new file mode 100644
index 0000000..60f2f82
--- /dev/null
+++ b/src/main/java/com/docspring/CreatePdfTemplate.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreatePdfTemplate
+ */
+@JsonPropertyOrder({
+  CreatePdfTemplate.JSON_PROPERTY_TEMPLATE
+})
+@JsonTypeName("create_pdf_template")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreatePdfTemplate {
+  public static final String JSON_PROPERTY_TEMPLATE = "template";
+  @javax.annotation.Nonnull
+  private Object template;
+
+  public CreatePdfTemplate() { 
+  }
+
+  public CreatePdfTemplate template(@javax.annotation.Nonnull Object template) {
+    this.template = template;
+    return this;
+  }
+
+  /**
+   * Get template
+   * @return template
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getTemplate() {
+    return template;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplate(@javax.annotation.Nonnull Object template) {
+    this.template = template;
+  }
+
+
+  /**
+   * Return true if this create_pdf_template object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreatePdfTemplate createPdfTemplate = (CreatePdfTemplate) o;
+    return Objects.equals(this.template, createPdfTemplate.template);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(template);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreatePdfTemplate {\n");
+    sb.append("    template: ").append(toIndentedString(template)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateSubmissionDataRequestData.java b/src/main/java/com/docspring/CreateSubmissionDataRequestData.java
new file mode 100644
index 0000000..94c0c24
--- /dev/null
+++ b/src/main/java/com/docspring/CreateSubmissionDataRequestData.java
@@ -0,0 +1,337 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateSubmissionDataRequestData
+ */
+@JsonPropertyOrder({
+  CreateSubmissionDataRequestData.JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE,
+  CreateSubmissionDataRequestData.JSON_PROPERTY_AUTH_TYPE,
+  CreateSubmissionDataRequestData.JSON_PROPERTY_FIELDS,
+  CreateSubmissionDataRequestData.JSON_PROPERTY_METADATA,
+  CreateSubmissionDataRequestData.JSON_PROPERTY_ORDER
+})
+@JsonTypeName("create_submission_data_request_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateSubmissionDataRequestData {
+  /**
+   * Gets or Sets authSecondFactorType
+   */
+  public enum AuthSecondFactorTypeEnum {
+    NONE(String.valueOf("none")),
+    
+    PHONE_NUMBER(String.valueOf("phone_number")),
+    
+    TOTP(String.valueOf("totp")),
+    
+    MOBILE_PUSH(String.valueOf("mobile_push")),
+    
+    SECURITY_KEY(String.valueOf("security_key")),
+    
+    FINGERPRINT(String.valueOf("fingerprint"));
+
+    private String value;
+
+    AuthSecondFactorTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static AuthSecondFactorTypeEnum fromValue(String value) {
+      for (AuthSecondFactorTypeEnum b : AuthSecondFactorTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE = "auth_second_factor_type";
+  @javax.annotation.Nullable
+  private AuthSecondFactorTypeEnum authSecondFactorType;
+
+  /**
+   * Gets or Sets authType
+   */
+  public enum AuthTypeEnum {
+    NONE(String.valueOf("none")),
+    
+    PASSWORD(String.valueOf("password")),
+    
+    OAUTH(String.valueOf("oauth")),
+    
+    EMAIL_LINK(String.valueOf("email_link")),
+    
+    PHONE_NUMBER(String.valueOf("phone_number")),
+    
+    LDAP(String.valueOf("ldap")),
+    
+    SAML(String.valueOf("saml"));
+
+    private String value;
+
+    AuthTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static AuthTypeEnum fromValue(String value) {
+      for (AuthTypeEnum b : AuthTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_AUTH_TYPE = "auth_type";
+  @javax.annotation.Nullable
+  private AuthTypeEnum authType;
+
+  public static final String JSON_PROPERTY_FIELDS = "fields";
+  @javax.annotation.Nullable
+  private List<String> fields = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_ORDER = "order";
+  @javax.annotation.Nullable
+  private Integer order;
+
+  public CreateSubmissionDataRequestData() { 
+  }
+
+  public CreateSubmissionDataRequestData authSecondFactorType(@javax.annotation.Nullable AuthSecondFactorTypeEnum authSecondFactorType) {
+    this.authSecondFactorType = authSecondFactorType;
+    return this;
+  }
+
+  /**
+   * Get authSecondFactorType
+   * @return authSecondFactorType
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public AuthSecondFactorTypeEnum getAuthSecondFactorType() {
+    return authSecondFactorType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setAuthSecondFactorType(@javax.annotation.Nullable AuthSecondFactorTypeEnum authSecondFactorType) {
+    this.authSecondFactorType = authSecondFactorType;
+  }
+
+
+  public CreateSubmissionDataRequestData authType(@javax.annotation.Nullable AuthTypeEnum authType) {
+    this.authType = authType;
+    return this;
+  }
+
+  /**
+   * Get authType
+   * @return authType
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public AuthTypeEnum getAuthType() {
+    return authType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setAuthType(@javax.annotation.Nullable AuthTypeEnum authType) {
+    this.authType = authType;
+  }
+
+
+  public CreateSubmissionDataRequestData fields(@javax.annotation.Nullable List<String> fields) {
+    this.fields = fields;
+    return this;
+  }
+
+  public CreateSubmissionDataRequestData addFieldsItem(String fieldsItem) {
+    if (this.fields == null) {
+      this.fields = new ArrayList<>();
+    }
+    this.fields.add(fieldsItem);
+    return this;
+  }
+
+  /**
+   * Get fields
+   * @return fields
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getFields() {
+    return fields;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setFields(@javax.annotation.Nullable List<String> fields) {
+    this.fields = fields;
+  }
+
+
+  public CreateSubmissionDataRequestData metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public CreateSubmissionDataRequestData order(@javax.annotation.Nullable Integer order) {
+    this.order = order;
+    return this;
+  }
+
+  /**
+   * Get order
+   * @return order
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ORDER)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Integer getOrder() {
+    return order;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ORDER)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setOrder(@javax.annotation.Nullable Integer order) {
+    this.order = order;
+  }
+
+
+  /**
+   * Return true if this create_submission_data_request_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateSubmissionDataRequestData createSubmissionDataRequestData = (CreateSubmissionDataRequestData) o;
+    return Objects.equals(this.authSecondFactorType, createSubmissionDataRequestData.authSecondFactorType) &&
+        Objects.equals(this.authType, createSubmissionDataRequestData.authType) &&
+        Objects.equals(this.fields, createSubmissionDataRequestData.fields) &&
+        Objects.equals(this.metadata, createSubmissionDataRequestData.metadata) &&
+        Objects.equals(this.order, createSubmissionDataRequestData.order);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(authSecondFactorType, authType, fields, metadata, order);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateSubmissionDataRequestData {\n");
+    sb.append("    authSecondFactorType: ").append(toIndentedString(authSecondFactorType)).append("\n");
+    sb.append("    authType: ").append(toIndentedString(authType)).append("\n");
+    sb.append("    fields: ").append(toIndentedString(fields)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    order: ").append(toIndentedString(order)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateSubmissionDataRequestEventRequest.java b/src/main/java/com/docspring/CreateSubmissionDataRequestEventRequest.java
new file mode 100644
index 0000000..4849138
--- /dev/null
+++ b/src/main/java/com/docspring/CreateSubmissionDataRequestEventRequest.java
@@ -0,0 +1,257 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import org.openapitools.jackson.nullable.JsonNullable;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.util.NoSuchElementException;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateSubmissionDataRequestEventRequest
+ */
+@JsonPropertyOrder({
+  CreateSubmissionDataRequestEventRequest.JSON_PROPERTY_EVENT_TYPE,
+  CreateSubmissionDataRequestEventRequest.JSON_PROPERTY_MESSAGE_TYPE
+})
+@JsonTypeName("create_submission_data_request_event_request")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateSubmissionDataRequestEventRequest {
+  /**
+   * Gets or Sets eventType
+   */
+  public enum EventTypeEnum {
+    SEND_REQUEST(String.valueOf("send_request")),
+    
+    VIEW_REQUEST(String.valueOf("view_request")),
+    
+    ACCEPTED_TERMS(String.valueOf("accepted_terms")),
+    
+    DECLINE_REQUEST(String.valueOf("decline_request")),
+    
+    SIGN_REQUEST(String.valueOf("sign_request")),
+    
+    ALL_COMPLETED(String.valueOf("all_completed"));
+
+    private String value;
+
+    EventTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EventTypeEnum fromValue(String value) {
+      for (EventTypeEnum b : EventTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_EVENT_TYPE = "event_type";
+  @javax.annotation.Nonnull
+  private EventTypeEnum eventType;
+
+  /**
+   * Gets or Sets messageType
+   */
+  public enum MessageTypeEnum {
+    EMAIL(String.valueOf("email")),
+    
+    SMS(String.valueOf("sms")),
+    
+    FAX(String.valueOf("fax")),
+    
+    MAIL(String.valueOf("mail")),
+    
+    SLACK(String.valueOf("slack")),
+    
+    MSTEAMS(String.valueOf("msteams")),
+    
+    DISCORD(String.valueOf("discord")),
+    
+    TELEGRAM(String.valueOf("telegram")),
+    
+    WHATSAPP(String.valueOf("whatsapp"));
+
+    private String value;
+
+    MessageTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static MessageTypeEnum fromValue(String value) {
+      for (MessageTypeEnum b : MessageTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      return null;
+    }
+  }
+
+  public static final String JSON_PROPERTY_MESSAGE_TYPE = "message_type";
+  private JsonNullable<MessageTypeEnum> messageType = JsonNullable.<MessageTypeEnum>undefined();
+
+  public CreateSubmissionDataRequestEventRequest() { 
+  }
+
+  public CreateSubmissionDataRequestEventRequest eventType(@javax.annotation.Nonnull EventTypeEnum eventType) {
+    this.eventType = eventType;
+    return this;
+  }
+
+  /**
+   * Get eventType
+   * @return eventType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EVENT_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public EventTypeEnum getEventType() {
+    return eventType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EVENT_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEventType(@javax.annotation.Nonnull EventTypeEnum eventType) {
+    this.eventType = eventType;
+  }
+
+
+  public CreateSubmissionDataRequestEventRequest messageType(@javax.annotation.Nullable MessageTypeEnum messageType) {
+    this.messageType = JsonNullable.<MessageTypeEnum>of(messageType);
+    return this;
+  }
+
+  /**
+   * Get messageType
+   * @return messageType
+   */
+  @javax.annotation.Nullable
+  @JsonIgnore
+
+  public MessageTypeEnum getMessageType() {
+        return messageType.orElse(null);
+  }
+
+  @JsonProperty(JSON_PROPERTY_MESSAGE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public JsonNullable<MessageTypeEnum> getMessageType_JsonNullable() {
+    return messageType;
+  }
+  
+  @JsonProperty(JSON_PROPERTY_MESSAGE_TYPE)
+  public void setMessageType_JsonNullable(JsonNullable<MessageTypeEnum> messageType) {
+    this.messageType = messageType;
+  }
+
+  public void setMessageType(@javax.annotation.Nullable MessageTypeEnum messageType) {
+    this.messageType = JsonNullable.<MessageTypeEnum>of(messageType);
+  }
+
+
+  /**
+   * Return true if this create_submission_data_request_event_request object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateSubmissionDataRequestEventRequest createSubmissionDataRequestEventRequest = (CreateSubmissionDataRequestEventRequest) o;
+    return Objects.equals(this.eventType, createSubmissionDataRequestEventRequest.eventType) &&
+        equalsNullable(this.messageType, createSubmissionDataRequestEventRequest.messageType);
+  }
+
+  private static <T> boolean equalsNullable(JsonNullable<T> a, JsonNullable<T> b) {
+    return a == b || (a != null && b != null && a.isPresent() && b.isPresent() && Objects.deepEquals(a.get(), b.get()));
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(eventType, hashCodeNullable(messageType));
+  }
+
+  private static <T> int hashCodeNullable(JsonNullable<T> a) {
+    if (a == null) {
+      return 1;
+    }
+    return a.isPresent() ? Arrays.deepHashCode(new Object[]{a.get()}) : 31;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateSubmissionDataRequestEventRequest {\n");
+    sb.append("    eventType: ").append(toIndentedString(eventType)).append("\n");
+    sb.append("    messageType: ").append(toIndentedString(messageType)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateSubmissionDataRequestEventResponse.java b/src/main/java/com/docspring/CreateSubmissionDataRequestEventResponse.java
new file mode 100644
index 0000000..1425405
--- /dev/null
+++ b/src/main/java/com/docspring/CreateSubmissionDataRequestEventResponse.java
@@ -0,0 +1,221 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.SubmissionDataRequestEvent;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateSubmissionDataRequestEventResponse
+ */
+@JsonPropertyOrder({
+  CreateSubmissionDataRequestEventResponse.JSON_PROPERTY_STATUS,
+  CreateSubmissionDataRequestEventResponse.JSON_PROPERTY_EVENT,
+  CreateSubmissionDataRequestEventResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("create_submission_data_request_event_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateSubmissionDataRequestEventResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_EVENT = "event";
+  @javax.annotation.Nonnull
+  private SubmissionDataRequestEvent event;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public CreateSubmissionDataRequestEventResponse() { 
+  }
+
+  public CreateSubmissionDataRequestEventResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public CreateSubmissionDataRequestEventResponse event(@javax.annotation.Nonnull SubmissionDataRequestEvent event) {
+    this.event = event;
+    return this;
+  }
+
+  /**
+   * Get event
+   * @return event
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EVENT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public SubmissionDataRequestEvent getEvent() {
+    return event;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EVENT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEvent(@javax.annotation.Nonnull SubmissionDataRequestEvent event) {
+    this.event = event;
+  }
+
+
+  public CreateSubmissionDataRequestEventResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public CreateSubmissionDataRequestEventResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this create_submission_data_request_event_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateSubmissionDataRequestEventResponse createSubmissionDataRequestEventResponse = (CreateSubmissionDataRequestEventResponse) o;
+    return Objects.equals(this.status, createSubmissionDataRequestEventResponse.status) &&
+        Objects.equals(this.event, createSubmissionDataRequestEventResponse.event) &&
+        Objects.equals(this.errors, createSubmissionDataRequestEventResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, event, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateSubmissionDataRequestEventResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    event: ").append(toIndentedString(event)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateSubmissionDataRequestResponse.java b/src/main/java/com/docspring/CreateSubmissionDataRequestResponse.java
new file mode 100644
index 0000000..f2c2abb
--- /dev/null
+++ b/src/main/java/com/docspring/CreateSubmissionDataRequestResponse.java
@@ -0,0 +1,221 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.SubmissionDataRequestShow;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateSubmissionDataRequestResponse
+ */
+@JsonPropertyOrder({
+  CreateSubmissionDataRequestResponse.JSON_PROPERTY_STATUS,
+  CreateSubmissionDataRequestResponse.JSON_PROPERTY_DATA_REQUEST,
+  CreateSubmissionDataRequestResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("create_submission_data_request_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateSubmissionDataRequestResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_DATA_REQUEST = "data_request";
+  @javax.annotation.Nonnull
+  private SubmissionDataRequestShow dataRequest;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public CreateSubmissionDataRequestResponse() { 
+  }
+
+  public CreateSubmissionDataRequestResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public CreateSubmissionDataRequestResponse dataRequest(@javax.annotation.Nonnull SubmissionDataRequestShow dataRequest) {
+    this.dataRequest = dataRequest;
+    return this;
+  }
+
+  /**
+   * Get dataRequest
+   * @return dataRequest
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DATA_REQUEST)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public SubmissionDataRequestShow getDataRequest() {
+    return dataRequest;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA_REQUEST)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDataRequest(@javax.annotation.Nonnull SubmissionDataRequestShow dataRequest) {
+    this.dataRequest = dataRequest;
+  }
+
+
+  public CreateSubmissionDataRequestResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public CreateSubmissionDataRequestResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this create_submission_data_request_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateSubmissionDataRequestResponse createSubmissionDataRequestResponse = (CreateSubmissionDataRequestResponse) o;
+    return Objects.equals(this.status, createSubmissionDataRequestResponse.status) &&
+        Objects.equals(this.dataRequest, createSubmissionDataRequestResponse.dataRequest) &&
+        Objects.equals(this.errors, createSubmissionDataRequestResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, dataRequest, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateSubmissionDataRequestResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    dataRequest: ").append(toIndentedString(dataRequest)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateSubmissionDataRequestTokenResponse.java b/src/main/java/com/docspring/CreateSubmissionDataRequestTokenResponse.java
new file mode 100644
index 0000000..296352a
--- /dev/null
+++ b/src/main/java/com/docspring/CreateSubmissionDataRequestTokenResponse.java
@@ -0,0 +1,221 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.SubmissionDataRequestToken;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateSubmissionDataRequestTokenResponse
+ */
+@JsonPropertyOrder({
+  CreateSubmissionDataRequestTokenResponse.JSON_PROPERTY_STATUS,
+  CreateSubmissionDataRequestTokenResponse.JSON_PROPERTY_TOKEN,
+  CreateSubmissionDataRequestTokenResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("create_submission_data_request_token_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateSubmissionDataRequestTokenResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_TOKEN = "token";
+  @javax.annotation.Nonnull
+  private SubmissionDataRequestToken token;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public CreateSubmissionDataRequestTokenResponse() { 
+  }
+
+  public CreateSubmissionDataRequestTokenResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public CreateSubmissionDataRequestTokenResponse token(@javax.annotation.Nonnull SubmissionDataRequestToken token) {
+    this.token = token;
+    return this;
+  }
+
+  /**
+   * Get token
+   * @return token
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TOKEN)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public SubmissionDataRequestToken getToken() {
+    return token;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TOKEN)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setToken(@javax.annotation.Nonnull SubmissionDataRequestToken token) {
+    this.token = token;
+  }
+
+
+  public CreateSubmissionDataRequestTokenResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public CreateSubmissionDataRequestTokenResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this create_submission_data_request_token_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateSubmissionDataRequestTokenResponse createSubmissionDataRequestTokenResponse = (CreateSubmissionDataRequestTokenResponse) o;
+    return Objects.equals(this.status, createSubmissionDataRequestTokenResponse.status) &&
+        Objects.equals(this.token, createSubmissionDataRequestTokenResponse.token) &&
+        Objects.equals(this.errors, createSubmissionDataRequestTokenResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, token, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateSubmissionDataRequestTokenResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    token: ").append(toIndentedString(token)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CreateSubmissionResponse.java b/src/main/java/com/docspring/CreateSubmissionResponse.java
new file mode 100644
index 0000000..3b64c3f
--- /dev/null
+++ b/src/main/java/com/docspring/CreateSubmissionResponse.java
@@ -0,0 +1,221 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.SubmissionPreview;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CreateSubmissionResponse
+ */
+@JsonPropertyOrder({
+  CreateSubmissionResponse.JSON_PROPERTY_STATUS,
+  CreateSubmissionResponse.JSON_PROPERTY_SUBMISSION,
+  CreateSubmissionResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("create_submission_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CreateSubmissionResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_SUBMISSION = "submission";
+  @javax.annotation.Nonnull
+  private SubmissionPreview submission;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public CreateSubmissionResponse() { 
+  }
+
+  public CreateSubmissionResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public CreateSubmissionResponse submission(@javax.annotation.Nonnull SubmissionPreview submission) {
+    this.submission = submission;
+    return this;
+  }
+
+  /**
+   * Get submission
+   * @return submission
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SUBMISSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public SubmissionPreview getSubmission() {
+    return submission;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmission(@javax.annotation.Nonnull SubmissionPreview submission) {
+    this.submission = submission;
+  }
+
+
+  public CreateSubmissionResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public CreateSubmissionResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this create_submission_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CreateSubmissionResponse createSubmissionResponse = (CreateSubmissionResponse) o;
+    return Objects.equals(this.status, createSubmissionResponse.status) &&
+        Objects.equals(this.submission, createSubmissionResponse.submission) &&
+        Objects.equals(this.errors, createSubmissionResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, submission, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CreateSubmissionResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    submission: ").append(toIndentedString(submission)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/CustomFile.java b/src/main/java/com/docspring/CustomFile.java
new file mode 100644
index 0000000..a5589f6
--- /dev/null
+++ b/src/main/java/com/docspring/CustomFile.java
@@ -0,0 +1,143 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * CustomFile
+ */
+@JsonPropertyOrder({
+  CustomFile.JSON_PROPERTY_ID,
+  CustomFile.JSON_PROPERTY_URL
+})
+@JsonTypeName("custom_file")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class CustomFile {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_URL = "url";
+  @javax.annotation.Nullable
+  private String url;
+
+  public CustomFile() { 
+  }
+
+  public CustomFile id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public CustomFile url(@javax.annotation.Nullable String url) {
+    this.url = url;
+    return this;
+  }
+
+  /**
+   * Get url
+   * @return url
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getUrl() {
+    return url;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setUrl(@javax.annotation.Nullable String url) {
+    this.url = url;
+  }
+
+
+  /**
+   * Return true if this custom_file object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    CustomFile customFile = (CustomFile) o;
+    return Objects.equals(this.id, customFile.id) &&
+        Objects.equals(this.url, customFile.url);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, url);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class CustomFile {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    url: ").append(toIndentedString(url)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/ErrorResponse.java b/src/main/java/com/docspring/ErrorResponse.java
new file mode 100644
index 0000000..5bc31da
--- /dev/null
+++ b/src/main/java/com/docspring/ErrorResponse.java
@@ -0,0 +1,176 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * ErrorResponse
+ */
+@JsonPropertyOrder({
+  ErrorResponse.JSON_PROPERTY_STATUS,
+  ErrorResponse.JSON_PROPERTY_ERROR
+})
+@JsonTypeName("error_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class ErrorResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_ERROR = "error";
+  @javax.annotation.Nonnull
+  private String error;
+
+  public ErrorResponse() { 
+  }
+
+  public ErrorResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public ErrorResponse error(@javax.annotation.Nonnull String error) {
+    this.error = error;
+    return this;
+  }
+
+  /**
+   * Get error
+   * @return error
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ERROR)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getError() {
+    return error;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERROR)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setError(@javax.annotation.Nonnull String error) {
+    this.error = error;
+  }
+
+
+  /**
+   * Return true if this error_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ErrorResponse errorResponse = (ErrorResponse) o;
+    return Objects.equals(this.status, errorResponse.status) &&
+        Objects.equals(this.error, errorResponse.error);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, error);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ErrorResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    error: ").append(toIndentedString(error)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/Folder.java b/src/main/java/com/docspring/Folder.java
new file mode 100644
index 0000000..9ca2f5b
--- /dev/null
+++ b/src/main/java/com/docspring/Folder.java
@@ -0,0 +1,207 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * Folder
+ */
+@JsonPropertyOrder({
+  Folder.JSON_PROPERTY_ID,
+  Folder.JSON_PROPERTY_NAME,
+  Folder.JSON_PROPERTY_PATH,
+  Folder.JSON_PROPERTY_PARENT_FOLDER_ID
+})
+@JsonTypeName("folder")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class Folder {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_NAME = "name";
+  @javax.annotation.Nullable
+  private String name;
+
+  public static final String JSON_PROPERTY_PATH = "path";
+  @javax.annotation.Nullable
+  private String path;
+
+  public static final String JSON_PROPERTY_PARENT_FOLDER_ID = "parent_folder_id";
+  @javax.annotation.Nullable
+  private String parentFolderId;
+
+  public Folder() { 
+  }
+
+  public Folder id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public Folder name(@javax.annotation.Nullable String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getName() {
+    return name;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setName(@javax.annotation.Nullable String name) {
+    this.name = name;
+  }
+
+
+  public Folder path(@javax.annotation.Nullable String path) {
+    this.path = path;
+    return this;
+  }
+
+  /**
+   * Get path
+   * @return path
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PATH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPath() {
+    return path;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PATH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPath(@javax.annotation.Nullable String path) {
+    this.path = path;
+  }
+
+
+  public Folder parentFolderId(@javax.annotation.Nullable String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+    return this;
+  }
+
+  /**
+   * Get parentFolderId
+   * @return parentFolderId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getParentFolderId() {
+    return parentFolderId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setParentFolderId(@javax.annotation.Nullable String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+  }
+
+
+  /**
+   * Return true if this folder object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Folder folder = (Folder) o;
+    return Objects.equals(this.id, folder.id) &&
+        Objects.equals(this.name, folder.name) &&
+        Objects.equals(this.path, folder.path) &&
+        Objects.equals(this.parentFolderId, folder.parentFolderId);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, name, path, parentFolderId);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Folder {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    path: ").append(toIndentedString(path)).append("\n");
+    sb.append("    parentFolderId: ").append(toIndentedString(parentFolderId)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/JSON.java b/src/main/java/com/docspring/JSON.java
new file mode 100644
index 0000000..9b8fceb
--- /dev/null
+++ b/src/main/java/com/docspring/JSON.java
@@ -0,0 +1,261 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.*;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.json.JsonMapper;
+import org.openapitools.jackson.nullable.JsonNullableModule;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+import java.text.DateFormat;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.ext.ContextResolver;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class JSON implements ContextResolver<ObjectMapper> {
+  private ObjectMapper mapper;
+
+  public JSON() {
+    mapper = JsonMapper.builder()
+            .serializationInclusion(JsonInclude.Include.NON_NULL)
+            .configure(MapperFeature.ALLOW_COERCION_OF_SCALARS, false)
+            .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
+            .configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, true)
+            .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
+            .enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING)
+            .enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING)
+            .defaultDateFormat(new RFC3339DateFormat())
+            .addModule(new JavaTimeModule())
+            .addModule(new JsonNullableModule())
+            .build();
+  }
+
+  /**
+   * Set the date format for JSON (de)serialization with Date properties.
+   * @param dateFormat Date format
+   */
+  public void setDateFormat(DateFormat dateFormat) {
+    mapper.setDateFormat(dateFormat);
+  }
+
+  @Override
+  public ObjectMapper getContext(Class<?> type) {
+    return mapper;
+  }
+
+  /**
+   * Get the object mapper
+   *
+   * @return object mapper
+   */
+  public ObjectMapper getMapper() { return mapper; }
+
+  /**
+   * Returns the target model class that should be used to deserialize the input data.
+   * The discriminator mappings are used to determine the target model class.
+   *
+   * @param node The input data.
+   * @param modelClass The class that contains the discriminator mappings.
+   */
+  public static Class<?> getClassForElement(JsonNode node, Class<?> modelClass) {
+    ClassDiscriminatorMapping cdm = modelDiscriminators.get(modelClass);
+    if (cdm != null) {
+      return cdm.getClassForElement(node, new HashSet<>());
+    }
+    return null;
+  }
+
+  /**
+   * Helper class to register the discriminator mappings.
+   */
+  private static class ClassDiscriminatorMapping {
+    // The model class name.
+    Class<?> modelClass;
+    // The name of the discriminator property.
+    String discriminatorName;
+    // The discriminator mappings for a model class.
+    Map<String, Class<?>> discriminatorMappings;
+
+    // Constructs a new class discriminator.
+    ClassDiscriminatorMapping(Class<?> cls, String propertyName, Map<String, Class<?>> mappings) {
+      modelClass = cls;
+      discriminatorName = propertyName;
+      discriminatorMappings = new HashMap<>();
+      if (mappings != null) {
+        discriminatorMappings.putAll(mappings);
+      }
+    }
+
+    // Return the name of the discriminator property for this model class.
+    String getDiscriminatorPropertyName() {
+      return discriminatorName;
+    }
+
+    // Return the discriminator value or null if the discriminator is not
+    // present in the payload.
+    String getDiscriminatorValue(JsonNode node) {
+      // Determine the value of the discriminator property in the input data.
+      if (discriminatorName != null) {
+        // Get the value of the discriminator property, if present in the input payload.
+        node = node.get(discriminatorName);
+        if (node != null && node.isValueNode()) {
+          String discrValue = node.asText();
+          if (discrValue != null) {
+            return discrValue;
+          }
+        }
+      }
+      return null;
+    }
+
+    /**
+     * Returns the target model class that should be used to deserialize the input data.
+     * This function can be invoked for anyOf/oneOf composed models with discriminator mappings.
+     * The discriminator mappings are used to determine the target model class.
+     *
+     * @param node The input data.
+     * @param visitedClasses The set of classes that have already been visited.
+     */
+    Class<?> getClassForElement(JsonNode node, Set<Class<?>> visitedClasses) {
+      if (visitedClasses.contains(modelClass)) {
+        // Class has already been visited.
+        return null;
+      }
+      // Determine the value of the discriminator property in the input data.
+      String discrValue = getDiscriminatorValue(node);
+      if (discrValue == null) {
+        return null;
+      }
+      Class<?> cls = discriminatorMappings.get(discrValue);
+      // It may not be sufficient to return this cls directly because that target class
+      // may itself be a composed schema, possibly with its own discriminator.
+      visitedClasses.add(modelClass);
+      for (Class<?> childClass : discriminatorMappings.values()) {
+        ClassDiscriminatorMapping childCdm = modelDiscriminators.get(childClass);
+        if (childCdm == null) {
+          continue;
+        }
+        if (!discriminatorName.equals(childCdm.discriminatorName)) {
+          discrValue = getDiscriminatorValue(node);
+          if (discrValue == null) {
+            continue;
+          }
+        }
+        if (childCdm != null) {
+          // Recursively traverse the discriminator mappings.
+          Class<?> childDiscr = childCdm.getClassForElement(node, visitedClasses);
+          if (childDiscr != null) {
+            return childDiscr;
+          }
+        }
+      }
+      return cls;
+    }
+  }
+
+  /**
+   * Returns true if inst is an instance of modelClass in the OpenAPI model hierarchy.
+   *
+   * The Java class hierarchy is not implemented the same way as the OpenAPI model hierarchy,
+   * so it's not possible to use the instanceof keyword.
+   *
+   * @param modelClass A OpenAPI model class.
+   * @param inst The instance object.
+   */
+  public static boolean isInstanceOf(Class<?> modelClass, Object inst, Set<Class<?>> visitedClasses) {
+    if (modelClass.isInstance(inst)) {
+      // This handles the 'allOf' use case with single parent inheritance.
+      return true;
+    }
+    if (visitedClasses.contains(modelClass)) {
+      // This is to prevent infinite recursion when the composed schemas have
+      // a circular dependency.
+      return false;
+    }
+    visitedClasses.add(modelClass);
+
+    // Traverse the oneOf/anyOf composed schemas.
+    Map<String, GenericType<?>> descendants = modelDescendants.get(modelClass);
+    if (descendants != null) {
+      for (GenericType<?> childType : descendants.values()) {
+        if (isInstanceOf(childType.getRawType(), inst, visitedClasses)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  /**
+   * A map of discriminators for all model classes.
+   */
+  private static Map<Class<?>, ClassDiscriminatorMapping> modelDiscriminators = new HashMap<>();
+
+  /**
+   * A map of oneOf/anyOf descendants for each model class.
+   */
+  private static Map<Class<?>, Map<String, GenericType<?>>> modelDescendants = new HashMap<>();
+
+  /**
+    * Register a model class discriminator.
+    *
+    * @param modelClass the model class
+    * @param discriminatorPropertyName the name of the discriminator property
+    * @param mappings a map with the discriminator mappings.
+    */
+  public static void registerDiscriminator(Class<?> modelClass, String discriminatorPropertyName, Map<String, Class<?>> mappings) {
+    ClassDiscriminatorMapping m = new ClassDiscriminatorMapping(modelClass, discriminatorPropertyName, mappings);
+    modelDiscriminators.put(modelClass, m);
+  }
+
+  /**
+    * Register the oneOf/anyOf descendants of the modelClass.
+    *
+    * @param modelClass the model class
+    * @param descendants a map of oneOf/anyOf descendants.
+    */
+  public static void registerDescendants(Class<?> modelClass, Map<String, GenericType<?>> descendants) {
+    modelDescendants.put(modelClass, descendants);
+  }
+
+  private static JSON json;
+
+  static
+  {
+    json = new JSON();
+  }
+
+  /**
+    * Get the default JSON instance.
+    *
+    * @return the default JSON instance
+    */
+  public static JSON getDefault() {
+    return json;
+  }
+
+  /**
+    * Set the default JSON instance.
+    *
+    * @param json JSON instance to be used
+    */
+  public static void setDefault(JSON json) {
+    JSON.json = json;
+  }
+}
diff --git a/src/main/java/com/docspring/JavaTimeFormatter.java b/src/main/java/com/docspring/JavaTimeFormatter.java
new file mode 100644
index 0000000..682f273
--- /dev/null
+++ b/src/main/java/com/docspring/JavaTimeFormatter.java
@@ -0,0 +1,64 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+package com.docspring;
+
+import java.time.OffsetDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
+
+/**
+ * Class that add parsing/formatting support for Java 8+ {@code OffsetDateTime} class.
+ * It's generated for java clients when {@code AbstractJavaCodegen#dateLibrary} specified as {@code java8}.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class JavaTimeFormatter {
+
+    private DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
+
+    /**
+     * Get the date format used to parse/format {@code OffsetDateTime} parameters.
+     * @return DateTimeFormatter
+     */
+    public DateTimeFormatter getOffsetDateTimeFormatter() {
+        return offsetDateTimeFormatter;
+    }
+
+    /**
+     * Set the date format used to parse/format {@code OffsetDateTime} parameters.
+     * @param offsetDateTimeFormatter {@code DateTimeFormatter}
+     */
+    public void setOffsetDateTimeFormatter(DateTimeFormatter offsetDateTimeFormatter) {
+        this.offsetDateTimeFormatter = offsetDateTimeFormatter;
+    }
+
+    /**
+     * Parse the given string into {@code OffsetDateTime} object.
+     * @param str String
+     * @return {@code OffsetDateTime}
+     */
+    public OffsetDateTime parseOffsetDateTime(String str) {
+        try {
+            return OffsetDateTime.parse(str, offsetDateTimeFormatter);
+        } catch (DateTimeParseException e) {
+            throw new RuntimeException(e);
+        }
+    }
+    /**
+     * Format the given {@code OffsetDateTime} object into string.
+     * @param offsetDateTime {@code OffsetDateTime}
+     * @return {@code OffsetDateTime} in string format
+     */
+    public String formatOffsetDateTime(OffsetDateTime offsetDateTime) {
+        return offsetDateTimeFormatter.format(offsetDateTime);
+    }
+}
diff --git a/src/main/java/com/docspring/JsonSchema.java b/src/main/java/com/docspring/JsonSchema.java
new file mode 100644
index 0000000..b5157d0
--- /dev/null
+++ b/src/main/java/com/docspring/JsonSchema.java
@@ -0,0 +1,378 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * JsonSchema
+ */
+@JsonPropertyOrder({
+  JsonSchema.JSON_PROPERTY_$_SCHEMA,
+  JsonSchema.JSON_PROPERTY_ID,
+  JsonSchema.JSON_PROPERTY_TITLE,
+  JsonSchema.JSON_PROPERTY_DESCRIPTION,
+  JsonSchema.JSON_PROPERTY_DEFINITIONS,
+  JsonSchema.JSON_PROPERTY_TYPE,
+  JsonSchema.JSON_PROPERTY_PROPERTIES,
+  JsonSchema.JSON_PROPERTY_ADDITIONAL_PROPERTIES,
+  JsonSchema.JSON_PROPERTY_REQUIRED
+})
+@JsonTypeName("json_schema")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class JsonSchema {
+  public static final String JSON_PROPERTY_$_SCHEMA = "$schema";
+  @javax.annotation.Nullable
+  private URI $schema;
+
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_TITLE = "title";
+  @javax.annotation.Nullable
+  private String title;
+
+  public static final String JSON_PROPERTY_DESCRIPTION = "description";
+  @javax.annotation.Nullable
+  private String description;
+
+  public static final String JSON_PROPERTY_DEFINITIONS = "definitions";
+  @javax.annotation.Nullable
+  private Object definitions;
+
+  public static final String JSON_PROPERTY_TYPE = "type";
+  @javax.annotation.Nullable
+  private String type;
+
+  public static final String JSON_PROPERTY_PROPERTIES = "properties";
+  @javax.annotation.Nullable
+  private Object properties;
+
+  public static final String JSON_PROPERTY_ADDITIONAL_PROPERTIES = "additionalProperties";
+  @javax.annotation.Nullable
+  private Boolean additionalProperties;
+
+  public static final String JSON_PROPERTY_REQUIRED = "required";
+  @javax.annotation.Nullable
+  private List<String> required = new ArrayList<>();
+
+  public JsonSchema() { 
+  }
+
+  public JsonSchema $schema(@javax.annotation.Nullable URI $schema) {
+    this.$schema = $schema;
+    return this;
+  }
+
+  /**
+   * Get $schema
+   * @return $schema
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_$_SCHEMA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public URI get$Schema() {
+    return $schema;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_$_SCHEMA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void set$Schema(@javax.annotation.Nullable URI $schema) {
+    this.$schema = $schema;
+  }
+
+
+  public JsonSchema id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public JsonSchema title(@javax.annotation.Nullable String title) {
+    this.title = title;
+    return this;
+  }
+
+  /**
+   * Get title
+   * @return title
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TITLE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getTitle() {
+    return title;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TITLE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setTitle(@javax.annotation.Nullable String title) {
+    this.title = title;
+  }
+
+
+  public JsonSchema description(@javax.annotation.Nullable String description) {
+    this.description = description;
+    return this;
+  }
+
+  /**
+   * Get description
+   * @return description
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getDescription() {
+    return description;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setDescription(@javax.annotation.Nullable String description) {
+    this.description = description;
+  }
+
+
+  public JsonSchema definitions(@javax.annotation.Nullable Object definitions) {
+    this.definitions = definitions;
+    return this;
+  }
+
+  /**
+   * Get definitions
+   * @return definitions
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DEFINITIONS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getDefinitions() {
+    return definitions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DEFINITIONS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setDefinitions(@javax.annotation.Nullable Object definitions) {
+    this.definitions = definitions;
+  }
+
+
+  public JsonSchema type(@javax.annotation.Nullable String type) {
+    this.type = type;
+    return this;
+  }
+
+  /**
+   * Get type
+   * @return type
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getType() {
+    return type;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setType(@javax.annotation.Nullable String type) {
+    this.type = type;
+  }
+
+
+  public JsonSchema properties(@javax.annotation.Nullable Object properties) {
+    this.properties = properties;
+    return this;
+  }
+
+  /**
+   * Get properties
+   * @return properties
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PROPERTIES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getProperties() {
+    return properties;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PROPERTIES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setProperties(@javax.annotation.Nullable Object properties) {
+    this.properties = properties;
+  }
+
+
+  public JsonSchema additionalProperties(@javax.annotation.Nullable Boolean additionalProperties) {
+    this.additionalProperties = additionalProperties;
+    return this;
+  }
+
+  /**
+   * Get additionalProperties
+   * @return additionalProperties
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ADDITIONAL_PROPERTIES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getAdditionalProperties() {
+    return additionalProperties;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ADDITIONAL_PROPERTIES)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setAdditionalProperties(@javax.annotation.Nullable Boolean additionalProperties) {
+    this.additionalProperties = additionalProperties;
+  }
+
+
+  public JsonSchema required(@javax.annotation.Nullable List<String> required) {
+    this.required = required;
+    return this;
+  }
+
+  public JsonSchema addRequiredItem(String requiredItem) {
+    if (this.required == null) {
+      this.required = new ArrayList<>();
+    }
+    this.required.add(requiredItem);
+    return this;
+  }
+
+  /**
+   * Get required
+   * @return required
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_REQUIRED)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getRequired() {
+    return required;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_REQUIRED)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setRequired(@javax.annotation.Nullable List<String> required) {
+    this.required = required;
+  }
+
+
+  /**
+   * Return true if this json_schema object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    JsonSchema jsonSchema = (JsonSchema) o;
+    return Objects.equals(this.$schema, jsonSchema.$schema) &&
+        Objects.equals(this.id, jsonSchema.id) &&
+        Objects.equals(this.title, jsonSchema.title) &&
+        Objects.equals(this.description, jsonSchema.description) &&
+        Objects.equals(this.definitions, jsonSchema.definitions) &&
+        Objects.equals(this.type, jsonSchema.type) &&
+        Objects.equals(this.properties, jsonSchema.properties) &&
+        Objects.equals(this.additionalProperties, jsonSchema.additionalProperties) &&
+        Objects.equals(this.required, jsonSchema.required);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash($schema, id, title, description, definitions, type, properties, additionalProperties, required);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class JsonSchema {\n");
+    sb.append("    $schema: ").append(toIndentedString($schema)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    title: ").append(toIndentedString(title)).append("\n");
+    sb.append("    description: ").append(toIndentedString(description)).append("\n");
+    sb.append("    definitions: ").append(toIndentedString(definitions)).append("\n");
+    sb.append("    type: ").append(toIndentedString(type)).append("\n");
+    sb.append("    properties: ").append(toIndentedString(properties)).append("\n");
+    sb.append("    additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
+    sb.append("    required: ").append(toIndentedString(required)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/ListSubmissionsResponse.java b/src/main/java/com/docspring/ListSubmissionsResponse.java
new file mode 100644
index 0000000..cb86170
--- /dev/null
+++ b/src/main/java/com/docspring/ListSubmissionsResponse.java
@@ -0,0 +1,187 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.Submission;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * ListSubmissionsResponse
+ */
+@JsonPropertyOrder({
+  ListSubmissionsResponse.JSON_PROPERTY_SUBMISSIONS,
+  ListSubmissionsResponse.JSON_PROPERTY_LIMIT,
+  ListSubmissionsResponse.JSON_PROPERTY_NEXT_CURSOR
+})
+@JsonTypeName("list_submissions_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class ListSubmissionsResponse {
+  public static final String JSON_PROPERTY_SUBMISSIONS = "submissions";
+  @javax.annotation.Nonnull
+  private List<Submission> submissions = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_LIMIT = "limit";
+  @javax.annotation.Nonnull
+  private BigDecimal limit;
+
+  public static final String JSON_PROPERTY_NEXT_CURSOR = "next_cursor";
+  @javax.annotation.Nullable
+  private String nextCursor;
+
+  public ListSubmissionsResponse() { 
+  }
+
+  public ListSubmissionsResponse submissions(@javax.annotation.Nonnull List<Submission> submissions) {
+    this.submissions = submissions;
+    return this;
+  }
+
+  public ListSubmissionsResponse addSubmissionsItem(Submission submissionsItem) {
+    if (this.submissions == null) {
+      this.submissions = new ArrayList<>();
+    }
+    this.submissions.add(submissionsItem);
+    return this;
+  }
+
+  /**
+   * Get submissions
+   * @return submissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<Submission> getSubmissions() {
+    return submissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissions(@javax.annotation.Nonnull List<Submission> submissions) {
+    this.submissions = submissions;
+  }
+
+
+  public ListSubmissionsResponse limit(@javax.annotation.Nonnull BigDecimal limit) {
+    this.limit = limit;
+    return this;
+  }
+
+  /**
+   * Get limit
+   * @return limit
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_LIMIT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public BigDecimal getLimit() {
+    return limit;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LIMIT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLimit(@javax.annotation.Nonnull BigDecimal limit) {
+    this.limit = limit;
+  }
+
+
+  public ListSubmissionsResponse nextCursor(@javax.annotation.Nullable String nextCursor) {
+    this.nextCursor = nextCursor;
+    return this;
+  }
+
+  /**
+   * Get nextCursor
+   * @return nextCursor
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_NEXT_CURSOR)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getNextCursor() {
+    return nextCursor;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NEXT_CURSOR)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setNextCursor(@javax.annotation.Nullable String nextCursor) {
+    this.nextCursor = nextCursor;
+  }
+
+
+  /**
+   * Return true if this list_submissions_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    ListSubmissionsResponse listSubmissionsResponse = (ListSubmissionsResponse) o;
+    return Objects.equals(this.submissions, listSubmissionsResponse.submissions) &&
+        Objects.equals(this.limit, listSubmissionsResponse.limit) &&
+        Objects.equals(this.nextCursor, listSubmissionsResponse.nextCursor);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(submissions, limit, nextCursor);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class ListSubmissionsResponse {\n");
+    sb.append("    submissions: ").append(toIndentedString(submissions)).append("\n");
+    sb.append("    limit: ").append(toIndentedString(limit)).append("\n");
+    sb.append("    nextCursor: ").append(toIndentedString(nextCursor)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/MoveFolderData.java b/src/main/java/com/docspring/MoveFolderData.java
new file mode 100644
index 0000000..d937fe2
--- /dev/null
+++ b/src/main/java/com/docspring/MoveFolderData.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * MoveFolderData
+ */
+@JsonPropertyOrder({
+  MoveFolderData.JSON_PROPERTY_PARENT_FOLDER_ID
+})
+@JsonTypeName("move_folder_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class MoveFolderData {
+  public static final String JSON_PROPERTY_PARENT_FOLDER_ID = "parent_folder_id";
+  @javax.annotation.Nullable
+  private String parentFolderId;
+
+  public MoveFolderData() { 
+  }
+
+  public MoveFolderData parentFolderId(@javax.annotation.Nullable String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+    return this;
+  }
+
+  /**
+   * Get parentFolderId
+   * @return parentFolderId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getParentFolderId() {
+    return parentFolderId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setParentFolderId(@javax.annotation.Nullable String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+  }
+
+
+  /**
+   * Return true if this move_folder_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MoveFolderData moveFolderData = (MoveFolderData) o;
+    return Objects.equals(this.parentFolderId, moveFolderData.parentFolderId);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(parentFolderId);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MoveFolderData {\n");
+    sb.append("    parentFolderId: ").append(toIndentedString(parentFolderId)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/MoveTemplateData.java b/src/main/java/com/docspring/MoveTemplateData.java
new file mode 100644
index 0000000..9133e0e
--- /dev/null
+++ b/src/main/java/com/docspring/MoveTemplateData.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * MoveTemplateData
+ */
+@JsonPropertyOrder({
+  MoveTemplateData.JSON_PROPERTY_PARENT_FOLDER_ID
+})
+@JsonTypeName("move_template_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class MoveTemplateData {
+  public static final String JSON_PROPERTY_PARENT_FOLDER_ID = "parent_folder_id";
+  @javax.annotation.Nonnull
+  private String parentFolderId;
+
+  public MoveTemplateData() { 
+  }
+
+  public MoveTemplateData parentFolderId(@javax.annotation.Nonnull String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+    return this;
+  }
+
+  /**
+   * Get parentFolderId
+   * @return parentFolderId
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getParentFolderId() {
+    return parentFolderId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setParentFolderId(@javax.annotation.Nonnull String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+  }
+
+
+  /**
+   * Return true if this move_template_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MoveTemplateData moveTemplateData = (MoveTemplateData) o;
+    return Objects.equals(this.parentFolderId, moveTemplateData.parentFolderId);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(parentFolderId);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MoveTemplateData {\n");
+    sb.append("    parentFolderId: ").append(toIndentedString(parentFolderId)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/MultipleErrorsResponse.java b/src/main/java/com/docspring/MultipleErrorsResponse.java
new file mode 100644
index 0000000..95efeab
--- /dev/null
+++ b/src/main/java/com/docspring/MultipleErrorsResponse.java
@@ -0,0 +1,186 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * MultipleErrorsResponse
+ */
+@JsonPropertyOrder({
+  MultipleErrorsResponse.JSON_PROPERTY_STATUS,
+  MultipleErrorsResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("multiple_errors_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class MultipleErrorsResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nonnull
+  private List<String> errors = new ArrayList<>();
+
+  public MultipleErrorsResponse() { 
+  }
+
+  public MultipleErrorsResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public MultipleErrorsResponse errors(@javax.annotation.Nonnull List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public MultipleErrorsResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setErrors(@javax.annotation.Nonnull List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this multiple_errors_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    MultipleErrorsResponse multipleErrorsResponse = (MultipleErrorsResponse) o;
+    return Objects.equals(this.status, multipleErrorsResponse.status) &&
+        Objects.equals(this.errors, multipleErrorsResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class MultipleErrorsResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/Pair.java b/src/main/java/com/docspring/Pair.java
new file mode 100644
index 0000000..071f45a
--- /dev/null
+++ b/src/main/java/com/docspring/Pair.java
@@ -0,0 +1,57 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class Pair {
+    private String name = "";
+    private String value = "";
+
+    public Pair (String name, String value) {
+        setName(name);
+        setValue(value);
+    }
+
+    private void setName(String name) {
+        if (!isValidString(name)) {
+            return;
+        }
+
+        this.name = name;
+    }
+
+    private void setValue(String value) {
+        if (!isValidString(value)) {
+            return;
+        }
+
+        this.value = value;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    private boolean isValidString(String arg) {
+        if (arg == null) {
+            return false;
+        }
+
+        return true;
+    }
+}
diff --git a/src/main/java/com/docspring/PdfApi.java b/src/main/java/com/docspring/PdfApi.java
new file mode 100644
index 0000000..f52d1ce
--- /dev/null
+++ b/src/main/java/com/docspring/PdfApi.java
@@ -0,0 +1,2156 @@
+package com.docspring;
+
+import com.docspring.ApiException;
+import com.docspring.ApiClient;
+import com.docspring.ApiResponse;
+import com.docspring.Configuration;
+import com.docspring.Pair;
+
+import javax.ws.rs.core.GenericType;
+
+import com.docspring.AddFieldsData;
+import com.docspring.BatchGeneratePdfs201Response;
+import java.math.BigDecimal;
+import com.docspring.CombinePdfsData;
+import com.docspring.CombinedSubmission;
+import com.docspring.CombinedSubmissionData;
+import com.docspring.CopyTemplateOptions;
+import com.docspring.CreateCombinedSubmissionResponse;
+import com.docspring.CreateCustomFileData;
+import com.docspring.CreateCustomFileResponse;
+import com.docspring.CreateFolderData;
+import com.docspring.CreateHtmlSubmissionData;
+import com.docspring.CreateHtmlTemplate;
+import com.docspring.CreatePdfSubmissionData;
+import com.docspring.CreatePdfTemplate;
+import com.docspring.CreateSubmissionDataRequestEventRequest;
+import com.docspring.CreateSubmissionDataRequestEventResponse;
+import com.docspring.CreateSubmissionDataRequestResponse;
+import com.docspring.CreateSubmissionDataRequestTokenResponse;
+import com.docspring.CreateSubmissionResponse;
+import com.docspring.ErrorResponse;
+import java.io.File;
+import com.docspring.Folder;
+import com.docspring.JsonSchema;
+import com.docspring.ListSubmissionsResponse;
+import com.docspring.MoveFolderData;
+import com.docspring.MoveTemplateData;
+import com.docspring.MultipleErrorsResponse;
+import com.docspring.RenameFolderData;
+import com.docspring.Submission;
+import com.docspring.SubmissionBatchData;
+import com.docspring.SubmissionBatchWithSubmissions;
+import com.docspring.SubmissionDataRequestShow;
+import com.docspring.SubmissionPreview;
+import com.docspring.SuccessErrorResponse;
+import com.docspring.SuccessMultipleErrorsResponse;
+import com.docspring.Template;
+import com.docspring.TemplateAddFieldsResponse;
+import com.docspring.TemplatePreview;
+import com.docspring.UpdateHtmlTemplate;
+import com.docspring.UpdateSubmissionDataRequestData;
+import com.docspring.UploadPresignResponse;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class PdfApi {
+  private ApiClient apiClient;
+
+  public PdfApi() {
+    this(Configuration.getDefaultApiClient());
+  }
+
+  public PdfApi(ApiClient apiClient) {
+    this.apiClient = apiClient;
+  }
+
+  /**
+   * Get the API client
+   *
+   * @return API client
+   */
+  public ApiClient getApiClient() {
+    return apiClient;
+  }
+
+  /**
+   * Set the API client
+   *
+   * @param apiClient an instance of API client
+   */
+  public void setApiClient(ApiClient apiClient) {
+    this.apiClient = apiClient;
+  }
+
+  /**
+   * Add new fields to a Template
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return TemplateAddFieldsResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> add fields success </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> add fields error </td><td>  -  </td></tr>
+     </table>
+   */
+  public TemplateAddFieldsResponse addFieldsToTemplate(String templateId, AddFieldsData data) throws ApiException {
+    return addFieldsToTemplateWithHttpInfo(templateId, data).getData();
+  }
+
+  /**
+   * Add new fields to a Template
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return ApiResponse&lt;TemplateAddFieldsResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> add fields success </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> add fields error </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<TemplateAddFieldsResponse> addFieldsToTemplateWithHttpInfo(String templateId, AddFieldsData data) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling addFieldsToTemplate");
+    }
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling addFieldsToTemplate");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/add_fields"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<TemplateAddFieldsResponse> localVarReturnType = new GenericType<TemplateAddFieldsResponse>() {};
+    return apiClient.invokeAPI("PdfApi.addFieldsToTemplate", localVarPath, "PUT", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Generates multiple PDFs
+   * 
+   * @param data  (required)
+   * @param wait Wait for submission batch to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @return BatchGeneratePdfs201Response
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> submissions created </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> some PDFs with invalid data </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> array of arrays </td><td>  -  </td></tr>
+       <tr><td> 400 </td><td> invalid JSON </td><td>  -  </td></tr>
+     </table>
+   */
+  public BatchGeneratePdfs201Response batchGeneratePdfs(SubmissionBatchData data, Boolean wait) throws ApiException {
+    return batchGeneratePdfsWithHttpInfo(data, wait).getData();
+  }
+
+  /**
+   * Generates multiple PDFs
+   * 
+   * @param data  (required)
+   * @param wait Wait for submission batch to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @return ApiResponse&lt;BatchGeneratePdfs201Response&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> submissions created </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> some PDFs with invalid data </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> array of arrays </td><td>  -  </td></tr>
+       <tr><td> 400 </td><td> invalid JSON </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<BatchGeneratePdfs201Response> batchGeneratePdfsWithHttpInfo(SubmissionBatchData data, Boolean wait) throws ApiException {
+    // Check required parameters
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling batchGeneratePdfs");
+    }
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "wait", wait)
+    );
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<BatchGeneratePdfs201Response> localVarReturnType = new GenericType<BatchGeneratePdfs201Response>() {};
+    return apiClient.invokeAPI("PdfApi.batchGeneratePdfs", "/submissions/batches", "POST", localVarQueryParams, data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Merge submission PDFs, template PDFs, or custom files
+   * 
+   * @param data  (required)
+   * @return CreateCombinedSubmissionResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> combined submission created </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+       <tr><td> 400 </td><td> invalid JSON </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public CreateCombinedSubmissionResponse combinePdfs(CombinePdfsData data) throws ApiException {
+    return combinePdfsWithHttpInfo(data).getData();
+  }
+
+  /**
+   * Merge submission PDFs, template PDFs, or custom files
+   * 
+   * @param data  (required)
+   * @return ApiResponse&lt;CreateCombinedSubmissionResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> combined submission created </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+       <tr><td> 400 </td><td> invalid JSON </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CreateCombinedSubmissionResponse> combinePdfsWithHttpInfo(CombinePdfsData data) throws ApiException {
+    // Check required parameters
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling combinePdfs");
+    }
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CreateCombinedSubmissionResponse> localVarReturnType = new GenericType<CreateCombinedSubmissionResponse>() {};
+    return apiClient.invokeAPI("PdfApi.combinePdfs", "/combined_submissions?v=2", "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Merge generated PDFs together
+   * 
+   * @param data  (required)
+   * @param wait Wait for combined submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @return CreateCombinedSubmissionResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> combined submission created </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+       <tr><td> 400 </td><td> invalid JSON </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public CreateCombinedSubmissionResponse combineSubmissions(CombinedSubmissionData data, Boolean wait) throws ApiException {
+    return combineSubmissionsWithHttpInfo(data, wait).getData();
+  }
+
+  /**
+   * Merge generated PDFs together
+   * 
+   * @param data  (required)
+   * @param wait Wait for combined submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @return ApiResponse&lt;CreateCombinedSubmissionResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> combined submission created </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+       <tr><td> 400 </td><td> invalid JSON </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CreateCombinedSubmissionResponse> combineSubmissionsWithHttpInfo(CombinedSubmissionData data, Boolean wait) throws ApiException {
+    // Check required parameters
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling combineSubmissions");
+    }
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "wait", wait)
+    );
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CreateCombinedSubmissionResponse> localVarReturnType = new GenericType<CreateCombinedSubmissionResponse>() {};
+    return apiClient.invokeAPI("PdfApi.combineSubmissions", "/combined_submissions", "POST", localVarQueryParams, data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Copy a Template
+   * 
+   * @param templateId  (required)
+   * @param options  (optional)
+   * @return TemplatePreview
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> copy template success </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> folder not found </td><td>  -  </td></tr>
+     </table>
+   */
+  public TemplatePreview copyTemplate(String templateId, CopyTemplateOptions options) throws ApiException {
+    return copyTemplateWithHttpInfo(templateId, options).getData();
+  }
+
+  /**
+   * Copy a Template
+   * 
+   * @param templateId  (required)
+   * @param options  (optional)
+   * @return ApiResponse&lt;TemplatePreview&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> copy template success </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> folder not found </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<TemplatePreview> copyTemplateWithHttpInfo(String templateId, CopyTemplateOptions options) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling copyTemplate");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/copy"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<TemplatePreview> localVarReturnType = new GenericType<TemplatePreview>() {};
+    return apiClient.invokeAPI("PdfApi.copyTemplate", localVarPath, "POST", new ArrayList<>(), options,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Create a new custom file from a cached presign upload
+   * 
+   * @param data  (required)
+   * @return CreateCustomFileResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> returns the custom file </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public CreateCustomFileResponse createCustomFileFromUpload(CreateCustomFileData data) throws ApiException {
+    return createCustomFileFromUploadWithHttpInfo(data).getData();
+  }
+
+  /**
+   * Create a new custom file from a cached presign upload
+   * 
+   * @param data  (required)
+   * @return ApiResponse&lt;CreateCustomFileResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> returns the custom file </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CreateCustomFileResponse> createCustomFileFromUploadWithHttpInfo(CreateCustomFileData data) throws ApiException {
+    // Check required parameters
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling createCustomFileFromUpload");
+    }
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CreateCustomFileResponse> localVarReturnType = new GenericType<CreateCustomFileResponse>() {};
+    return apiClient.invokeAPI("PdfApi.createCustomFileFromUpload", "/custom_files", "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Creates a new event for emailing a signee a request for signature
+   * 
+   * @param dataRequestId  (required)
+   * @param event  (required)
+   * @return CreateSubmissionDataRequestEventResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> event created </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> message recipient must not be blank </td><td>  -  </td></tr>
+     </table>
+   */
+  public CreateSubmissionDataRequestEventResponse createDataRequestEvent(String dataRequestId, CreateSubmissionDataRequestEventRequest event) throws ApiException {
+    return createDataRequestEventWithHttpInfo(dataRequestId, event).getData();
+  }
+
+  /**
+   * Creates a new event for emailing a signee a request for signature
+   * 
+   * @param dataRequestId  (required)
+   * @param event  (required)
+   * @return ApiResponse&lt;CreateSubmissionDataRequestEventResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> event created </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> message recipient must not be blank </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CreateSubmissionDataRequestEventResponse> createDataRequestEventWithHttpInfo(String dataRequestId, CreateSubmissionDataRequestEventRequest event) throws ApiException {
+    // Check required parameters
+    if (dataRequestId == null) {
+      throw new ApiException(400, "Missing the required parameter 'dataRequestId' when calling createDataRequestEvent");
+    }
+    if (event == null) {
+      throw new ApiException(400, "Missing the required parameter 'event' when calling createDataRequestEvent");
+    }
+
+    // Path parameters
+    String localVarPath = "/data_requests/{data_request_id}/events"
+            .replaceAll("\\{data_request_id}", apiClient.escapeString(dataRequestId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CreateSubmissionDataRequestEventResponse> localVarReturnType = new GenericType<CreateSubmissionDataRequestEventResponse>() {};
+    return apiClient.invokeAPI("PdfApi.createDataRequestEvent", localVarPath, "POST", new ArrayList<>(), event,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Creates a new data request token for form authentication
+   * 
+   * @param dataRequestId  (required)
+   * @param type  (optional)
+   * @return CreateSubmissionDataRequestTokenResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> token created </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+     </table>
+   */
+  public CreateSubmissionDataRequestTokenResponse createDataRequestToken(String dataRequestId, String type) throws ApiException {
+    return createDataRequestTokenWithHttpInfo(dataRequestId, type).getData();
+  }
+
+  /**
+   * Creates a new data request token for form authentication
+   * 
+   * @param dataRequestId  (required)
+   * @param type  (optional)
+   * @return ApiResponse&lt;CreateSubmissionDataRequestTokenResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> token created </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CreateSubmissionDataRequestTokenResponse> createDataRequestTokenWithHttpInfo(String dataRequestId, String type) throws ApiException {
+    // Check required parameters
+    if (dataRequestId == null) {
+      throw new ApiException(400, "Missing the required parameter 'dataRequestId' when calling createDataRequestToken");
+    }
+
+    // Path parameters
+    String localVarPath = "/data_requests/{data_request_id}/tokens"
+            .replaceAll("\\{data_request_id}", apiClient.escapeString(dataRequestId.toString()));
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "type", type)
+    );
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CreateSubmissionDataRequestTokenResponse> localVarReturnType = new GenericType<CreateSubmissionDataRequestTokenResponse>() {};
+    return apiClient.invokeAPI("PdfApi.createDataRequestToken", localVarPath, "POST", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Create a folder
+   * 
+   * @param data  (required)
+   * @return Folder
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 422 </td><td> name already exist </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> parent folder doesn&#39;t exist </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> folder created inside another folder </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public Folder createFolder(CreateFolderData data) throws ApiException {
+    return createFolderWithHttpInfo(data).getData();
+  }
+
+  /**
+   * Create a folder
+   * 
+   * @param data  (required)
+   * @return ApiResponse&lt;Folder&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 422 </td><td> name already exist </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> parent folder doesn&#39;t exist </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> folder created inside another folder </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<Folder> createFolderWithHttpInfo(CreateFolderData data) throws ApiException {
+    // Check required parameters
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling createFolder");
+    }
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<Folder> localVarReturnType = new GenericType<Folder>() {};
+    return apiClient.invokeAPI("PdfApi.createFolder", "/folders/", "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Create a new HTML template
+   * 
+   * @param data  (required)
+   * @return TemplatePreview
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> returns a created template </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public TemplatePreview createHTMLTemplate(CreateHtmlTemplate data) throws ApiException {
+    return createHTMLTemplateWithHttpInfo(data).getData();
+  }
+
+  /**
+   * Create a new HTML template
+   * 
+   * @param data  (required)
+   * @return ApiResponse&lt;TemplatePreview&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> returns a created template </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<TemplatePreview> createHTMLTemplateWithHttpInfo(CreateHtmlTemplate data) throws ApiException {
+    // Check required parameters
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling createHTMLTemplate");
+    }
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<TemplatePreview> localVarReturnType = new GenericType<TemplatePreview>() {};
+    return apiClient.invokeAPI("PdfApi.createHTMLTemplate", "/templates?endpoint_description=html", "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Create a new PDF template with a form POST file upload
+   * 
+   * @param templateDocument  (required)
+   * @param templateName  (required)
+   * @param wait Wait for template document to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @param templateDescription  (optional)
+   * @param templateParentFolderId  (optional)
+   * @return TemplatePreview
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> returns a pending template </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public TemplatePreview createPDFTemplate(File templateDocument, String templateName, Boolean wait, String templateDescription, String templateParentFolderId) throws ApiException {
+    return createPDFTemplateWithHttpInfo(templateDocument, templateName, wait, templateDescription, templateParentFolderId).getData();
+  }
+
+  /**
+   * Create a new PDF template with a form POST file upload
+   * 
+   * @param templateDocument  (required)
+   * @param templateName  (required)
+   * @param wait Wait for template document to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @param templateDescription  (optional)
+   * @param templateParentFolderId  (optional)
+   * @return ApiResponse&lt;TemplatePreview&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> returns a pending template </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<TemplatePreview> createPDFTemplateWithHttpInfo(File templateDocument, String templateName, Boolean wait, String templateDescription, String templateParentFolderId) throws ApiException {
+    // Check required parameters
+    if (templateDocument == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateDocument' when calling createPDFTemplate");
+    }
+    if (templateName == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateName' when calling createPDFTemplate");
+    }
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "wait", wait)
+    );
+
+    // Form parameters
+    Map<String, Object> localVarFormParams = new LinkedHashMap<>();
+    localVarFormParams.put("template[document]", templateDocument);
+    localVarFormParams.put("template[name]", templateName);
+    if (templateDescription != null) {
+      localVarFormParams.put("template[description]", templateDescription);
+    }
+    if (templateParentFolderId != null) {
+      localVarFormParams.put("template[parent_folder_id]", templateParentFolderId);
+    }
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("multipart/form-data");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<TemplatePreview> localVarReturnType = new GenericType<TemplatePreview>() {};
+    return apiClient.invokeAPI("PdfApi.createPDFTemplate", "/templates", "POST", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), localVarFormParams, localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Create a new PDF template from a cached presign upload
+   * 
+   * @param data  (required)
+   * @return TemplatePreview
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> returns a pending template </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public TemplatePreview createPDFTemplateFromUpload(CreatePdfTemplate data) throws ApiException {
+    return createPDFTemplateFromUploadWithHttpInfo(data).getData();
+  }
+
+  /**
+   * Create a new PDF template from a cached presign upload
+   * 
+   * @param data  (required)
+   * @return ApiResponse&lt;TemplatePreview&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> returns a pending template </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<TemplatePreview> createPDFTemplateFromUploadWithHttpInfo(CreatePdfTemplate data) throws ApiException {
+    // Check required parameters
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling createPDFTemplateFromUpload");
+    }
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<TemplatePreview> localVarReturnType = new GenericType<TemplatePreview>() {};
+    return apiClient.invokeAPI("PdfApi.createPDFTemplateFromUpload", "/templates?endpoint_description=cached_upload", "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Delete a folder
+   * 
+   * @param folderId  (required)
+   * @return Folder
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 404 </td><td> folder doesn&#39;t exist </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> folder has contents </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> folder is empty </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public Folder deleteFolder(String folderId) throws ApiException {
+    return deleteFolderWithHttpInfo(folderId).getData();
+  }
+
+  /**
+   * Delete a folder
+   * 
+   * @param folderId  (required)
+   * @return ApiResponse&lt;Folder&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 404 </td><td> folder doesn&#39;t exist </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> folder has contents </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> folder is empty </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<Folder> deleteFolderWithHttpInfo(String folderId) throws ApiException {
+    // Check required parameters
+    if (folderId == null) {
+      throw new ApiException(400, "Missing the required parameter 'folderId' when calling deleteFolder");
+    }
+
+    // Path parameters
+    String localVarPath = "/folders/{folder_id}"
+            .replaceAll("\\{folder_id}", apiClient.escapeString(folderId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<Folder> localVarReturnType = new GenericType<Folder>() {};
+    return apiClient.invokeAPI("PdfApi.deleteFolder", localVarPath, "DELETE", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Delete a template
+   * 
+   * @param templateId  (required)
+   * @return SuccessMultipleErrorsResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> template deleted </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public SuccessMultipleErrorsResponse deleteTemplate(String templateId) throws ApiException {
+    return deleteTemplateWithHttpInfo(templateId).getData();
+  }
+
+  /**
+   * Delete a template
+   * 
+   * @param templateId  (required)
+   * @return ApiResponse&lt;SuccessMultipleErrorsResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> template deleted </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<SuccessMultipleErrorsResponse> deleteTemplateWithHttpInfo(String templateId) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling deleteTemplate");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<SuccessMultipleErrorsResponse> localVarReturnType = new GenericType<SuccessMultipleErrorsResponse>() {};
+    return apiClient.invokeAPI("PdfApi.deleteTemplate", localVarPath, "DELETE", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Expire a combined submission
+   * 
+   * @param combinedSubmissionId  (required)
+   * @return CombinedSubmission
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> submission was expired </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> combined submission not found </td><td>  -  </td></tr>
+       <tr><td> 403 </td><td> test API token used </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public CombinedSubmission expireCombinedSubmission(String combinedSubmissionId) throws ApiException {
+    return expireCombinedSubmissionWithHttpInfo(combinedSubmissionId).getData();
+  }
+
+  /**
+   * Expire a combined submission
+   * 
+   * @param combinedSubmissionId  (required)
+   * @return ApiResponse&lt;CombinedSubmission&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> submission was expired </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> combined submission not found </td><td>  -  </td></tr>
+       <tr><td> 403 </td><td> test API token used </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CombinedSubmission> expireCombinedSubmissionWithHttpInfo(String combinedSubmissionId) throws ApiException {
+    // Check required parameters
+    if (combinedSubmissionId == null) {
+      throw new ApiException(400, "Missing the required parameter 'combinedSubmissionId' when calling expireCombinedSubmission");
+    }
+
+    // Path parameters
+    String localVarPath = "/combined_submissions/{combined_submission_id}"
+            .replaceAll("\\{combined_submission_id}", apiClient.escapeString(combinedSubmissionId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CombinedSubmission> localVarReturnType = new GenericType<CombinedSubmission>() {};
+    return apiClient.invokeAPI("PdfApi.expireCombinedSubmission", localVarPath, "DELETE", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Expire a PDF submission
+   * 
+   * @param submissionId  (required)
+   * @return SubmissionPreview
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> submission was expired </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+       <tr><td> 403 </td><td> test API token used </td><td>  -  </td></tr>
+     </table>
+   */
+  public SubmissionPreview expireSubmission(String submissionId) throws ApiException {
+    return expireSubmissionWithHttpInfo(submissionId).getData();
+  }
+
+  /**
+   * Expire a PDF submission
+   * 
+   * @param submissionId  (required)
+   * @return ApiResponse&lt;SubmissionPreview&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> submission was expired </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+       <tr><td> 403 </td><td> test API token used </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<SubmissionPreview> expireSubmissionWithHttpInfo(String submissionId) throws ApiException {
+    // Check required parameters
+    if (submissionId == null) {
+      throw new ApiException(400, "Missing the required parameter 'submissionId' when calling expireSubmission");
+    }
+
+    // Path parameters
+    String localVarPath = "/submissions/{submission_id}"
+            .replaceAll("\\{submission_id}", apiClient.escapeString(submissionId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<SubmissionPreview> localVarReturnType = new GenericType<SubmissionPreview>() {};
+    return apiClient.invokeAPI("PdfApi.expireSubmission", localVarPath, "DELETE", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Generates a new PDF
+   * 
+   * @param templateId  (required)
+   * @param submission  (required)
+   * @param wait Wait for submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @return CreateSubmissionResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> submission created </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public CreateSubmissionResponse generatePdf(String templateId, CreatePdfSubmissionData submission, Boolean wait) throws ApiException {
+    return generatePdfWithHttpInfo(templateId, submission, wait).getData();
+  }
+
+  /**
+   * Generates a new PDF
+   * 
+   * @param templateId  (required)
+   * @param submission  (required)
+   * @param wait Wait for submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @return ApiResponse&lt;CreateSubmissionResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> submission created </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CreateSubmissionResponse> generatePdfWithHttpInfo(String templateId, CreatePdfSubmissionData submission, Boolean wait) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling generatePdf");
+    }
+    if (submission == null) {
+      throw new ApiException(400, "Missing the required parameter 'submission' when calling generatePdf");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/submissions"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "wait", wait)
+    );
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CreateSubmissionResponse> localVarReturnType = new GenericType<CreateSubmissionResponse>() {};
+    return apiClient.invokeAPI("PdfApi.generatePdf", localVarPath, "POST", localVarQueryParams, submission,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Generates a new PDF for an HTML template
+   * 
+   * @param templateId  (required)
+   * @param submission  (required)
+   * @param wait Wait for submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @return CreateSubmissionResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> submission created </td><td>  -  </td></tr>
+     </table>
+   */
+  public CreateSubmissionResponse generatePdfForHtmlTemplate(String templateId, CreateHtmlSubmissionData submission, Boolean wait) throws ApiException {
+    return generatePdfForHtmlTemplateWithHttpInfo(templateId, submission, wait).getData();
+  }
+
+  /**
+   * Generates a new PDF for an HTML template
+   * 
+   * @param templateId  (required)
+   * @param submission  (required)
+   * @param wait Wait for submission to be processed before returning. Set to false to return immediately. Default: true (on sync.* subdomain) (optional, default to true)
+   * @return ApiResponse&lt;CreateSubmissionResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 201 </td><td> submission created </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CreateSubmissionResponse> generatePdfForHtmlTemplateWithHttpInfo(String templateId, CreateHtmlSubmissionData submission, Boolean wait) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling generatePdfForHtmlTemplate");
+    }
+    if (submission == null) {
+      throw new ApiException(400, "Missing the required parameter 'submission' when calling generatePdfForHtmlTemplate");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/submissions?endpoint_description=html_templates"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "wait", wait)
+    );
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CreateSubmissionResponse> localVarReturnType = new GenericType<CreateSubmissionResponse>() {};
+    return apiClient.invokeAPI("PdfApi.generatePdfForHtmlTemplate", localVarPath, "POST", localVarQueryParams, submission,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Generated a preview PDF for partially completed data requests
+   * 
+   * @param submissionId  (required)
+   * @return SuccessErrorResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> preview was successfully requested </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission not found </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> error requesting preview </td><td>  -  </td></tr>
+     </table>
+   */
+  public SuccessErrorResponse generatePreview(String submissionId) throws ApiException {
+    return generatePreviewWithHttpInfo(submissionId).getData();
+  }
+
+  /**
+   * Generated a preview PDF for partially completed data requests
+   * 
+   * @param submissionId  (required)
+   * @return ApiResponse&lt;SuccessErrorResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> preview was successfully requested </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission not found </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> error requesting preview </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<SuccessErrorResponse> generatePreviewWithHttpInfo(String submissionId) throws ApiException {
+    // Check required parameters
+    if (submissionId == null) {
+      throw new ApiException(400, "Missing the required parameter 'submissionId' when calling generatePreview");
+    }
+
+    // Path parameters
+    String localVarPath = "/submissions/{submission_id}/generate_preview"
+            .replaceAll("\\{submission_id}", apiClient.escapeString(submissionId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<SuccessErrorResponse> localVarReturnType = new GenericType<SuccessErrorResponse>() {};
+    return apiClient.invokeAPI("PdfApi.generatePreview", localVarPath, "POST", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Check the status of a combined submission (merged PDFs)
+   * 
+   * @param combinedSubmissionId  (required)
+   * @return CombinedSubmission
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> processed combined submission found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> combined submission not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public CombinedSubmission getCombinedSubmission(String combinedSubmissionId) throws ApiException {
+    return getCombinedSubmissionWithHttpInfo(combinedSubmissionId).getData();
+  }
+
+  /**
+   * Check the status of a combined submission (merged PDFs)
+   * 
+   * @param combinedSubmissionId  (required)
+   * @return ApiResponse&lt;CombinedSubmission&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> processed combined submission found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> combined submission not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CombinedSubmission> getCombinedSubmissionWithHttpInfo(String combinedSubmissionId) throws ApiException {
+    // Check required parameters
+    if (combinedSubmissionId == null) {
+      throw new ApiException(400, "Missing the required parameter 'combinedSubmissionId' when calling getCombinedSubmission");
+    }
+
+    // Path parameters
+    String localVarPath = "/combined_submissions/{combined_submission_id}"
+            .replaceAll("\\{combined_submission_id}", apiClient.escapeString(combinedSubmissionId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CombinedSubmission> localVarReturnType = new GenericType<CombinedSubmission>() {};
+    return apiClient.invokeAPI("PdfApi.getCombinedSubmission", localVarPath, "GET", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Look up a submission data request
+   * 
+   * @param dataRequestId  (required)
+   * @return SubmissionDataRequestShow
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> completed submission data request found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission data request not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public SubmissionDataRequestShow getDataRequest(String dataRequestId) throws ApiException {
+    return getDataRequestWithHttpInfo(dataRequestId).getData();
+  }
+
+  /**
+   * Look up a submission data request
+   * 
+   * @param dataRequestId  (required)
+   * @return ApiResponse&lt;SubmissionDataRequestShow&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> completed submission data request found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission data request not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<SubmissionDataRequestShow> getDataRequestWithHttpInfo(String dataRequestId) throws ApiException {
+    // Check required parameters
+    if (dataRequestId == null) {
+      throw new ApiException(400, "Missing the required parameter 'dataRequestId' when calling getDataRequest");
+    }
+
+    // Path parameters
+    String localVarPath = "/data_requests/{data_request_id}"
+            .replaceAll("\\{data_request_id}", apiClient.escapeString(dataRequestId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<SubmissionDataRequestShow> localVarReturnType = new GenericType<SubmissionDataRequestShow>() {};
+    return apiClient.invokeAPI("PdfApi.getDataRequest", localVarPath, "GET", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Fetch the full template attributes
+   * 
+   * @param templateId  (required)
+   * @return Template
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> template found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public Template getFullTemplate(String templateId) throws ApiException {
+    return getFullTemplateWithHttpInfo(templateId).getData();
+  }
+
+  /**
+   * Fetch the full template attributes
+   * 
+   * @param templateId  (required)
+   * @return ApiResponse&lt;Template&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> template found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<Template> getFullTemplateWithHttpInfo(String templateId) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling getFullTemplate");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}?full=true"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<Template> localVarReturnType = new GenericType<Template>() {};
+    return apiClient.invokeAPI("PdfApi.getFullTemplate", localVarPath, "GET", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Get a presigned URL so that you can upload a file to our AWS S3 bucket
+   * 
+   * @return UploadPresignResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> presign URL generated </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public UploadPresignResponse getPresignUrl() throws ApiException {
+    return getPresignUrlWithHttpInfo().getData();
+  }
+
+  /**
+   * Get a presigned URL so that you can upload a file to our AWS S3 bucket
+   * 
+   * @return ApiResponse&lt;UploadPresignResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> presign URL generated </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<UploadPresignResponse> getPresignUrlWithHttpInfo() throws ApiException {
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<UploadPresignResponse> localVarReturnType = new GenericType<UploadPresignResponse>() {};
+    return apiClient.invokeAPI("PdfApi.getPresignUrl", "/uploads/presign", "GET", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Check the status of a PDF
+   * 
+   * @param submissionId  (required)
+   * @param includeData  (optional)
+   * @return Submission
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> processed submission found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public Submission getSubmission(String submissionId, Boolean includeData) throws ApiException {
+    return getSubmissionWithHttpInfo(submissionId, includeData).getData();
+  }
+
+  /**
+   * Check the status of a PDF
+   * 
+   * @param submissionId  (required)
+   * @param includeData  (optional)
+   * @return ApiResponse&lt;Submission&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> processed submission found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<Submission> getSubmissionWithHttpInfo(String submissionId, Boolean includeData) throws ApiException {
+    // Check required parameters
+    if (submissionId == null) {
+      throw new ApiException(400, "Missing the required parameter 'submissionId' when calling getSubmission");
+    }
+
+    // Path parameters
+    String localVarPath = "/submissions/{submission_id}"
+            .replaceAll("\\{submission_id}", apiClient.escapeString(submissionId.toString()));
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "include_data", includeData)
+    );
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<Submission> localVarReturnType = new GenericType<Submission>() {};
+    return apiClient.invokeAPI("PdfApi.getSubmission", localVarPath, "GET", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Check the status of a submission batch job
+   * 
+   * @param submissionBatchId  (required)
+   * @param includeSubmissions  (optional)
+   * @return SubmissionBatchWithSubmissions
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> processed submission batch found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission batch not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public SubmissionBatchWithSubmissions getSubmissionBatch(String submissionBatchId, Boolean includeSubmissions) throws ApiException {
+    return getSubmissionBatchWithHttpInfo(submissionBatchId, includeSubmissions).getData();
+  }
+
+  /**
+   * Check the status of a submission batch job
+   * 
+   * @param submissionBatchId  (required)
+   * @param includeSubmissions  (optional)
+   * @return ApiResponse&lt;SubmissionBatchWithSubmissions&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> processed submission batch found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission batch not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<SubmissionBatchWithSubmissions> getSubmissionBatchWithHttpInfo(String submissionBatchId, Boolean includeSubmissions) throws ApiException {
+    // Check required parameters
+    if (submissionBatchId == null) {
+      throw new ApiException(400, "Missing the required parameter 'submissionBatchId' when calling getSubmissionBatch");
+    }
+
+    // Path parameters
+    String localVarPath = "/submissions/batches/{submission_batch_id}"
+            .replaceAll("\\{submission_batch_id}", apiClient.escapeString(submissionBatchId.toString()));
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "include_submissions", includeSubmissions)
+    );
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<SubmissionBatchWithSubmissions> localVarReturnType = new GenericType<SubmissionBatchWithSubmissions>() {};
+    return apiClient.invokeAPI("PdfApi.getSubmissionBatch", localVarPath, "GET", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Check the status of an uploaded template
+   * 
+   * @param templateId  (required)
+   * @return TemplatePreview
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> template found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public TemplatePreview getTemplate(String templateId) throws ApiException {
+    return getTemplateWithHttpInfo(templateId).getData();
+  }
+
+  /**
+   * Check the status of an uploaded template
+   * 
+   * @param templateId  (required)
+   * @return ApiResponse&lt;TemplatePreview&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> template found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<TemplatePreview> getTemplateWithHttpInfo(String templateId) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling getTemplate");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<TemplatePreview> localVarReturnType = new GenericType<TemplatePreview>() {};
+    return apiClient.invokeAPI("PdfApi.getTemplate", localVarPath, "GET", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Fetch the JSON schema for a template
+   * 
+   * @param templateId  (required)
+   * @return JsonSchema
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> template found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public JsonSchema getTemplateSchema(String templateId) throws ApiException {
+    return getTemplateSchemaWithHttpInfo(templateId).getData();
+  }
+
+  /**
+   * Fetch the JSON schema for a template
+   * 
+   * @param templateId  (required)
+   * @return ApiResponse&lt;JsonSchema&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> template found </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<JsonSchema> getTemplateSchemaWithHttpInfo(String templateId) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling getTemplateSchema");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/schema"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<JsonSchema> localVarReturnType = new GenericType<JsonSchema>() {};
+    return apiClient.invokeAPI("PdfApi.getTemplateSchema", localVarPath, "GET", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Get a list of all combined submissions
+   * 
+   * @param page Default: 1 (optional)
+   * @param perPage Default: 50 (optional)
+   * @return List&lt;CombinedSubmission&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> enumerate all combined submissions </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public List<CombinedSubmission> listCombinedSubmissions(Integer page, Integer perPage) throws ApiException {
+    return listCombinedSubmissionsWithHttpInfo(page, perPage).getData();
+  }
+
+  /**
+   * Get a list of all combined submissions
+   * 
+   * @param page Default: 1 (optional)
+   * @param perPage Default: 50 (optional)
+   * @return ApiResponse&lt;List&lt;CombinedSubmission&gt;&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> enumerate all combined submissions </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<List<CombinedSubmission>> listCombinedSubmissionsWithHttpInfo(Integer page, Integer perPage) throws ApiException {
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "page", page)
+    );
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "per_page", perPage));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<List<CombinedSubmission>> localVarReturnType = new GenericType<List<CombinedSubmission>>() {};
+    return apiClient.invokeAPI("PdfApi.listCombinedSubmissions", "/combined_submissions", "GET", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Get a list of all folders
+   * 
+   * @param parentFolderId Filter By Folder Id (optional)
+   * @return List&lt;Folder&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> enumerate all folders </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public List<Folder> listFolders(String parentFolderId) throws ApiException {
+    return listFoldersWithHttpInfo(parentFolderId).getData();
+  }
+
+  /**
+   * Get a list of all folders
+   * 
+   * @param parentFolderId Filter By Folder Id (optional)
+   * @return ApiResponse&lt;List&lt;Folder&gt;&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> enumerate all folders </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<List<Folder>> listFoldersWithHttpInfo(String parentFolderId) throws ApiException {
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "parent_folder_id", parentFolderId)
+    );
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<List<Folder>> localVarReturnType = new GenericType<List<Folder>>() {};
+    return apiClient.invokeAPI("PdfApi.listFolders", "/folders/", "GET", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * List all submissions
+   * 
+   * @param cursor  (optional)
+   * @param limit  (optional)
+   * @param createdAfter  (optional)
+   * @param createdBefore  (optional)
+   * @param type  (optional)
+   * @param includeData  (optional)
+   * @return ListSubmissionsResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> listing submissions </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid type </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ListSubmissionsResponse listSubmissions(String cursor, BigDecimal limit, String createdAfter, String createdBefore, String type, Boolean includeData) throws ApiException {
+    return listSubmissionsWithHttpInfo(cursor, limit, createdAfter, createdBefore, type, includeData).getData();
+  }
+
+  /**
+   * List all submissions
+   * 
+   * @param cursor  (optional)
+   * @param limit  (optional)
+   * @param createdAfter  (optional)
+   * @param createdBefore  (optional)
+   * @param type  (optional)
+   * @param includeData  (optional)
+   * @return ApiResponse&lt;ListSubmissionsResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> listing submissions </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid type </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<ListSubmissionsResponse> listSubmissionsWithHttpInfo(String cursor, BigDecimal limit, String createdAfter, String createdBefore, String type, Boolean includeData) throws ApiException {
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "cursor", cursor)
+    );
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "limit", limit));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "created_after", createdAfter));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "created_before", createdBefore));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "type", type));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "include_data", includeData));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<ListSubmissionsResponse> localVarReturnType = new GenericType<ListSubmissionsResponse>() {};
+    return apiClient.invokeAPI("PdfApi.listSubmissions", "/submissions", "GET", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * List all submissions for a given template
+   * 
+   * @param templateId  (required)
+   * @param cursor  (optional)
+   * @param limit  (optional)
+   * @param createdAfter  (optional)
+   * @param createdBefore  (optional)
+   * @param type  (optional)
+   * @param includeData  (optional)
+   * @return ListSubmissionsResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> listing submissions </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> invalid template id </td><td>  -  </td></tr>
+     </table>
+   */
+  public ListSubmissionsResponse listTemplateSubmissions(String templateId, String cursor, BigDecimal limit, String createdAfter, String createdBefore, String type, Boolean includeData) throws ApiException {
+    return listTemplateSubmissionsWithHttpInfo(templateId, cursor, limit, createdAfter, createdBefore, type, includeData).getData();
+  }
+
+  /**
+   * List all submissions for a given template
+   * 
+   * @param templateId  (required)
+   * @param cursor  (optional)
+   * @param limit  (optional)
+   * @param createdAfter  (optional)
+   * @param createdBefore  (optional)
+   * @param type  (optional)
+   * @param includeData  (optional)
+   * @return ApiResponse&lt;ListSubmissionsResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> listing submissions </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> invalid template id </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<ListSubmissionsResponse> listTemplateSubmissionsWithHttpInfo(String templateId, String cursor, BigDecimal limit, String createdAfter, String createdBefore, String type, Boolean includeData) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling listTemplateSubmissions");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/submissions"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "cursor", cursor)
+    );
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "limit", limit));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "created_after", createdAfter));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "created_before", createdBefore));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "type", type));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "include_data", includeData));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<ListSubmissionsResponse> localVarReturnType = new GenericType<ListSubmissionsResponse>() {};
+    return apiClient.invokeAPI("PdfApi.listTemplateSubmissions", localVarPath, "GET", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Get a list of all templates
+   * 
+   * @param query Search By Name (optional)
+   * @param parentFolderId Filter By Folder Id (optional)
+   * @param page Default: 1 (optional)
+   * @param perPage Default: 50 (optional)
+   * @return List&lt;TemplatePreview&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> enumerate all templates </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> filter templates by invalid folder id </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public List<TemplatePreview> listTemplates(String query, String parentFolderId, Integer page, Integer perPage) throws ApiException {
+    return listTemplatesWithHttpInfo(query, parentFolderId, page, perPage).getData();
+  }
+
+  /**
+   * Get a list of all templates
+   * 
+   * @param query Search By Name (optional)
+   * @param parentFolderId Filter By Folder Id (optional)
+   * @param page Default: 1 (optional)
+   * @param perPage Default: 50 (optional)
+   * @return ApiResponse&lt;List&lt;TemplatePreview&gt;&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> enumerate all templates </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> filter templates by invalid folder id </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<List<TemplatePreview>> listTemplatesWithHttpInfo(String query, String parentFolderId, Integer page, Integer perPage) throws ApiException {
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "query", query)
+    );
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "parent_folder_id", parentFolderId));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "page", page));
+    localVarQueryParams.addAll(apiClient.parameterToPairs("", "per_page", perPage));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<List<TemplatePreview>> localVarReturnType = new GenericType<List<TemplatePreview>>() {};
+    return apiClient.invokeAPI("PdfApi.listTemplates", "/templates", "GET", localVarQueryParams, null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Move a folder
+   * 
+   * @param folderId  (required)
+   * @param data  (required)
+   * @return Folder
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 404 </td><td> parent folder doesn&#39;t exist </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> move to root folder </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public Folder moveFolderToFolder(String folderId, MoveFolderData data) throws ApiException {
+    return moveFolderToFolderWithHttpInfo(folderId, data).getData();
+  }
+
+  /**
+   * Move a folder
+   * 
+   * @param folderId  (required)
+   * @param data  (required)
+   * @return ApiResponse&lt;Folder&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 404 </td><td> parent folder doesn&#39;t exist </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> move to root folder </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<Folder> moveFolderToFolderWithHttpInfo(String folderId, MoveFolderData data) throws ApiException {
+    // Check required parameters
+    if (folderId == null) {
+      throw new ApiException(400, "Missing the required parameter 'folderId' when calling moveFolderToFolder");
+    }
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling moveFolderToFolder");
+    }
+
+    // Path parameters
+    String localVarPath = "/folders/{folder_id}/move"
+            .replaceAll("\\{folder_id}", apiClient.escapeString(folderId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<Folder> localVarReturnType = new GenericType<Folder>() {};
+    return apiClient.invokeAPI("PdfApi.moveFolderToFolder", localVarPath, "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Move Template to folder
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return TemplatePreview
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> move template success </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> folder not found </td><td>  -  </td></tr>
+     </table>
+   */
+  public TemplatePreview moveTemplateToFolder(String templateId, MoveTemplateData data) throws ApiException {
+    return moveTemplateToFolderWithHttpInfo(templateId, data).getData();
+  }
+
+  /**
+   * Move Template to folder
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return ApiResponse&lt;TemplatePreview&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> move template success </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> folder not found </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<TemplatePreview> moveTemplateToFolderWithHttpInfo(String templateId, MoveTemplateData data) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling moveTemplateToFolder");
+    }
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling moveTemplateToFolder");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/move"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<TemplatePreview> localVarReturnType = new GenericType<TemplatePreview>() {};
+    return apiClient.invokeAPI("PdfApi.moveTemplateToFolder", localVarPath, "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Rename a folder
+   * 
+   * @param folderId  (required)
+   * @param data  (required)
+   * @return Folder
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 422 </td><td> name already exist </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> folder doesn&#39;t belong to me </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> successful rename </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public Folder renameFolder(String folderId, RenameFolderData data) throws ApiException {
+    return renameFolderWithHttpInfo(folderId, data).getData();
+  }
+
+  /**
+   * Rename a folder
+   * 
+   * @param folderId  (required)
+   * @param data  (required)
+   * @return ApiResponse&lt;Folder&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 422 </td><td> name already exist </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> folder doesn&#39;t belong to me </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> successful rename </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<Folder> renameFolderWithHttpInfo(String folderId, RenameFolderData data) throws ApiException {
+    // Check required parameters
+    if (folderId == null) {
+      throw new ApiException(400, "Missing the required parameter 'folderId' when calling renameFolder");
+    }
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling renameFolder");
+    }
+
+    // Path parameters
+    String localVarPath = "/folders/{folder_id}/rename"
+            .replaceAll("\\{folder_id}", apiClient.escapeString(folderId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<Folder> localVarReturnType = new GenericType<Folder>() {};
+    return apiClient.invokeAPI("PdfApi.renameFolder", localVarPath, "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Test Authentication
+   * 
+   * @return SuccessErrorResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> authentication succeeded </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public SuccessErrorResponse testAuthentication() throws ApiException {
+    return testAuthenticationWithHttpInfo().getData();
+  }
+
+  /**
+   * Test Authentication
+   * 
+   * @return ApiResponse&lt;SuccessErrorResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> authentication succeeded </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<SuccessErrorResponse> testAuthenticationWithHttpInfo() throws ApiException {
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType();
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<SuccessErrorResponse> localVarReturnType = new GenericType<SuccessErrorResponse>() {};
+    return apiClient.invokeAPI("PdfApi.testAuthentication", "/authentication", "GET", new ArrayList<>(), null,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Update a submission data request
+   * 
+   * @param dataRequestId  (required)
+   * @param data  (required)
+   * @return CreateSubmissionDataRequestResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> submission data request updated </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission data request not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public CreateSubmissionDataRequestResponse updateDataRequest(String dataRequestId, UpdateSubmissionDataRequestData data) throws ApiException {
+    return updateDataRequestWithHttpInfo(dataRequestId, data).getData();
+  }
+
+  /**
+   * Update a submission data request
+   * 
+   * @param dataRequestId  (required)
+   * @param data  (required)
+   * @return ApiResponse&lt;CreateSubmissionDataRequestResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> submission data request updated </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid request </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> submission data request not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<CreateSubmissionDataRequestResponse> updateDataRequestWithHttpInfo(String dataRequestId, UpdateSubmissionDataRequestData data) throws ApiException {
+    // Check required parameters
+    if (dataRequestId == null) {
+      throw new ApiException(400, "Missing the required parameter 'dataRequestId' when calling updateDataRequest");
+    }
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling updateDataRequest");
+    }
+
+    // Path parameters
+    String localVarPath = "/data_requests/{data_request_id}"
+            .replaceAll("\\{data_request_id}", apiClient.escapeString(dataRequestId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<CreateSubmissionDataRequestResponse> localVarReturnType = new GenericType<CreateSubmissionDataRequestResponse>() {};
+    return apiClient.invokeAPI("PdfApi.updateDataRequest", localVarPath, "PUT", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+  /**
+   * Update a Template
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return SuccessMultipleErrorsResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> update template success </td><td>  -  </td></tr>
+     </table>
+   */
+  public SuccessMultipleErrorsResponse updateTemplate(String templateId, UpdateHtmlTemplate data) throws ApiException {
+    return updateTemplateWithHttpInfo(templateId, data).getData();
+  }
+
+  /**
+   * Update a Template
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return ApiResponse&lt;SuccessMultipleErrorsResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> update template success </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<SuccessMultipleErrorsResponse> updateTemplateWithHttpInfo(String templateId, UpdateHtmlTemplate data) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling updateTemplate");
+    }
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling updateTemplate");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<SuccessMultipleErrorsResponse> localVarReturnType = new GenericType<SuccessMultipleErrorsResponse>() {};
+    return apiClient.invokeAPI("PdfApi.updateTemplate", localVarPath, "PUT", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
+}
diff --git a/src/main/java/com/docspring/RFC3339DateFormat.java b/src/main/java/com/docspring/RFC3339DateFormat.java
new file mode 100644
index 0000000..c47034f
--- /dev/null
+++ b/src/main/java/com/docspring/RFC3339DateFormat.java
@@ -0,0 +1,58 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+package com.docspring;
+
+import com.fasterxml.jackson.databind.util.StdDateFormat;
+
+import java.text.DateFormat;
+import java.text.FieldPosition;
+import java.text.ParsePosition;
+import java.util.Date;
+import java.text.DecimalFormat;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class RFC3339DateFormat extends DateFormat {
+  private static final long serialVersionUID = 1L;
+  private static final TimeZone TIMEZONE_Z = TimeZone.getTimeZone("UTC");
+
+  private final StdDateFormat fmt = new StdDateFormat()
+          .withTimeZone(TIMEZONE_Z)
+          .withColonInTimeZone(true);
+
+  public RFC3339DateFormat() {
+    this.calendar = new GregorianCalendar();
+    this.numberFormat = new DecimalFormat();
+  }
+
+  @Override
+  public Date parse(String source) {
+    return parse(source, new ParsePosition(0));
+  }
+
+  @Override
+  public Date parse(String source, ParsePosition pos) {
+    return fmt.parse(source, pos);
+  }
+
+  @Override
+  public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
+    return fmt.format(date, toAppendTo, fieldPosition);
+  }
+
+  @Override
+  public Object clone() {
+    return super.clone();
+  }
+}
diff --git a/src/main/java/com/docspring/RenameFolderData.java b/src/main/java/com/docspring/RenameFolderData.java
new file mode 100644
index 0000000..fdeb870
--- /dev/null
+++ b/src/main/java/com/docspring/RenameFolderData.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * RenameFolderData
+ */
+@JsonPropertyOrder({
+  RenameFolderData.JSON_PROPERTY_NAME
+})
+@JsonTypeName("rename_folder_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class RenameFolderData {
+  public static final String JSON_PROPERTY_NAME = "name";
+  @javax.annotation.Nonnull
+  private String name;
+
+  public RenameFolderData() { 
+  }
+
+  public RenameFolderData name(@javax.annotation.Nonnull String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getName() {
+    return name;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setName(@javax.annotation.Nonnull String name) {
+    this.name = name;
+  }
+
+
+  /**
+   * Return true if this rename_folder_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    RenameFolderData renameFolderData = (RenameFolderData) o;
+    return Objects.equals(this.name, renameFolderData.name);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class RenameFolderData {\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/ServerConfiguration.java b/src/main/java/com/docspring/ServerConfiguration.java
new file mode 100644
index 0000000..9ac320c
--- /dev/null
+++ b/src/main/java/com/docspring/ServerConfiguration.java
@@ -0,0 +1,72 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Map;
+
+/**
+ * Representing a Server configuration.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class ServerConfiguration {
+    public String URL;
+    public String description;
+    public Map<String, ServerVariable> variables;
+
+    /**
+     * @param URL A URL to the target host.
+     * @param description A description of the host designated by the URL.
+     * @param variables A map between a variable name and its value. The value is used for substitution in the server's URL template.
+     */
+    public ServerConfiguration(String URL, String description, Map<String, ServerVariable> variables) {
+        this.URL = URL;
+        this.description = description;
+        this.variables = variables;
+    }
+
+    /**
+     * Format URL template using given variables.
+     *
+     * @param variables A map between a variable name and its value.
+     * @return Formatted URL.
+     */
+    public String URL(Map<String, String> variables) {
+        String url = this.URL;
+
+        // go through variables and replace placeholders
+        for (Map.Entry<String, ServerVariable> variable: this.variables.entrySet()) {
+            String name = variable.getKey();
+            ServerVariable serverVariable = variable.getValue();
+            String value = serverVariable.defaultValue;
+
+            if (variables != null && variables.containsKey(name)) {
+                value = variables.get(name);
+                if (serverVariable.enumValues.size() > 0 && !serverVariable.enumValues.contains(value)) {
+                    throw new IllegalArgumentException("The variable " + name + " in the server URL has invalid value " + value + ".");
+                }
+            }
+            url = url.replace("{" + name + "}", value);
+        }
+        return url;
+    }
+
+    /**
+     * Format URL template using default server variables.
+     *
+     * @return Formatted URL.
+     */
+    public String URL() {
+        return URL(null);
+    }
+}
diff --git a/src/main/java/com/docspring/ServerVariable.java b/src/main/java/com/docspring/ServerVariable.java
new file mode 100644
index 0000000..80a3186
--- /dev/null
+++ b/src/main/java/com/docspring/ServerVariable.java
@@ -0,0 +1,37 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.HashSet;
+
+/**
+ * Representing a Server Variable for server URL template substitution.
+ */
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class ServerVariable {
+    public String description;
+    public String defaultValue;
+    public HashSet<String> enumValues = null;
+
+    /**
+     * @param description A description for the server variable.
+     * @param defaultValue The default value to use for substitution.
+     * @param enumValues An enumeration of string values to be used if the substitution options are from a limited set.
+     */
+    public ServerVariable(String description, String defaultValue, HashSet<String> enumValues) {
+        this.description = description;
+        this.defaultValue = defaultValue;
+        this.enumValues = enumValues;
+    }
+}
diff --git a/src/main/java/com/docspring/StringUtil.java b/src/main/java/com/docspring/StringUtil.java
new file mode 100644
index 0000000..f92fe7e
--- /dev/null
+++ b/src/main/java/com/docspring/StringUtil.java
@@ -0,0 +1,83 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class StringUtil {
+  /**
+   * Check if the given array contains the given value (with case-insensitive comparison).
+   *
+   * @param array The array
+   * @param value The value to search
+   * @return true if the array contains the value
+   */
+  public static boolean containsIgnoreCase(String[] array, String value) {
+    for (String str : array) {
+      if (value == null && str == null) {
+        return true;
+      }
+      if (value != null && value.equalsIgnoreCase(str)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Join an array of strings with the given separator.
+   * <p>
+   * Note: This might be replaced by utility method from commons-lang or guava someday
+   * if one of those libraries is added as dependency.
+   * </p>
+   *
+   * @param array     The array of strings
+   * @param separator The separator
+   * @return the resulting string
+   */
+  public static String join(String[] array, String separator) {
+    int len = array.length;
+    if (len == 0) {
+      return "";
+    }
+
+    StringBuilder out = new StringBuilder();
+    out.append(array[0]);
+    for (int i = 1; i < len; i++) {
+      out.append(separator).append(array[i]);
+    }
+    return out.toString();
+  }
+
+  /**
+   * Join a list of strings with the given separator.
+   *
+   * @param list      The list of strings
+   * @param separator The separator
+   * @return the resulting string
+   */
+  public static String join(Collection<String> list, String separator) {
+    Iterator<String> iterator = list.iterator();
+    StringBuilder out = new StringBuilder();
+    if (iterator.hasNext()) {
+      out.append(iterator.next());
+    }
+    while (iterator.hasNext()) {
+      out.append(separator).append(iterator.next());
+    }
+    return out.toString();
+  }
+}
diff --git a/src/main/java/com/docspring/Submission.java b/src/main/java/com/docspring/Submission.java
new file mode 100644
index 0000000..26f83cb
--- /dev/null
+++ b/src/main/java/com/docspring/Submission.java
@@ -0,0 +1,967 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.SubmissionAction;
+import com.docspring.SubmissionDataRequest;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * Submission
+ */
+@JsonPropertyOrder({
+  Submission.JSON_PROPERTY_BATCH_ID,
+  Submission.JSON_PROPERTY_DATA_REQUESTS,
+  Submission.JSON_PROPERTY_EDITABLE,
+  Submission.JSON_PROPERTY_EXPIRED,
+  Submission.JSON_PROPERTY_EXPIRES_AT,
+  Submission.JSON_PROPERTY_ID,
+  Submission.JSON_PROPERTY_JSON_SCHEMA_ERRORS,
+  Submission.JSON_PROPERTY_METADATA,
+  Submission.JSON_PROPERTY_PASSWORD,
+  Submission.JSON_PROPERTY_PROCESSED_AT,
+  Submission.JSON_PROPERTY_STATE,
+  Submission.JSON_PROPERTY_TEMPLATE_ID,
+  Submission.JSON_PROPERTY_TEST,
+  Submission.JSON_PROPERTY_TRUNCATED_TEXT,
+  Submission.JSON_PROPERTY_PDF_HASH,
+  Submission.JSON_PROPERTY_DOWNLOAD_URL,
+  Submission.JSON_PROPERTY_PERMANENT_DOWNLOAD_URL,
+  Submission.JSON_PROPERTY_PREVIEW_DOWNLOAD_URL,
+  Submission.JSON_PROPERTY_PREVIEW_GENERATED_AT,
+  Submission.JSON_PROPERTY_AUDIT_TRAIL_DOWNLOAD_URL,
+  Submission.JSON_PROPERTY_ACTIONS,
+  Submission.JSON_PROPERTY_SOURCE,
+  Submission.JSON_PROPERTY_REFERRER,
+  Submission.JSON_PROPERTY_DATA
+})
+@JsonTypeName("submission")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class Submission {
+  public static final String JSON_PROPERTY_BATCH_ID = "batch_id";
+  @javax.annotation.Nullable
+  private String batchId;
+
+  public static final String JSON_PROPERTY_DATA_REQUESTS = "data_requests";
+  @javax.annotation.Nonnull
+  private List<SubmissionDataRequest> dataRequests = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_EDITABLE = "editable";
+  @javax.annotation.Nullable
+  private Boolean editable;
+
+  public static final String JSON_PROPERTY_EXPIRED = "expired";
+  @javax.annotation.Nonnull
+  private Boolean expired;
+
+  public static final String JSON_PROPERTY_EXPIRES_AT = "expires_at";
+  @javax.annotation.Nullable
+  private String expiresAt;
+
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_JSON_SCHEMA_ERRORS = "json_schema_errors";
+  @javax.annotation.Nullable
+  private List<String> jsonSchemaErrors;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nonnull
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PASSWORD = "password";
+  @javax.annotation.Nullable
+  private String password;
+
+  public static final String JSON_PROPERTY_PROCESSED_AT = "processed_at";
+  @javax.annotation.Nullable
+  private String processedAt;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    INVALID_DATA(String.valueOf("invalid_data")),
+    
+    ERROR(String.valueOf("error")),
+    
+    IMAGE_DOWNLOAD_FAILED(String.valueOf("image_download_failed")),
+    
+    IMAGE_PROCESSING_FAILED(String.valueOf("image_processing_failed")),
+    
+    WAITING_FOR_DATA_REQUESTS(String.valueOf("waiting_for_data_requests")),
+    
+    SYNTAX_ERROR(String.valueOf("syntax_error")),
+    
+    ACCOUNT_SUSPENDED(String.valueOf("account_suspended")),
+    
+    LICENSE_REVOKED(String.valueOf("license_revoked")),
+    
+    ACCIDENTAL(String.valueOf("accidental"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  public static final String JSON_PROPERTY_TEMPLATE_ID = "template_id";
+  @javax.annotation.Nullable
+  private String templateId;
+
+  public static final String JSON_PROPERTY_TEST = "test";
+  @javax.annotation.Nonnull
+  private Boolean test;
+
+  public static final String JSON_PROPERTY_TRUNCATED_TEXT = "truncated_text";
+  @javax.annotation.Nullable
+  private Object truncatedText;
+
+  public static final String JSON_PROPERTY_PDF_HASH = "pdf_hash";
+  @javax.annotation.Nullable
+  private String pdfHash;
+
+  public static final String JSON_PROPERTY_DOWNLOAD_URL = "download_url";
+  @javax.annotation.Nullable
+  private String downloadUrl;
+
+  public static final String JSON_PROPERTY_PERMANENT_DOWNLOAD_URL = "permanent_download_url";
+  @javax.annotation.Nullable
+  private String permanentDownloadUrl;
+
+  public static final String JSON_PROPERTY_PREVIEW_DOWNLOAD_URL = "preview_download_url";
+  @javax.annotation.Nullable
+  private String previewDownloadUrl;
+
+  public static final String JSON_PROPERTY_PREVIEW_GENERATED_AT = "preview_generated_at";
+  @javax.annotation.Nullable
+  private String previewGeneratedAt;
+
+  public static final String JSON_PROPERTY_AUDIT_TRAIL_DOWNLOAD_URL = "audit_trail_download_url";
+  @javax.annotation.Nullable
+  private String auditTrailDownloadUrl;
+
+  public static final String JSON_PROPERTY_ACTIONS = "actions";
+  @javax.annotation.Nonnull
+  private List<SubmissionAction> actions = new ArrayList<>();
+
+  /**
+   * Gets or Sets source
+   */
+  public enum SourceEnum {
+    API(String.valueOf("api")),
+    
+    WEB(String.valueOf("web")),
+    
+    REPROCESS(String.valueOf("reprocess")),
+    
+    WEBHOOK(String.valueOf("webhook"));
+
+    private String value;
+
+    SourceEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static SourceEnum fromValue(String value) {
+      for (SourceEnum b : SourceEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_SOURCE = "source";
+  @javax.annotation.Nonnull
+  private SourceEnum source;
+
+  public static final String JSON_PROPERTY_REFERRER = "referrer";
+  @javax.annotation.Nullable
+  private String referrer;
+
+  public static final String JSON_PROPERTY_DATA = "data";
+  @javax.annotation.Nullable
+  private Object data;
+
+  public Submission() { 
+  }
+
+  public Submission batchId(@javax.annotation.Nullable String batchId) {
+    this.batchId = batchId;
+    return this;
+  }
+
+  /**
+   * Get batchId
+   * @return batchId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_BATCH_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getBatchId() {
+    return batchId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_BATCH_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setBatchId(@javax.annotation.Nullable String batchId) {
+    this.batchId = batchId;
+  }
+
+
+  public Submission dataRequests(@javax.annotation.Nonnull List<SubmissionDataRequest> dataRequests) {
+    this.dataRequests = dataRequests;
+    return this;
+  }
+
+  public Submission addDataRequestsItem(SubmissionDataRequest dataRequestsItem) {
+    if (this.dataRequests == null) {
+      this.dataRequests = new ArrayList<>();
+    }
+    this.dataRequests.add(dataRequestsItem);
+    return this;
+  }
+
+  /**
+   * Get dataRequests
+   * @return dataRequests
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DATA_REQUESTS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<SubmissionDataRequest> getDataRequests() {
+    return dataRequests;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA_REQUESTS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDataRequests(@javax.annotation.Nonnull List<SubmissionDataRequest> dataRequests) {
+    this.dataRequests = dataRequests;
+  }
+
+
+  public Submission editable(@javax.annotation.Nullable Boolean editable) {
+    this.editable = editable;
+    return this;
+  }
+
+  /**
+   * Get editable
+   * @return editable
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EDITABLE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getEditable() {
+    return editable;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EDITABLE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEditable(@javax.annotation.Nullable Boolean editable) {
+    this.editable = editable;
+  }
+
+
+  public Submission expired(@javax.annotation.Nonnull Boolean expired) {
+    this.expired = expired;
+    return this;
+  }
+
+  /**
+   * Get expired
+   * @return expired
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getExpired() {
+    return expired;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpired(@javax.annotation.Nonnull Boolean expired) {
+    this.expired = expired;
+  }
+
+
+  public Submission expiresAt(@javax.annotation.Nullable String expiresAt) {
+    this.expiresAt = expiresAt;
+    return this;
+  }
+
+  /**
+   * Get expiresAt
+   * @return expiresAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExpiresAt() {
+    return expiresAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpiresAt(@javax.annotation.Nullable String expiresAt) {
+    this.expiresAt = expiresAt;
+  }
+
+
+  public Submission id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public Submission jsonSchemaErrors(@javax.annotation.Nullable List<String> jsonSchemaErrors) {
+    this.jsonSchemaErrors = jsonSchemaErrors;
+    return this;
+  }
+
+  public Submission addJsonSchemaErrorsItem(String jsonSchemaErrorsItem) {
+    if (this.jsonSchemaErrors == null) {
+      this.jsonSchemaErrors = new ArrayList<>();
+    }
+    this.jsonSchemaErrors.add(jsonSchemaErrorsItem);
+    return this;
+  }
+
+  /**
+   * Get jsonSchemaErrors
+   * @return jsonSchemaErrors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_JSON_SCHEMA_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<String> getJsonSchemaErrors() {
+    return jsonSchemaErrors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_JSON_SCHEMA_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setJsonSchemaErrors(@javax.annotation.Nullable List<String> jsonSchemaErrors) {
+    this.jsonSchemaErrors = jsonSchemaErrors;
+  }
+
+
+  public Submission metadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMetadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public Submission password(@javax.annotation.Nullable String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPassword() {
+    return password;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPassword(@javax.annotation.Nullable String password) {
+    this.password = password;
+  }
+
+
+  public Submission processedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+    return this;
+  }
+
+  /**
+   * Get processedAt
+   * @return processedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getProcessedAt() {
+    return processedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setProcessedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+  }
+
+
+  public Submission state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public Submission templateId(@javax.annotation.Nullable String templateId) {
+    this.templateId = templateId;
+    return this;
+  }
+
+  /**
+   * Get templateId
+   * @return templateId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getTemplateId() {
+    return templateId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplateId(@javax.annotation.Nullable String templateId) {
+    this.templateId = templateId;
+  }
+
+
+  public Submission test(@javax.annotation.Nonnull Boolean test) {
+    this.test = test;
+    return this;
+  }
+
+  /**
+   * Get test
+   * @return test
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getTest() {
+    return test;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTest(@javax.annotation.Nonnull Boolean test) {
+    this.test = test;
+  }
+
+
+  public Submission truncatedText(@javax.annotation.Nullable Object truncatedText) {
+    this.truncatedText = truncatedText;
+    return this;
+  }
+
+  /**
+   * Get truncatedText
+   * @return truncatedText
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TRUNCATED_TEXT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getTruncatedText() {
+    return truncatedText;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TRUNCATED_TEXT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTruncatedText(@javax.annotation.Nullable Object truncatedText) {
+    this.truncatedText = truncatedText;
+  }
+
+
+  public Submission pdfHash(@javax.annotation.Nullable String pdfHash) {
+    this.pdfHash = pdfHash;
+    return this;
+  }
+
+  /**
+   * Get pdfHash
+   * @return pdfHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PDF_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPdfHash() {
+    return pdfHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PDF_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPdfHash(@javax.annotation.Nullable String pdfHash) {
+    this.pdfHash = pdfHash;
+  }
+
+
+  public Submission downloadUrl(@javax.annotation.Nullable String downloadUrl) {
+    this.downloadUrl = downloadUrl;
+    return this;
+  }
+
+  /**
+   * Get downloadUrl
+   * @return downloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDownloadUrl() {
+    return downloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDownloadUrl(@javax.annotation.Nullable String downloadUrl) {
+    this.downloadUrl = downloadUrl;
+  }
+
+
+  public Submission permanentDownloadUrl(@javax.annotation.Nullable String permanentDownloadUrl) {
+    this.permanentDownloadUrl = permanentDownloadUrl;
+    return this;
+  }
+
+  /**
+   * Get permanentDownloadUrl
+   * @return permanentDownloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PERMANENT_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPermanentDownloadUrl() {
+    return permanentDownloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PERMANENT_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPermanentDownloadUrl(@javax.annotation.Nullable String permanentDownloadUrl) {
+    this.permanentDownloadUrl = permanentDownloadUrl;
+  }
+
+
+  public Submission previewDownloadUrl(@javax.annotation.Nullable String previewDownloadUrl) {
+    this.previewDownloadUrl = previewDownloadUrl;
+    return this;
+  }
+
+  /**
+   * Get previewDownloadUrl
+   * @return previewDownloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PREVIEW_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPreviewDownloadUrl() {
+    return previewDownloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PREVIEW_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPreviewDownloadUrl(@javax.annotation.Nullable String previewDownloadUrl) {
+    this.previewDownloadUrl = previewDownloadUrl;
+  }
+
+
+  public Submission previewGeneratedAt(@javax.annotation.Nullable String previewGeneratedAt) {
+    this.previewGeneratedAt = previewGeneratedAt;
+    return this;
+  }
+
+  /**
+   * Get previewGeneratedAt
+   * @return previewGeneratedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PREVIEW_GENERATED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPreviewGeneratedAt() {
+    return previewGeneratedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PREVIEW_GENERATED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPreviewGeneratedAt(@javax.annotation.Nullable String previewGeneratedAt) {
+    this.previewGeneratedAt = previewGeneratedAt;
+  }
+
+
+  public Submission auditTrailDownloadUrl(@javax.annotation.Nullable String auditTrailDownloadUrl) {
+    this.auditTrailDownloadUrl = auditTrailDownloadUrl;
+    return this;
+  }
+
+  /**
+   * Get auditTrailDownloadUrl
+   * @return auditTrailDownloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUDIT_TRAIL_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuditTrailDownloadUrl() {
+    return auditTrailDownloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUDIT_TRAIL_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuditTrailDownloadUrl(@javax.annotation.Nullable String auditTrailDownloadUrl) {
+    this.auditTrailDownloadUrl = auditTrailDownloadUrl;
+  }
+
+
+  public Submission actions(@javax.annotation.Nonnull List<SubmissionAction> actions) {
+    this.actions = actions;
+    return this;
+  }
+
+  public Submission addActionsItem(SubmissionAction actionsItem) {
+    if (this.actions == null) {
+      this.actions = new ArrayList<>();
+    }
+    this.actions.add(actionsItem);
+    return this;
+  }
+
+  /**
+   * Get actions
+   * @return actions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ACTIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<SubmissionAction> getActions() {
+    return actions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ACTIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setActions(@javax.annotation.Nonnull List<SubmissionAction> actions) {
+    this.actions = actions;
+  }
+
+
+  public Submission source(@javax.annotation.Nonnull SourceEnum source) {
+    this.source = source;
+    return this;
+  }
+
+  /**
+   * Get source
+   * @return source
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SOURCE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public SourceEnum getSource() {
+    return source;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SOURCE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSource(@javax.annotation.Nonnull SourceEnum source) {
+    this.source = source;
+  }
+
+
+  public Submission referrer(@javax.annotation.Nullable String referrer) {
+    this.referrer = referrer;
+    return this;
+  }
+
+  /**
+   * Get referrer
+   * @return referrer
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_REFERRER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getReferrer() {
+    return referrer;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_REFERRER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setReferrer(@javax.annotation.Nullable String referrer) {
+    this.referrer = referrer;
+  }
+
+
+  public Submission data(@javax.annotation.Nullable Object data) {
+    this.data = data;
+    return this;
+  }
+
+  /**
+   * Get data
+   * @return data
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getData() {
+    return data;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setData(@javax.annotation.Nullable Object data) {
+    this.data = data;
+  }
+
+
+  /**
+   * Return true if this submission object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Submission submission = (Submission) o;
+    return Objects.equals(this.batchId, submission.batchId) &&
+        Objects.equals(this.dataRequests, submission.dataRequests) &&
+        Objects.equals(this.editable, submission.editable) &&
+        Objects.equals(this.expired, submission.expired) &&
+        Objects.equals(this.expiresAt, submission.expiresAt) &&
+        Objects.equals(this.id, submission.id) &&
+        Objects.equals(this.jsonSchemaErrors, submission.jsonSchemaErrors) &&
+        Objects.equals(this.metadata, submission.metadata) &&
+        Objects.equals(this.password, submission.password) &&
+        Objects.equals(this.processedAt, submission.processedAt) &&
+        Objects.equals(this.state, submission.state) &&
+        Objects.equals(this.templateId, submission.templateId) &&
+        Objects.equals(this.test, submission.test) &&
+        Objects.equals(this.truncatedText, submission.truncatedText) &&
+        Objects.equals(this.pdfHash, submission.pdfHash) &&
+        Objects.equals(this.downloadUrl, submission.downloadUrl) &&
+        Objects.equals(this.permanentDownloadUrl, submission.permanentDownloadUrl) &&
+        Objects.equals(this.previewDownloadUrl, submission.previewDownloadUrl) &&
+        Objects.equals(this.previewGeneratedAt, submission.previewGeneratedAt) &&
+        Objects.equals(this.auditTrailDownloadUrl, submission.auditTrailDownloadUrl) &&
+        Objects.equals(this.actions, submission.actions) &&
+        Objects.equals(this.source, submission.source) &&
+        Objects.equals(this.referrer, submission.referrer) &&
+        Objects.equals(this.data, submission.data);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(batchId, dataRequests, editable, expired, expiresAt, id, jsonSchemaErrors, metadata, password, processedAt, state, templateId, test, truncatedText, pdfHash, downloadUrl, permanentDownloadUrl, previewDownloadUrl, previewGeneratedAt, auditTrailDownloadUrl, actions, source, referrer, data);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Submission {\n");
+    sb.append("    batchId: ").append(toIndentedString(batchId)).append("\n");
+    sb.append("    dataRequests: ").append(toIndentedString(dataRequests)).append("\n");
+    sb.append("    editable: ").append(toIndentedString(editable)).append("\n");
+    sb.append("    expired: ").append(toIndentedString(expired)).append("\n");
+    sb.append("    expiresAt: ").append(toIndentedString(expiresAt)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    jsonSchemaErrors: ").append(toIndentedString(jsonSchemaErrors)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    processedAt: ").append(toIndentedString(processedAt)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    templateId: ").append(toIndentedString(templateId)).append("\n");
+    sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("    truncatedText: ").append(toIndentedString(truncatedText)).append("\n");
+    sb.append("    pdfHash: ").append(toIndentedString(pdfHash)).append("\n");
+    sb.append("    downloadUrl: ").append(toIndentedString(downloadUrl)).append("\n");
+    sb.append("    permanentDownloadUrl: ").append(toIndentedString(permanentDownloadUrl)).append("\n");
+    sb.append("    previewDownloadUrl: ").append(toIndentedString(previewDownloadUrl)).append("\n");
+    sb.append("    previewGeneratedAt: ").append(toIndentedString(previewGeneratedAt)).append("\n");
+    sb.append("    auditTrailDownloadUrl: ").append(toIndentedString(auditTrailDownloadUrl)).append("\n");
+    sb.append("    actions: ").append(toIndentedString(actions)).append("\n");
+    sb.append("    source: ").append(toIndentedString(source)).append("\n");
+    sb.append("    referrer: ").append(toIndentedString(referrer)).append("\n");
+    sb.append("    data: ").append(toIndentedString(data)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionAction.java b/src/main/java/com/docspring/SubmissionAction.java
new file mode 100644
index 0000000..efcc727
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionAction.java
@@ -0,0 +1,384 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionAction
+ */
+@JsonPropertyOrder({
+  SubmissionAction.JSON_PROPERTY_ID,
+  SubmissionAction.JSON_PROPERTY_INTEGRATION_ID,
+  SubmissionAction.JSON_PROPERTY_STATE,
+  SubmissionAction.JSON_PROPERTY_ACTION_TYPE,
+  SubmissionAction.JSON_PROPERTY_ACTION_CATEGORY,
+  SubmissionAction.JSON_PROPERTY_RESULT_DATA
+})
+@JsonTypeName("submission_action")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionAction {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_INTEGRATION_ID = "integration_id";
+  @javax.annotation.Nullable
+  private String integrationId;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    FAILED(String.valueOf("failed")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  /**
+   * Gets or Sets actionType
+   */
+  public enum ActionTypeEnum {
+    WEBHOOK(String.valueOf("webhook")),
+    
+    SLACK_WEBHOOK(String.valueOf("slack_webhook")),
+    
+    EMAIL(String.valueOf("email")),
+    
+    AWS_S3_UPLOAD(String.valueOf("aws_s3_upload"));
+
+    private String value;
+
+    ActionTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ActionTypeEnum fromValue(String value) {
+      for (ActionTypeEnum b : ActionTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_ACTION_TYPE = "action_type";
+  @javax.annotation.Nonnull
+  private ActionTypeEnum actionType;
+
+  /**
+   * Gets or Sets actionCategory
+   */
+  public enum ActionCategoryEnum {
+    NOTIFICATION(String.valueOf("notification")),
+    
+    FILE_UPLOAD(String.valueOf("file_upload"));
+
+    private String value;
+
+    ActionCategoryEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static ActionCategoryEnum fromValue(String value) {
+      for (ActionCategoryEnum b : ActionCategoryEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_ACTION_CATEGORY = "action_category";
+  @javax.annotation.Nonnull
+  private ActionCategoryEnum actionCategory;
+
+  public static final String JSON_PROPERTY_RESULT_DATA = "result_data";
+  @javax.annotation.Nonnull
+  private Object resultData;
+
+  public SubmissionAction() { 
+  }
+
+  public SubmissionAction id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public SubmissionAction integrationId(@javax.annotation.Nullable String integrationId) {
+    this.integrationId = integrationId;
+    return this;
+  }
+
+  /**
+   * Get integrationId
+   * @return integrationId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_INTEGRATION_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getIntegrationId() {
+    return integrationId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_INTEGRATION_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setIntegrationId(@javax.annotation.Nullable String integrationId) {
+    this.integrationId = integrationId;
+  }
+
+
+  public SubmissionAction state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public SubmissionAction actionType(@javax.annotation.Nonnull ActionTypeEnum actionType) {
+    this.actionType = actionType;
+    return this;
+  }
+
+  /**
+   * Get actionType
+   * @return actionType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ACTION_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public ActionTypeEnum getActionType() {
+    return actionType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ACTION_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setActionType(@javax.annotation.Nonnull ActionTypeEnum actionType) {
+    this.actionType = actionType;
+  }
+
+
+  public SubmissionAction actionCategory(@javax.annotation.Nonnull ActionCategoryEnum actionCategory) {
+    this.actionCategory = actionCategory;
+    return this;
+  }
+
+  /**
+   * Get actionCategory
+   * @return actionCategory
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ACTION_CATEGORY)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public ActionCategoryEnum getActionCategory() {
+    return actionCategory;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ACTION_CATEGORY)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setActionCategory(@javax.annotation.Nonnull ActionCategoryEnum actionCategory) {
+    this.actionCategory = actionCategory;
+  }
+
+
+  public SubmissionAction resultData(@javax.annotation.Nonnull Object resultData) {
+    this.resultData = resultData;
+    return this;
+  }
+
+  /**
+   * Get resultData
+   * @return resultData
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_RESULT_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getResultData() {
+    return resultData;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_RESULT_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setResultData(@javax.annotation.Nonnull Object resultData) {
+    this.resultData = resultData;
+  }
+
+
+  /**
+   * Return true if this submission_action object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionAction submissionAction = (SubmissionAction) o;
+    return Objects.equals(this.id, submissionAction.id) &&
+        Objects.equals(this.integrationId, submissionAction.integrationId) &&
+        Objects.equals(this.state, submissionAction.state) &&
+        Objects.equals(this.actionType, submissionAction.actionType) &&
+        Objects.equals(this.actionCategory, submissionAction.actionCategory) &&
+        Objects.equals(this.resultData, submissionAction.resultData);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, integrationId, state, actionType, actionCategory, resultData);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionAction {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    integrationId: ").append(toIndentedString(integrationId)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    actionType: ").append(toIndentedString(actionType)).append("\n");
+    sb.append("    actionCategory: ").append(toIndentedString(actionCategory)).append("\n");
+    sb.append("    resultData: ").append(toIndentedString(resultData)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionBatch.java b/src/main/java/com/docspring/SubmissionBatch.java
new file mode 100644
index 0000000..94db7f9
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionBatch.java
@@ -0,0 +1,373 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionBatch
+ */
+@JsonPropertyOrder({
+  SubmissionBatch.JSON_PROPERTY_ID,
+  SubmissionBatch.JSON_PROPERTY_STATE,
+  SubmissionBatch.JSON_PROPERTY_METADATA,
+  SubmissionBatch.JSON_PROPERTY_PROCESSED_AT,
+  SubmissionBatch.JSON_PROPERTY_TOTAL_COUNT,
+  SubmissionBatch.JSON_PROPERTY_PENDING_COUNT,
+  SubmissionBatch.JSON_PROPERTY_ERROR_COUNT,
+  SubmissionBatch.JSON_PROPERTY_COMPLETION_PERCENTAGE
+})
+@JsonTypeName("submission_batch")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionBatch {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nonnull
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PROCESSED_AT = "processed_at";
+  @javax.annotation.Nullable
+  private String processedAt;
+
+  public static final String JSON_PROPERTY_TOTAL_COUNT = "total_count";
+  @javax.annotation.Nonnull
+  private Integer totalCount;
+
+  public static final String JSON_PROPERTY_PENDING_COUNT = "pending_count";
+  @javax.annotation.Nonnull
+  private Integer pendingCount;
+
+  public static final String JSON_PROPERTY_ERROR_COUNT = "error_count";
+  @javax.annotation.Nonnull
+  private Integer errorCount;
+
+  public static final String JSON_PROPERTY_COMPLETION_PERCENTAGE = "completion_percentage";
+  @javax.annotation.Nonnull
+  private BigDecimal completionPercentage;
+
+  public SubmissionBatch() { 
+  }
+
+  public SubmissionBatch id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public SubmissionBatch state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public SubmissionBatch metadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMetadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public SubmissionBatch processedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+    return this;
+  }
+
+  /**
+   * Get processedAt
+   * @return processedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getProcessedAt() {
+    return processedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setProcessedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+  }
+
+
+  public SubmissionBatch totalCount(@javax.annotation.Nonnull Integer totalCount) {
+    this.totalCount = totalCount;
+    return this;
+  }
+
+  /**
+   * Get totalCount
+   * @return totalCount
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TOTAL_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getTotalCount() {
+    return totalCount;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TOTAL_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTotalCount(@javax.annotation.Nonnull Integer totalCount) {
+    this.totalCount = totalCount;
+  }
+
+
+  public SubmissionBatch pendingCount(@javax.annotation.Nonnull Integer pendingCount) {
+    this.pendingCount = pendingCount;
+    return this;
+  }
+
+  /**
+   * Get pendingCount
+   * @return pendingCount
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PENDING_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getPendingCount() {
+    return pendingCount;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PENDING_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPendingCount(@javax.annotation.Nonnull Integer pendingCount) {
+    this.pendingCount = pendingCount;
+  }
+
+
+  public SubmissionBatch errorCount(@javax.annotation.Nonnull Integer errorCount) {
+    this.errorCount = errorCount;
+    return this;
+  }
+
+  /**
+   * Get errorCount
+   * @return errorCount
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ERROR_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getErrorCount() {
+    return errorCount;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERROR_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setErrorCount(@javax.annotation.Nonnull Integer errorCount) {
+    this.errorCount = errorCount;
+  }
+
+
+  public SubmissionBatch completionPercentage(@javax.annotation.Nonnull BigDecimal completionPercentage) {
+    this.completionPercentage = completionPercentage;
+    return this;
+  }
+
+  /**
+   * Get completionPercentage
+   * @return completionPercentage
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_COMPLETION_PERCENTAGE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public BigDecimal getCompletionPercentage() {
+    return completionPercentage;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_COMPLETION_PERCENTAGE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setCompletionPercentage(@javax.annotation.Nonnull BigDecimal completionPercentage) {
+    this.completionPercentage = completionPercentage;
+  }
+
+
+  /**
+   * Return true if this submission_batch object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionBatch submissionBatch = (SubmissionBatch) o;
+    return Objects.equals(this.id, submissionBatch.id) &&
+        Objects.equals(this.state, submissionBatch.state) &&
+        Objects.equals(this.metadata, submissionBatch.metadata) &&
+        Objects.equals(this.processedAt, submissionBatch.processedAt) &&
+        Objects.equals(this.totalCount, submissionBatch.totalCount) &&
+        Objects.equals(this.pendingCount, submissionBatch.pendingCount) &&
+        Objects.equals(this.errorCount, submissionBatch.errorCount) &&
+        Objects.equals(this.completionPercentage, submissionBatch.completionPercentage);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, state, metadata, processedAt, totalCount, pendingCount, errorCount, completionPercentage);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionBatch {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    processedAt: ").append(toIndentedString(processedAt)).append("\n");
+    sb.append("    totalCount: ").append(toIndentedString(totalCount)).append("\n");
+    sb.append("    pendingCount: ").append(toIndentedString(pendingCount)).append("\n");
+    sb.append("    errorCount: ").append(toIndentedString(errorCount)).append("\n");
+    sb.append("    completionPercentage: ").append(toIndentedString(completionPercentage)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionBatchData.java b/src/main/java/com/docspring/SubmissionBatchData.java
new file mode 100644
index 0000000..d456418
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionBatchData.java
@@ -0,0 +1,185 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionBatchData
+ */
+@JsonPropertyOrder({
+  SubmissionBatchData.JSON_PROPERTY_METADATA,
+  SubmissionBatchData.JSON_PROPERTY_SUBMISSIONS,
+  SubmissionBatchData.JSON_PROPERTY_TEST
+})
+@JsonTypeName("submission_batch_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionBatchData {
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_SUBMISSIONS = "submissions";
+  @javax.annotation.Nonnull
+  private List<Object> submissions = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_TEST = "test";
+  @javax.annotation.Nullable
+  private Boolean test;
+
+  public SubmissionBatchData() { 
+  }
+
+  public SubmissionBatchData metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public SubmissionBatchData submissions(@javax.annotation.Nonnull List<Object> submissions) {
+    this.submissions = submissions;
+    return this;
+  }
+
+  public SubmissionBatchData addSubmissionsItem(Object submissionsItem) {
+    if (this.submissions == null) {
+      this.submissions = new ArrayList<>();
+    }
+    this.submissions.add(submissionsItem);
+    return this;
+  }
+
+  /**
+   * Get submissions
+   * @return submissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<Object> getSubmissions() {
+    return submissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissions(@javax.annotation.Nonnull List<Object> submissions) {
+    this.submissions = submissions;
+  }
+
+
+  public SubmissionBatchData test(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+    return this;
+  }
+
+  /**
+   * Get test
+   * @return test
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Boolean getTest() {
+    return test;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setTest(@javax.annotation.Nullable Boolean test) {
+    this.test = test;
+  }
+
+
+  /**
+   * Return true if this submission_batch_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionBatchData submissionBatchData = (SubmissionBatchData) o;
+    return Objects.equals(this.metadata, submissionBatchData.metadata) &&
+        Objects.equals(this.submissions, submissionBatchData.submissions) &&
+        Objects.equals(this.test, submissionBatchData.test);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(metadata, submissions, test);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionBatchData {\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    submissions: ").append(toIndentedString(submissions)).append("\n");
+    sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionBatchWithSubmissions.java b/src/main/java/com/docspring/SubmissionBatchWithSubmissions.java
new file mode 100644
index 0000000..6d0bf25
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionBatchWithSubmissions.java
@@ -0,0 +1,416 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.SubmissionPreview;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionBatchWithSubmissions
+ */
+@JsonPropertyOrder({
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_ID,
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_STATE,
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_METADATA,
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_PROCESSED_AT,
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_TOTAL_COUNT,
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_PENDING_COUNT,
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_ERROR_COUNT,
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_COMPLETION_PERCENTAGE,
+  SubmissionBatchWithSubmissions.JSON_PROPERTY_SUBMISSIONS
+})
+@JsonTypeName("submission_batch_with_submissions")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionBatchWithSubmissions {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nonnull
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PROCESSED_AT = "processed_at";
+  @javax.annotation.Nullable
+  private String processedAt;
+
+  public static final String JSON_PROPERTY_TOTAL_COUNT = "total_count";
+  @javax.annotation.Nonnull
+  private Integer totalCount;
+
+  public static final String JSON_PROPERTY_PENDING_COUNT = "pending_count";
+  @javax.annotation.Nonnull
+  private Integer pendingCount;
+
+  public static final String JSON_PROPERTY_ERROR_COUNT = "error_count";
+  @javax.annotation.Nonnull
+  private Integer errorCount;
+
+  public static final String JSON_PROPERTY_COMPLETION_PERCENTAGE = "completion_percentage";
+  @javax.annotation.Nonnull
+  private BigDecimal completionPercentage;
+
+  public static final String JSON_PROPERTY_SUBMISSIONS = "submissions";
+  @javax.annotation.Nullable
+  private List<SubmissionPreview> submissions = new ArrayList<>();
+
+  public SubmissionBatchWithSubmissions() { 
+  }
+
+  public SubmissionBatchWithSubmissions id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public SubmissionBatchWithSubmissions state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public SubmissionBatchWithSubmissions metadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMetadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public SubmissionBatchWithSubmissions processedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+    return this;
+  }
+
+  /**
+   * Get processedAt
+   * @return processedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getProcessedAt() {
+    return processedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setProcessedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+  }
+
+
+  public SubmissionBatchWithSubmissions totalCount(@javax.annotation.Nonnull Integer totalCount) {
+    this.totalCount = totalCount;
+    return this;
+  }
+
+  /**
+   * Get totalCount
+   * @return totalCount
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TOTAL_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getTotalCount() {
+    return totalCount;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TOTAL_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTotalCount(@javax.annotation.Nonnull Integer totalCount) {
+    this.totalCount = totalCount;
+  }
+
+
+  public SubmissionBatchWithSubmissions pendingCount(@javax.annotation.Nonnull Integer pendingCount) {
+    this.pendingCount = pendingCount;
+    return this;
+  }
+
+  /**
+   * Get pendingCount
+   * @return pendingCount
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PENDING_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getPendingCount() {
+    return pendingCount;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PENDING_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPendingCount(@javax.annotation.Nonnull Integer pendingCount) {
+    this.pendingCount = pendingCount;
+  }
+
+
+  public SubmissionBatchWithSubmissions errorCount(@javax.annotation.Nonnull Integer errorCount) {
+    this.errorCount = errorCount;
+    return this;
+  }
+
+  /**
+   * Get errorCount
+   * @return errorCount
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ERROR_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getErrorCount() {
+    return errorCount;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERROR_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setErrorCount(@javax.annotation.Nonnull Integer errorCount) {
+    this.errorCount = errorCount;
+  }
+
+
+  public SubmissionBatchWithSubmissions completionPercentage(@javax.annotation.Nonnull BigDecimal completionPercentage) {
+    this.completionPercentage = completionPercentage;
+    return this;
+  }
+
+  /**
+   * Get completionPercentage
+   * @return completionPercentage
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_COMPLETION_PERCENTAGE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public BigDecimal getCompletionPercentage() {
+    return completionPercentage;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_COMPLETION_PERCENTAGE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setCompletionPercentage(@javax.annotation.Nonnull BigDecimal completionPercentage) {
+    this.completionPercentage = completionPercentage;
+  }
+
+
+  public SubmissionBatchWithSubmissions submissions(@javax.annotation.Nullable List<SubmissionPreview> submissions) {
+    this.submissions = submissions;
+    return this;
+  }
+
+  public SubmissionBatchWithSubmissions addSubmissionsItem(SubmissionPreview submissionsItem) {
+    if (this.submissions == null) {
+      this.submissions = new ArrayList<>();
+    }
+    this.submissions.add(submissionsItem);
+    return this;
+  }
+
+  /**
+   * Get submissions
+   * @return submissions
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<SubmissionPreview> getSubmissions() {
+    return submissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setSubmissions(@javax.annotation.Nullable List<SubmissionPreview> submissions) {
+    this.submissions = submissions;
+  }
+
+
+  /**
+   * Return true if this submission_batch_with_submissions object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionBatchWithSubmissions submissionBatchWithSubmissions = (SubmissionBatchWithSubmissions) o;
+    return Objects.equals(this.id, submissionBatchWithSubmissions.id) &&
+        Objects.equals(this.state, submissionBatchWithSubmissions.state) &&
+        Objects.equals(this.metadata, submissionBatchWithSubmissions.metadata) &&
+        Objects.equals(this.processedAt, submissionBatchWithSubmissions.processedAt) &&
+        Objects.equals(this.totalCount, submissionBatchWithSubmissions.totalCount) &&
+        Objects.equals(this.pendingCount, submissionBatchWithSubmissions.pendingCount) &&
+        Objects.equals(this.errorCount, submissionBatchWithSubmissions.errorCount) &&
+        Objects.equals(this.completionPercentage, submissionBatchWithSubmissions.completionPercentage) &&
+        Objects.equals(this.submissions, submissionBatchWithSubmissions.submissions);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, state, metadata, processedAt, totalCount, pendingCount, errorCount, completionPercentage, submissions);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionBatchWithSubmissions {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    processedAt: ").append(toIndentedString(processedAt)).append("\n");
+    sb.append("    totalCount: ").append(toIndentedString(totalCount)).append("\n");
+    sb.append("    pendingCount: ").append(toIndentedString(pendingCount)).append("\n");
+    sb.append("    errorCount: ").append(toIndentedString(errorCount)).append("\n");
+    sb.append("    completionPercentage: ").append(toIndentedString(completionPercentage)).append("\n");
+    sb.append("    submissions: ").append(toIndentedString(submissions)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionDataRequest.java b/src/main/java/com/docspring/SubmissionDataRequest.java
new file mode 100644
index 0000000..b023954
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionDataRequest.java
@@ -0,0 +1,884 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionDataRequest
+ */
+@JsonPropertyOrder({
+  SubmissionDataRequest.JSON_PROPERTY_ID,
+  SubmissionDataRequest.JSON_PROPERTY_EMAIL,
+  SubmissionDataRequest.JSON_PROPERTY_NAME,
+  SubmissionDataRequest.JSON_PROPERTY_ORDER,
+  SubmissionDataRequest.JSON_PROPERTY_SORT_ORDER,
+  SubmissionDataRequest.JSON_PROPERTY_FIELDS,
+  SubmissionDataRequest.JSON_PROPERTY_METADATA,
+  SubmissionDataRequest.JSON_PROPERTY_STATE,
+  SubmissionDataRequest.JSON_PROPERTY_VIEWED_AT,
+  SubmissionDataRequest.JSON_PROPERTY_COMPLETED_AT,
+  SubmissionDataRequest.JSON_PROPERTY_DATA,
+  SubmissionDataRequest.JSON_PROPERTY_AUTH_TYPE,
+  SubmissionDataRequest.JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE,
+  SubmissionDataRequest.JSON_PROPERTY_AUTH_PROVIDER,
+  SubmissionDataRequest.JSON_PROPERTY_AUTH_SESSION_STARTED_AT,
+  SubmissionDataRequest.JSON_PROPERTY_AUTH_SESSION_ID_HASH,
+  SubmissionDataRequest.JSON_PROPERTY_AUTH_USER_ID_HASH,
+  SubmissionDataRequest.JSON_PROPERTY_AUTH_USERNAME_HASH,
+  SubmissionDataRequest.JSON_PROPERTY_AUTH_PHONE_NUMBER_HASH,
+  SubmissionDataRequest.JSON_PROPERTY_IP_ADDRESS,
+  SubmissionDataRequest.JSON_PROPERTY_USER_AGENT
+})
+@JsonTypeName("submission_data_request")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionDataRequest {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_EMAIL = "email";
+  @javax.annotation.Nullable
+  private String email;
+
+  public static final String JSON_PROPERTY_NAME = "name";
+  @javax.annotation.Nullable
+  private String name;
+
+  public static final String JSON_PROPERTY_ORDER = "order";
+  @javax.annotation.Nullable
+  private Integer order;
+
+  public static final String JSON_PROPERTY_SORT_ORDER = "sort_order";
+  @javax.annotation.Nonnull
+  private Integer sortOrder;
+
+  public static final String JSON_PROPERTY_FIELDS = "fields";
+  @javax.annotation.Nullable
+  private List<String> fields;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    COMPLETED(String.valueOf("completed"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  public static final String JSON_PROPERTY_VIEWED_AT = "viewed_at";
+  @javax.annotation.Nullable
+  private String viewedAt;
+
+  public static final String JSON_PROPERTY_COMPLETED_AT = "completed_at";
+  @javax.annotation.Nullable
+  private String completedAt;
+
+  public static final String JSON_PROPERTY_DATA = "data";
+  @javax.annotation.Nullable
+  private Object data;
+
+  /**
+   * Gets or Sets authType
+   */
+  public enum AuthTypeEnum {
+    NONE(String.valueOf("none")),
+    
+    PASSWORD(String.valueOf("password")),
+    
+    OAUTH(String.valueOf("oauth")),
+    
+    EMAIL_LINK(String.valueOf("email_link")),
+    
+    PHONE_NUMBER(String.valueOf("phone_number")),
+    
+    LDAP(String.valueOf("ldap")),
+    
+    SAML(String.valueOf("saml"));
+
+    private String value;
+
+    AuthTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static AuthTypeEnum fromValue(String value) {
+      for (AuthTypeEnum b : AuthTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_AUTH_TYPE = "auth_type";
+  @javax.annotation.Nonnull
+  private AuthTypeEnum authType;
+
+  /**
+   * Gets or Sets authSecondFactorType
+   */
+  public enum AuthSecondFactorTypeEnum {
+    NONE(String.valueOf("none")),
+    
+    PHONE_NUMBER(String.valueOf("phone_number")),
+    
+    TOTP(String.valueOf("totp")),
+    
+    MOBILE_PUSH(String.valueOf("mobile_push")),
+    
+    SECURITY_KEY(String.valueOf("security_key")),
+    
+    FINGERPRINT(String.valueOf("fingerprint"));
+
+    private String value;
+
+    AuthSecondFactorTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static AuthSecondFactorTypeEnum fromValue(String value) {
+      for (AuthSecondFactorTypeEnum b : AuthSecondFactorTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE = "auth_second_factor_type";
+  @javax.annotation.Nonnull
+  private AuthSecondFactorTypeEnum authSecondFactorType;
+
+  public static final String JSON_PROPERTY_AUTH_PROVIDER = "auth_provider";
+  @javax.annotation.Nullable
+  private String authProvider;
+
+  public static final String JSON_PROPERTY_AUTH_SESSION_STARTED_AT = "auth_session_started_at";
+  @javax.annotation.Nullable
+  private String authSessionStartedAt;
+
+  public static final String JSON_PROPERTY_AUTH_SESSION_ID_HASH = "auth_session_id_hash";
+  @javax.annotation.Nullable
+  private String authSessionIdHash;
+
+  public static final String JSON_PROPERTY_AUTH_USER_ID_HASH = "auth_user_id_hash";
+  @javax.annotation.Nullable
+  private String authUserIdHash;
+
+  public static final String JSON_PROPERTY_AUTH_USERNAME_HASH = "auth_username_hash";
+  @javax.annotation.Nullable
+  private String authUsernameHash;
+
+  public static final String JSON_PROPERTY_AUTH_PHONE_NUMBER_HASH = "auth_phone_number_hash";
+  @javax.annotation.Nullable
+  private String authPhoneNumberHash;
+
+  public static final String JSON_PROPERTY_IP_ADDRESS = "ip_address";
+  @javax.annotation.Nullable
+  private String ipAddress;
+
+  public static final String JSON_PROPERTY_USER_AGENT = "user_agent";
+  @javax.annotation.Nullable
+  private String userAgent;
+
+  public SubmissionDataRequest() { 
+  }
+
+  public SubmissionDataRequest id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public SubmissionDataRequest email(@javax.annotation.Nullable String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EMAIL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getEmail() {
+    return email;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EMAIL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEmail(@javax.annotation.Nullable String email) {
+    this.email = email;
+  }
+
+
+  public SubmissionDataRequest name(@javax.annotation.Nullable String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getName() {
+    return name;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setName(@javax.annotation.Nullable String name) {
+    this.name = name;
+  }
+
+
+  public SubmissionDataRequest order(@javax.annotation.Nullable Integer order) {
+    this.order = order;
+    return this;
+  }
+
+  /**
+   * Get order
+   * @return order
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getOrder() {
+    return order;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setOrder(@javax.annotation.Nullable Integer order) {
+    this.order = order;
+  }
+
+
+  public SubmissionDataRequest sortOrder(@javax.annotation.Nonnull Integer sortOrder) {
+    this.sortOrder = sortOrder;
+    return this;
+  }
+
+  /**
+   * Get sortOrder
+   * @return sortOrder
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SORT_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getSortOrder() {
+    return sortOrder;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SORT_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSortOrder(@javax.annotation.Nonnull Integer sortOrder) {
+    this.sortOrder = sortOrder;
+  }
+
+
+  public SubmissionDataRequest fields(@javax.annotation.Nullable List<String> fields) {
+    this.fields = fields;
+    return this;
+  }
+
+  public SubmissionDataRequest addFieldsItem(String fieldsItem) {
+    if (this.fields == null) {
+      this.fields = new ArrayList<>();
+    }
+    this.fields.add(fieldsItem);
+    return this;
+  }
+
+  /**
+   * Get fields
+   * @return fields
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<String> getFields() {
+    return fields;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFields(@javax.annotation.Nullable List<String> fields) {
+    this.fields = fields;
+  }
+
+
+  public SubmissionDataRequest metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public SubmissionDataRequest state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public SubmissionDataRequest viewedAt(@javax.annotation.Nullable String viewedAt) {
+    this.viewedAt = viewedAt;
+    return this;
+  }
+
+  /**
+   * Get viewedAt
+   * @return viewedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VIEWED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getViewedAt() {
+    return viewedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VIEWED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setViewedAt(@javax.annotation.Nullable String viewedAt) {
+    this.viewedAt = viewedAt;
+  }
+
+
+  public SubmissionDataRequest completedAt(@javax.annotation.Nullable String completedAt) {
+    this.completedAt = completedAt;
+    return this;
+  }
+
+  /**
+   * Get completedAt
+   * @return completedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_COMPLETED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getCompletedAt() {
+    return completedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_COMPLETED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setCompletedAt(@javax.annotation.Nullable String completedAt) {
+    this.completedAt = completedAt;
+  }
+
+
+  public SubmissionDataRequest data(@javax.annotation.Nullable Object data) {
+    this.data = data;
+    return this;
+  }
+
+  /**
+   * Get data
+   * @return data
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getData() {
+    return data;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setData(@javax.annotation.Nullable Object data) {
+    this.data = data;
+  }
+
+
+  public SubmissionDataRequest authType(@javax.annotation.Nonnull AuthTypeEnum authType) {
+    this.authType = authType;
+    return this;
+  }
+
+  /**
+   * Get authType
+   * @return authType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_AUTH_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public AuthTypeEnum getAuthType() {
+    return authType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthType(@javax.annotation.Nonnull AuthTypeEnum authType) {
+    this.authType = authType;
+  }
+
+
+  public SubmissionDataRequest authSecondFactorType(@javax.annotation.Nonnull AuthSecondFactorTypeEnum authSecondFactorType) {
+    this.authSecondFactorType = authSecondFactorType;
+    return this;
+  }
+
+  /**
+   * Get authSecondFactorType
+   * @return authSecondFactorType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public AuthSecondFactorTypeEnum getAuthSecondFactorType() {
+    return authSecondFactorType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthSecondFactorType(@javax.annotation.Nonnull AuthSecondFactorTypeEnum authSecondFactorType) {
+    this.authSecondFactorType = authSecondFactorType;
+  }
+
+
+  public SubmissionDataRequest authProvider(@javax.annotation.Nullable String authProvider) {
+    this.authProvider = authProvider;
+    return this;
+  }
+
+  /**
+   * Get authProvider
+   * @return authProvider
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_PROVIDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthProvider() {
+    return authProvider;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_PROVIDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthProvider(@javax.annotation.Nullable String authProvider) {
+    this.authProvider = authProvider;
+  }
+
+
+  public SubmissionDataRequest authSessionStartedAt(@javax.annotation.Nullable String authSessionStartedAt) {
+    this.authSessionStartedAt = authSessionStartedAt;
+    return this;
+  }
+
+  /**
+   * Get authSessionStartedAt
+   * @return authSessionStartedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_SESSION_STARTED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthSessionStartedAt() {
+    return authSessionStartedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_SESSION_STARTED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthSessionStartedAt(@javax.annotation.Nullable String authSessionStartedAt) {
+    this.authSessionStartedAt = authSessionStartedAt;
+  }
+
+
+  public SubmissionDataRequest authSessionIdHash(@javax.annotation.Nullable String authSessionIdHash) {
+    this.authSessionIdHash = authSessionIdHash;
+    return this;
+  }
+
+  /**
+   * Get authSessionIdHash
+   * @return authSessionIdHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_SESSION_ID_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthSessionIdHash() {
+    return authSessionIdHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_SESSION_ID_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthSessionIdHash(@javax.annotation.Nullable String authSessionIdHash) {
+    this.authSessionIdHash = authSessionIdHash;
+  }
+
+
+  public SubmissionDataRequest authUserIdHash(@javax.annotation.Nullable String authUserIdHash) {
+    this.authUserIdHash = authUserIdHash;
+    return this;
+  }
+
+  /**
+   * Get authUserIdHash
+   * @return authUserIdHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_USER_ID_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthUserIdHash() {
+    return authUserIdHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_USER_ID_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthUserIdHash(@javax.annotation.Nullable String authUserIdHash) {
+    this.authUserIdHash = authUserIdHash;
+  }
+
+
+  public SubmissionDataRequest authUsernameHash(@javax.annotation.Nullable String authUsernameHash) {
+    this.authUsernameHash = authUsernameHash;
+    return this;
+  }
+
+  /**
+   * Get authUsernameHash
+   * @return authUsernameHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_USERNAME_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthUsernameHash() {
+    return authUsernameHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_USERNAME_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthUsernameHash(@javax.annotation.Nullable String authUsernameHash) {
+    this.authUsernameHash = authUsernameHash;
+  }
+
+
+  public SubmissionDataRequest authPhoneNumberHash(@javax.annotation.Nullable String authPhoneNumberHash) {
+    this.authPhoneNumberHash = authPhoneNumberHash;
+    return this;
+  }
+
+  /**
+   * Get authPhoneNumberHash
+   * @return authPhoneNumberHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_PHONE_NUMBER_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthPhoneNumberHash() {
+    return authPhoneNumberHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_PHONE_NUMBER_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthPhoneNumberHash(@javax.annotation.Nullable String authPhoneNumberHash) {
+    this.authPhoneNumberHash = authPhoneNumberHash;
+  }
+
+
+  public SubmissionDataRequest ipAddress(@javax.annotation.Nullable String ipAddress) {
+    this.ipAddress = ipAddress;
+    return this;
+  }
+
+  /**
+   * Get ipAddress
+   * @return ipAddress
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_IP_ADDRESS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getIpAddress() {
+    return ipAddress;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_IP_ADDRESS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setIpAddress(@javax.annotation.Nullable String ipAddress) {
+    this.ipAddress = ipAddress;
+  }
+
+
+  public SubmissionDataRequest userAgent(@javax.annotation.Nullable String userAgent) {
+    this.userAgent = userAgent;
+    return this;
+  }
+
+  /**
+   * Get userAgent
+   * @return userAgent
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_USER_AGENT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getUserAgent() {
+    return userAgent;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_USER_AGENT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setUserAgent(@javax.annotation.Nullable String userAgent) {
+    this.userAgent = userAgent;
+  }
+
+
+  /**
+   * Return true if this submission_data_request object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionDataRequest submissionDataRequest = (SubmissionDataRequest) o;
+    return Objects.equals(this.id, submissionDataRequest.id) &&
+        Objects.equals(this.email, submissionDataRequest.email) &&
+        Objects.equals(this.name, submissionDataRequest.name) &&
+        Objects.equals(this.order, submissionDataRequest.order) &&
+        Objects.equals(this.sortOrder, submissionDataRequest.sortOrder) &&
+        Objects.equals(this.fields, submissionDataRequest.fields) &&
+        Objects.equals(this.metadata, submissionDataRequest.metadata) &&
+        Objects.equals(this.state, submissionDataRequest.state) &&
+        Objects.equals(this.viewedAt, submissionDataRequest.viewedAt) &&
+        Objects.equals(this.completedAt, submissionDataRequest.completedAt) &&
+        Objects.equals(this.data, submissionDataRequest.data) &&
+        Objects.equals(this.authType, submissionDataRequest.authType) &&
+        Objects.equals(this.authSecondFactorType, submissionDataRequest.authSecondFactorType) &&
+        Objects.equals(this.authProvider, submissionDataRequest.authProvider) &&
+        Objects.equals(this.authSessionStartedAt, submissionDataRequest.authSessionStartedAt) &&
+        Objects.equals(this.authSessionIdHash, submissionDataRequest.authSessionIdHash) &&
+        Objects.equals(this.authUserIdHash, submissionDataRequest.authUserIdHash) &&
+        Objects.equals(this.authUsernameHash, submissionDataRequest.authUsernameHash) &&
+        Objects.equals(this.authPhoneNumberHash, submissionDataRequest.authPhoneNumberHash) &&
+        Objects.equals(this.ipAddress, submissionDataRequest.ipAddress) &&
+        Objects.equals(this.userAgent, submissionDataRequest.userAgent);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, email, name, order, sortOrder, fields, metadata, state, viewedAt, completedAt, data, authType, authSecondFactorType, authProvider, authSessionStartedAt, authSessionIdHash, authUserIdHash, authUsernameHash, authPhoneNumberHash, ipAddress, userAgent);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionDataRequest {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    order: ").append(toIndentedString(order)).append("\n");
+    sb.append("    sortOrder: ").append(toIndentedString(sortOrder)).append("\n");
+    sb.append("    fields: ").append(toIndentedString(fields)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    viewedAt: ").append(toIndentedString(viewedAt)).append("\n");
+    sb.append("    completedAt: ").append(toIndentedString(completedAt)).append("\n");
+    sb.append("    data: ").append(toIndentedString(data)).append("\n");
+    sb.append("    authType: ").append(toIndentedString(authType)).append("\n");
+    sb.append("    authSecondFactorType: ").append(toIndentedString(authSecondFactorType)).append("\n");
+    sb.append("    authProvider: ").append(toIndentedString(authProvider)).append("\n");
+    sb.append("    authSessionStartedAt: ").append(toIndentedString(authSessionStartedAt)).append("\n");
+    sb.append("    authSessionIdHash: ").append(toIndentedString(authSessionIdHash)).append("\n");
+    sb.append("    authUserIdHash: ").append(toIndentedString(authUserIdHash)).append("\n");
+    sb.append("    authUsernameHash: ").append(toIndentedString(authUsernameHash)).append("\n");
+    sb.append("    authPhoneNumberHash: ").append(toIndentedString(authPhoneNumberHash)).append("\n");
+    sb.append("    ipAddress: ").append(toIndentedString(ipAddress)).append("\n");
+    sb.append("    userAgent: ").append(toIndentedString(userAgent)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionDataRequestEvent.java b/src/main/java/com/docspring/SubmissionDataRequestEvent.java
new file mode 100644
index 0000000..ca28bb1
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionDataRequestEvent.java
@@ -0,0 +1,395 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionDataRequestEvent
+ */
+@JsonPropertyOrder({
+  SubmissionDataRequestEvent.JSON_PROPERTY_ID,
+  SubmissionDataRequestEvent.JSON_PROPERTY_SUBMISSION_ID,
+  SubmissionDataRequestEvent.JSON_PROPERTY_SUBMISSION_DATA_REQUEST_ID,
+  SubmissionDataRequestEvent.JSON_PROPERTY_EVENT_TYPE,
+  SubmissionDataRequestEvent.JSON_PROPERTY_MESSAGE_TYPE,
+  SubmissionDataRequestEvent.JSON_PROPERTY_MESSAGE_RECIPIENT,
+  SubmissionDataRequestEvent.JSON_PROPERTY_OCCURRED_AT
+})
+@JsonTypeName("submission_data_request_event")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionDataRequestEvent {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_SUBMISSION_ID = "submission_id";
+  @javax.annotation.Nullable
+  private String submissionId;
+
+  public static final String JSON_PROPERTY_SUBMISSION_DATA_REQUEST_ID = "submission_data_request_id";
+  @javax.annotation.Nullable
+  private String submissionDataRequestId;
+
+  /**
+   * Gets or Sets eventType
+   */
+  public enum EventTypeEnum {
+    SEND_REQUEST(String.valueOf("send_request")),
+    
+    VIEW_REQUEST(String.valueOf("view_request")),
+    
+    ACCEPTED_TERMS(String.valueOf("accepted_terms")),
+    
+    DECLINE_REQUEST(String.valueOf("decline_request")),
+    
+    SIGN_REQUEST(String.valueOf("sign_request")),
+    
+    ALL_COMPLETED(String.valueOf("all_completed"));
+
+    private String value;
+
+    EventTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static EventTypeEnum fromValue(String value) {
+      for (EventTypeEnum b : EventTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_EVENT_TYPE = "event_type";
+  @javax.annotation.Nonnull
+  private EventTypeEnum eventType;
+
+  /**
+   * Gets or Sets messageType
+   */
+  public enum MessageTypeEnum {
+    EMAIL(String.valueOf("email")),
+    
+    SMS(String.valueOf("sms")),
+    
+    FAX(String.valueOf("fax")),
+    
+    MAIL(String.valueOf("mail")),
+    
+    SLACK(String.valueOf("slack")),
+    
+    MSTEAMS(String.valueOf("msteams")),
+    
+    DISCORD(String.valueOf("discord")),
+    
+    TELEGRAM(String.valueOf("telegram")),
+    
+    WHATSAPP(String.valueOf("whatsapp"));
+
+    private String value;
+
+    MessageTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static MessageTypeEnum fromValue(String value) {
+      for (MessageTypeEnum b : MessageTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_MESSAGE_TYPE = "message_type";
+  @javax.annotation.Nonnull
+  private MessageTypeEnum messageType;
+
+  public static final String JSON_PROPERTY_MESSAGE_RECIPIENT = "message_recipient";
+  @javax.annotation.Nullable
+  private String messageRecipient;
+
+  public static final String JSON_PROPERTY_OCCURRED_AT = "occurred_at";
+  @javax.annotation.Nullable
+  private String occurredAt;
+
+  public SubmissionDataRequestEvent() { 
+  }
+
+  public SubmissionDataRequestEvent id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public SubmissionDataRequestEvent submissionId(@javax.annotation.Nullable String submissionId) {
+    this.submissionId = submissionId;
+    return this;
+  }
+
+  /**
+   * Get submissionId
+   * @return submissionId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getSubmissionId() {
+    return submissionId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissionId(@javax.annotation.Nullable String submissionId) {
+    this.submissionId = submissionId;
+  }
+
+
+  public SubmissionDataRequestEvent submissionDataRequestId(@javax.annotation.Nullable String submissionDataRequestId) {
+    this.submissionDataRequestId = submissionDataRequestId;
+    return this;
+  }
+
+  /**
+   * Get submissionDataRequestId
+   * @return submissionDataRequestId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_DATA_REQUEST_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getSubmissionDataRequestId() {
+    return submissionDataRequestId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_DATA_REQUEST_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissionDataRequestId(@javax.annotation.Nullable String submissionDataRequestId) {
+    this.submissionDataRequestId = submissionDataRequestId;
+  }
+
+
+  public SubmissionDataRequestEvent eventType(@javax.annotation.Nonnull EventTypeEnum eventType) {
+    this.eventType = eventType;
+    return this;
+  }
+
+  /**
+   * Get eventType
+   * @return eventType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EVENT_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public EventTypeEnum getEventType() {
+    return eventType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EVENT_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEventType(@javax.annotation.Nonnull EventTypeEnum eventType) {
+    this.eventType = eventType;
+  }
+
+
+  public SubmissionDataRequestEvent messageType(@javax.annotation.Nonnull MessageTypeEnum messageType) {
+    this.messageType = messageType;
+    return this;
+  }
+
+  /**
+   * Get messageType
+   * @return messageType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_MESSAGE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public MessageTypeEnum getMessageType() {
+    return messageType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_MESSAGE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMessageType(@javax.annotation.Nonnull MessageTypeEnum messageType) {
+    this.messageType = messageType;
+  }
+
+
+  public SubmissionDataRequestEvent messageRecipient(@javax.annotation.Nullable String messageRecipient) {
+    this.messageRecipient = messageRecipient;
+    return this;
+  }
+
+  /**
+   * Get messageRecipient
+   * @return messageRecipient
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_MESSAGE_RECIPIENT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getMessageRecipient() {
+    return messageRecipient;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_MESSAGE_RECIPIENT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMessageRecipient(@javax.annotation.Nullable String messageRecipient) {
+    this.messageRecipient = messageRecipient;
+  }
+
+
+  public SubmissionDataRequestEvent occurredAt(@javax.annotation.Nullable String occurredAt) {
+    this.occurredAt = occurredAt;
+    return this;
+  }
+
+  /**
+   * Get occurredAt
+   * @return occurredAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_OCCURRED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getOccurredAt() {
+    return occurredAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_OCCURRED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setOccurredAt(@javax.annotation.Nullable String occurredAt) {
+    this.occurredAt = occurredAt;
+  }
+
+
+  /**
+   * Return true if this submission_data_request_event object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionDataRequestEvent submissionDataRequestEvent = (SubmissionDataRequestEvent) o;
+    return Objects.equals(this.id, submissionDataRequestEvent.id) &&
+        Objects.equals(this.submissionId, submissionDataRequestEvent.submissionId) &&
+        Objects.equals(this.submissionDataRequestId, submissionDataRequestEvent.submissionDataRequestId) &&
+        Objects.equals(this.eventType, submissionDataRequestEvent.eventType) &&
+        Objects.equals(this.messageType, submissionDataRequestEvent.messageType) &&
+        Objects.equals(this.messageRecipient, submissionDataRequestEvent.messageRecipient) &&
+        Objects.equals(this.occurredAt, submissionDataRequestEvent.occurredAt);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, submissionId, submissionDataRequestId, eventType, messageType, messageRecipient, occurredAt);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionDataRequestEvent {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    submissionId: ").append(toIndentedString(submissionId)).append("\n");
+    sb.append("    submissionDataRequestId: ").append(toIndentedString(submissionDataRequestId)).append("\n");
+    sb.append("    eventType: ").append(toIndentedString(eventType)).append("\n");
+    sb.append("    messageType: ").append(toIndentedString(messageType)).append("\n");
+    sb.append("    messageRecipient: ").append(toIndentedString(messageRecipient)).append("\n");
+    sb.append("    occurredAt: ").append(toIndentedString(occurredAt)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionDataRequestShow.java b/src/main/java/com/docspring/SubmissionDataRequestShow.java
new file mode 100644
index 0000000..e1dc37d
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionDataRequestShow.java
@@ -0,0 +1,916 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionDataRequestShow
+ */
+@JsonPropertyOrder({
+  SubmissionDataRequestShow.JSON_PROPERTY_ID,
+  SubmissionDataRequestShow.JSON_PROPERTY_EMAIL,
+  SubmissionDataRequestShow.JSON_PROPERTY_NAME,
+  SubmissionDataRequestShow.JSON_PROPERTY_ORDER,
+  SubmissionDataRequestShow.JSON_PROPERTY_SORT_ORDER,
+  SubmissionDataRequestShow.JSON_PROPERTY_FIELDS,
+  SubmissionDataRequestShow.JSON_PROPERTY_METADATA,
+  SubmissionDataRequestShow.JSON_PROPERTY_STATE,
+  SubmissionDataRequestShow.JSON_PROPERTY_VIEWED_AT,
+  SubmissionDataRequestShow.JSON_PROPERTY_COMPLETED_AT,
+  SubmissionDataRequestShow.JSON_PROPERTY_DATA,
+  SubmissionDataRequestShow.JSON_PROPERTY_AUTH_TYPE,
+  SubmissionDataRequestShow.JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE,
+  SubmissionDataRequestShow.JSON_PROPERTY_AUTH_PROVIDER,
+  SubmissionDataRequestShow.JSON_PROPERTY_AUTH_SESSION_STARTED_AT,
+  SubmissionDataRequestShow.JSON_PROPERTY_AUTH_SESSION_ID_HASH,
+  SubmissionDataRequestShow.JSON_PROPERTY_AUTH_USER_ID_HASH,
+  SubmissionDataRequestShow.JSON_PROPERTY_AUTH_USERNAME_HASH,
+  SubmissionDataRequestShow.JSON_PROPERTY_AUTH_PHONE_NUMBER_HASH,
+  SubmissionDataRequestShow.JSON_PROPERTY_IP_ADDRESS,
+  SubmissionDataRequestShow.JSON_PROPERTY_USER_AGENT,
+  SubmissionDataRequestShow.JSON_PROPERTY_SUBMISSION_ID
+})
+@JsonTypeName("submission_data_request_show")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionDataRequestShow {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_EMAIL = "email";
+  @javax.annotation.Nullable
+  private String email;
+
+  public static final String JSON_PROPERTY_NAME = "name";
+  @javax.annotation.Nullable
+  private String name;
+
+  public static final String JSON_PROPERTY_ORDER = "order";
+  @javax.annotation.Nullable
+  private Integer order;
+
+  public static final String JSON_PROPERTY_SORT_ORDER = "sort_order";
+  @javax.annotation.Nonnull
+  private Integer sortOrder;
+
+  public static final String JSON_PROPERTY_FIELDS = "fields";
+  @javax.annotation.Nullable
+  private List<String> fields;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    COMPLETED(String.valueOf("completed"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  public static final String JSON_PROPERTY_VIEWED_AT = "viewed_at";
+  @javax.annotation.Nullable
+  private String viewedAt;
+
+  public static final String JSON_PROPERTY_COMPLETED_AT = "completed_at";
+  @javax.annotation.Nullable
+  private String completedAt;
+
+  public static final String JSON_PROPERTY_DATA = "data";
+  @javax.annotation.Nullable
+  private Object data;
+
+  /**
+   * Gets or Sets authType
+   */
+  public enum AuthTypeEnum {
+    NONE(String.valueOf("none")),
+    
+    PASSWORD(String.valueOf("password")),
+    
+    OAUTH(String.valueOf("oauth")),
+    
+    EMAIL_LINK(String.valueOf("email_link")),
+    
+    PHONE_NUMBER(String.valueOf("phone_number")),
+    
+    LDAP(String.valueOf("ldap")),
+    
+    SAML(String.valueOf("saml"));
+
+    private String value;
+
+    AuthTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static AuthTypeEnum fromValue(String value) {
+      for (AuthTypeEnum b : AuthTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_AUTH_TYPE = "auth_type";
+  @javax.annotation.Nonnull
+  private AuthTypeEnum authType;
+
+  /**
+   * Gets or Sets authSecondFactorType
+   */
+  public enum AuthSecondFactorTypeEnum {
+    NONE(String.valueOf("none")),
+    
+    PHONE_NUMBER(String.valueOf("phone_number")),
+    
+    TOTP(String.valueOf("totp")),
+    
+    MOBILE_PUSH(String.valueOf("mobile_push")),
+    
+    SECURITY_KEY(String.valueOf("security_key")),
+    
+    FINGERPRINT(String.valueOf("fingerprint"));
+
+    private String value;
+
+    AuthSecondFactorTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static AuthSecondFactorTypeEnum fromValue(String value) {
+      for (AuthSecondFactorTypeEnum b : AuthSecondFactorTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE = "auth_second_factor_type";
+  @javax.annotation.Nonnull
+  private AuthSecondFactorTypeEnum authSecondFactorType;
+
+  public static final String JSON_PROPERTY_AUTH_PROVIDER = "auth_provider";
+  @javax.annotation.Nullable
+  private String authProvider;
+
+  public static final String JSON_PROPERTY_AUTH_SESSION_STARTED_AT = "auth_session_started_at";
+  @javax.annotation.Nullable
+  private String authSessionStartedAt;
+
+  public static final String JSON_PROPERTY_AUTH_SESSION_ID_HASH = "auth_session_id_hash";
+  @javax.annotation.Nullable
+  private String authSessionIdHash;
+
+  public static final String JSON_PROPERTY_AUTH_USER_ID_HASH = "auth_user_id_hash";
+  @javax.annotation.Nullable
+  private String authUserIdHash;
+
+  public static final String JSON_PROPERTY_AUTH_USERNAME_HASH = "auth_username_hash";
+  @javax.annotation.Nullable
+  private String authUsernameHash;
+
+  public static final String JSON_PROPERTY_AUTH_PHONE_NUMBER_HASH = "auth_phone_number_hash";
+  @javax.annotation.Nullable
+  private String authPhoneNumberHash;
+
+  public static final String JSON_PROPERTY_IP_ADDRESS = "ip_address";
+  @javax.annotation.Nullable
+  private String ipAddress;
+
+  public static final String JSON_PROPERTY_USER_AGENT = "user_agent";
+  @javax.annotation.Nullable
+  private String userAgent;
+
+  public static final String JSON_PROPERTY_SUBMISSION_ID = "submission_id";
+  @javax.annotation.Nullable
+  private String submissionId;
+
+  public SubmissionDataRequestShow() { 
+  }
+
+  public SubmissionDataRequestShow id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public SubmissionDataRequestShow email(@javax.annotation.Nullable String email) {
+    this.email = email;
+    return this;
+  }
+
+  /**
+   * Get email
+   * @return email
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EMAIL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getEmail() {
+    return email;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EMAIL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEmail(@javax.annotation.Nullable String email) {
+    this.email = email;
+  }
+
+
+  public SubmissionDataRequestShow name(@javax.annotation.Nullable String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getName() {
+    return name;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setName(@javax.annotation.Nullable String name) {
+    this.name = name;
+  }
+
+
+  public SubmissionDataRequestShow order(@javax.annotation.Nullable Integer order) {
+    this.order = order;
+    return this;
+  }
+
+  /**
+   * Get order
+   * @return order
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getOrder() {
+    return order;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setOrder(@javax.annotation.Nullable Integer order) {
+    this.order = order;
+  }
+
+
+  public SubmissionDataRequestShow sortOrder(@javax.annotation.Nonnull Integer sortOrder) {
+    this.sortOrder = sortOrder;
+    return this;
+  }
+
+  /**
+   * Get sortOrder
+   * @return sortOrder
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SORT_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getSortOrder() {
+    return sortOrder;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SORT_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSortOrder(@javax.annotation.Nonnull Integer sortOrder) {
+    this.sortOrder = sortOrder;
+  }
+
+
+  public SubmissionDataRequestShow fields(@javax.annotation.Nullable List<String> fields) {
+    this.fields = fields;
+    return this;
+  }
+
+  public SubmissionDataRequestShow addFieldsItem(String fieldsItem) {
+    if (this.fields == null) {
+      this.fields = new ArrayList<>();
+    }
+    this.fields.add(fieldsItem);
+    return this;
+  }
+
+  /**
+   * Get fields
+   * @return fields
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<String> getFields() {
+    return fields;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFields(@javax.annotation.Nullable List<String> fields) {
+    this.fields = fields;
+  }
+
+
+  public SubmissionDataRequestShow metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public SubmissionDataRequestShow state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public SubmissionDataRequestShow viewedAt(@javax.annotation.Nullable String viewedAt) {
+    this.viewedAt = viewedAt;
+    return this;
+  }
+
+  /**
+   * Get viewedAt
+   * @return viewedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VIEWED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getViewedAt() {
+    return viewedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VIEWED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setViewedAt(@javax.annotation.Nullable String viewedAt) {
+    this.viewedAt = viewedAt;
+  }
+
+
+  public SubmissionDataRequestShow completedAt(@javax.annotation.Nullable String completedAt) {
+    this.completedAt = completedAt;
+    return this;
+  }
+
+  /**
+   * Get completedAt
+   * @return completedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_COMPLETED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getCompletedAt() {
+    return completedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_COMPLETED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setCompletedAt(@javax.annotation.Nullable String completedAt) {
+    this.completedAt = completedAt;
+  }
+
+
+  public SubmissionDataRequestShow data(@javax.annotation.Nullable Object data) {
+    this.data = data;
+    return this;
+  }
+
+  /**
+   * Get data
+   * @return data
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getData() {
+    return data;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setData(@javax.annotation.Nullable Object data) {
+    this.data = data;
+  }
+
+
+  public SubmissionDataRequestShow authType(@javax.annotation.Nonnull AuthTypeEnum authType) {
+    this.authType = authType;
+    return this;
+  }
+
+  /**
+   * Get authType
+   * @return authType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_AUTH_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public AuthTypeEnum getAuthType() {
+    return authType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthType(@javax.annotation.Nonnull AuthTypeEnum authType) {
+    this.authType = authType;
+  }
+
+
+  public SubmissionDataRequestShow authSecondFactorType(@javax.annotation.Nonnull AuthSecondFactorTypeEnum authSecondFactorType) {
+    this.authSecondFactorType = authSecondFactorType;
+    return this;
+  }
+
+  /**
+   * Get authSecondFactorType
+   * @return authSecondFactorType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public AuthSecondFactorTypeEnum getAuthSecondFactorType() {
+    return authSecondFactorType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_SECOND_FACTOR_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthSecondFactorType(@javax.annotation.Nonnull AuthSecondFactorTypeEnum authSecondFactorType) {
+    this.authSecondFactorType = authSecondFactorType;
+  }
+
+
+  public SubmissionDataRequestShow authProvider(@javax.annotation.Nullable String authProvider) {
+    this.authProvider = authProvider;
+    return this;
+  }
+
+  /**
+   * Get authProvider
+   * @return authProvider
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_PROVIDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthProvider() {
+    return authProvider;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_PROVIDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthProvider(@javax.annotation.Nullable String authProvider) {
+    this.authProvider = authProvider;
+  }
+
+
+  public SubmissionDataRequestShow authSessionStartedAt(@javax.annotation.Nullable String authSessionStartedAt) {
+    this.authSessionStartedAt = authSessionStartedAt;
+    return this;
+  }
+
+  /**
+   * Get authSessionStartedAt
+   * @return authSessionStartedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_SESSION_STARTED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthSessionStartedAt() {
+    return authSessionStartedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_SESSION_STARTED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthSessionStartedAt(@javax.annotation.Nullable String authSessionStartedAt) {
+    this.authSessionStartedAt = authSessionStartedAt;
+  }
+
+
+  public SubmissionDataRequestShow authSessionIdHash(@javax.annotation.Nullable String authSessionIdHash) {
+    this.authSessionIdHash = authSessionIdHash;
+    return this;
+  }
+
+  /**
+   * Get authSessionIdHash
+   * @return authSessionIdHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_SESSION_ID_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthSessionIdHash() {
+    return authSessionIdHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_SESSION_ID_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthSessionIdHash(@javax.annotation.Nullable String authSessionIdHash) {
+    this.authSessionIdHash = authSessionIdHash;
+  }
+
+
+  public SubmissionDataRequestShow authUserIdHash(@javax.annotation.Nullable String authUserIdHash) {
+    this.authUserIdHash = authUserIdHash;
+    return this;
+  }
+
+  /**
+   * Get authUserIdHash
+   * @return authUserIdHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_USER_ID_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthUserIdHash() {
+    return authUserIdHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_USER_ID_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthUserIdHash(@javax.annotation.Nullable String authUserIdHash) {
+    this.authUserIdHash = authUserIdHash;
+  }
+
+
+  public SubmissionDataRequestShow authUsernameHash(@javax.annotation.Nullable String authUsernameHash) {
+    this.authUsernameHash = authUsernameHash;
+    return this;
+  }
+
+  /**
+   * Get authUsernameHash
+   * @return authUsernameHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_USERNAME_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthUsernameHash() {
+    return authUsernameHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_USERNAME_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthUsernameHash(@javax.annotation.Nullable String authUsernameHash) {
+    this.authUsernameHash = authUsernameHash;
+  }
+
+
+  public SubmissionDataRequestShow authPhoneNumberHash(@javax.annotation.Nullable String authPhoneNumberHash) {
+    this.authPhoneNumberHash = authPhoneNumberHash;
+    return this;
+  }
+
+  /**
+   * Get authPhoneNumberHash
+   * @return authPhoneNumberHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_PHONE_NUMBER_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuthPhoneNumberHash() {
+    return authPhoneNumberHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_PHONE_NUMBER_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuthPhoneNumberHash(@javax.annotation.Nullable String authPhoneNumberHash) {
+    this.authPhoneNumberHash = authPhoneNumberHash;
+  }
+
+
+  public SubmissionDataRequestShow ipAddress(@javax.annotation.Nullable String ipAddress) {
+    this.ipAddress = ipAddress;
+    return this;
+  }
+
+  /**
+   * Get ipAddress
+   * @return ipAddress
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_IP_ADDRESS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getIpAddress() {
+    return ipAddress;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_IP_ADDRESS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setIpAddress(@javax.annotation.Nullable String ipAddress) {
+    this.ipAddress = ipAddress;
+  }
+
+
+  public SubmissionDataRequestShow userAgent(@javax.annotation.Nullable String userAgent) {
+    this.userAgent = userAgent;
+    return this;
+  }
+
+  /**
+   * Get userAgent
+   * @return userAgent
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_USER_AGENT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getUserAgent() {
+    return userAgent;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_USER_AGENT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setUserAgent(@javax.annotation.Nullable String userAgent) {
+    this.userAgent = userAgent;
+  }
+
+
+  public SubmissionDataRequestShow submissionId(@javax.annotation.Nullable String submissionId) {
+    this.submissionId = submissionId;
+    return this;
+  }
+
+  /**
+   * Get submissionId
+   * @return submissionId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getSubmissionId() {
+    return submissionId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SUBMISSION_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSubmissionId(@javax.annotation.Nullable String submissionId) {
+    this.submissionId = submissionId;
+  }
+
+
+  /**
+   * Return true if this submission_data_request_show object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionDataRequestShow submissionDataRequestShow = (SubmissionDataRequestShow) o;
+    return Objects.equals(this.id, submissionDataRequestShow.id) &&
+        Objects.equals(this.email, submissionDataRequestShow.email) &&
+        Objects.equals(this.name, submissionDataRequestShow.name) &&
+        Objects.equals(this.order, submissionDataRequestShow.order) &&
+        Objects.equals(this.sortOrder, submissionDataRequestShow.sortOrder) &&
+        Objects.equals(this.fields, submissionDataRequestShow.fields) &&
+        Objects.equals(this.metadata, submissionDataRequestShow.metadata) &&
+        Objects.equals(this.state, submissionDataRequestShow.state) &&
+        Objects.equals(this.viewedAt, submissionDataRequestShow.viewedAt) &&
+        Objects.equals(this.completedAt, submissionDataRequestShow.completedAt) &&
+        Objects.equals(this.data, submissionDataRequestShow.data) &&
+        Objects.equals(this.authType, submissionDataRequestShow.authType) &&
+        Objects.equals(this.authSecondFactorType, submissionDataRequestShow.authSecondFactorType) &&
+        Objects.equals(this.authProvider, submissionDataRequestShow.authProvider) &&
+        Objects.equals(this.authSessionStartedAt, submissionDataRequestShow.authSessionStartedAt) &&
+        Objects.equals(this.authSessionIdHash, submissionDataRequestShow.authSessionIdHash) &&
+        Objects.equals(this.authUserIdHash, submissionDataRequestShow.authUserIdHash) &&
+        Objects.equals(this.authUsernameHash, submissionDataRequestShow.authUsernameHash) &&
+        Objects.equals(this.authPhoneNumberHash, submissionDataRequestShow.authPhoneNumberHash) &&
+        Objects.equals(this.ipAddress, submissionDataRequestShow.ipAddress) &&
+        Objects.equals(this.userAgent, submissionDataRequestShow.userAgent) &&
+        Objects.equals(this.submissionId, submissionDataRequestShow.submissionId);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, email, name, order, sortOrder, fields, metadata, state, viewedAt, completedAt, data, authType, authSecondFactorType, authProvider, authSessionStartedAt, authSessionIdHash, authUserIdHash, authUsernameHash, authPhoneNumberHash, ipAddress, userAgent, submissionId);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionDataRequestShow {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    email: ").append(toIndentedString(email)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    order: ").append(toIndentedString(order)).append("\n");
+    sb.append("    sortOrder: ").append(toIndentedString(sortOrder)).append("\n");
+    sb.append("    fields: ").append(toIndentedString(fields)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    viewedAt: ").append(toIndentedString(viewedAt)).append("\n");
+    sb.append("    completedAt: ").append(toIndentedString(completedAt)).append("\n");
+    sb.append("    data: ").append(toIndentedString(data)).append("\n");
+    sb.append("    authType: ").append(toIndentedString(authType)).append("\n");
+    sb.append("    authSecondFactorType: ").append(toIndentedString(authSecondFactorType)).append("\n");
+    sb.append("    authProvider: ").append(toIndentedString(authProvider)).append("\n");
+    sb.append("    authSessionStartedAt: ").append(toIndentedString(authSessionStartedAt)).append("\n");
+    sb.append("    authSessionIdHash: ").append(toIndentedString(authSessionIdHash)).append("\n");
+    sb.append("    authUserIdHash: ").append(toIndentedString(authUserIdHash)).append("\n");
+    sb.append("    authUsernameHash: ").append(toIndentedString(authUsernameHash)).append("\n");
+    sb.append("    authPhoneNumberHash: ").append(toIndentedString(authPhoneNumberHash)).append("\n");
+    sb.append("    ipAddress: ").append(toIndentedString(ipAddress)).append("\n");
+    sb.append("    userAgent: ").append(toIndentedString(userAgent)).append("\n");
+    sb.append("    submissionId: ").append(toIndentedString(submissionId)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionDataRequestToken.java b/src/main/java/com/docspring/SubmissionDataRequestToken.java
new file mode 100644
index 0000000..6973b84
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionDataRequestToken.java
@@ -0,0 +1,207 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionDataRequestToken
+ */
+@JsonPropertyOrder({
+  SubmissionDataRequestToken.JSON_PROPERTY_ID,
+  SubmissionDataRequestToken.JSON_PROPERTY_SECRET,
+  SubmissionDataRequestToken.JSON_PROPERTY_EXPIRES_AT,
+  SubmissionDataRequestToken.JSON_PROPERTY_DATA_REQUEST_URL
+})
+@JsonTypeName("submission_data_request_token")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionDataRequestToken {
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_SECRET = "secret";
+  @javax.annotation.Nonnull
+  private String secret;
+
+  public static final String JSON_PROPERTY_EXPIRES_AT = "expires_at";
+  @javax.annotation.Nullable
+  private String expiresAt;
+
+  public static final String JSON_PROPERTY_DATA_REQUEST_URL = "data_request_url";
+  @javax.annotation.Nullable
+  private String dataRequestUrl;
+
+  public SubmissionDataRequestToken() { 
+  }
+
+  public SubmissionDataRequestToken id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public SubmissionDataRequestToken secret(@javax.annotation.Nonnull String secret) {
+    this.secret = secret;
+    return this;
+  }
+
+  /**
+   * Get secret
+   * @return secret
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SECRET)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getSecret() {
+    return secret;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SECRET)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSecret(@javax.annotation.Nonnull String secret) {
+    this.secret = secret;
+  }
+
+
+  public SubmissionDataRequestToken expiresAt(@javax.annotation.Nullable String expiresAt) {
+    this.expiresAt = expiresAt;
+    return this;
+  }
+
+  /**
+   * Get expiresAt
+   * @return expiresAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExpiresAt() {
+    return expiresAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpiresAt(@javax.annotation.Nullable String expiresAt) {
+    this.expiresAt = expiresAt;
+  }
+
+
+  public SubmissionDataRequestToken dataRequestUrl(@javax.annotation.Nullable String dataRequestUrl) {
+    this.dataRequestUrl = dataRequestUrl;
+    return this;
+  }
+
+  /**
+   * Get dataRequestUrl
+   * @return dataRequestUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DATA_REQUEST_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDataRequestUrl() {
+    return dataRequestUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA_REQUEST_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDataRequestUrl(@javax.annotation.Nullable String dataRequestUrl) {
+    this.dataRequestUrl = dataRequestUrl;
+  }
+
+
+  /**
+   * Return true if this submission_data_request_token object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionDataRequestToken submissionDataRequestToken = (SubmissionDataRequestToken) o;
+    return Objects.equals(this.id, submissionDataRequestToken.id) &&
+        Objects.equals(this.secret, submissionDataRequestToken.secret) &&
+        Objects.equals(this.expiresAt, submissionDataRequestToken.expiresAt) &&
+        Objects.equals(this.dataRequestUrl, submissionDataRequestToken.dataRequestUrl);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(id, secret, expiresAt, dataRequestUrl);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionDataRequestToken {\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    secret: ").append(toIndentedString(secret)).append("\n");
+    sb.append("    expiresAt: ").append(toIndentedString(expiresAt)).append("\n");
+    sb.append("    dataRequestUrl: ").append(toIndentedString(dataRequestUrl)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SubmissionPreview.java b/src/main/java/com/docspring/SubmissionPreview.java
new file mode 100644
index 0000000..8094bd4
--- /dev/null
+++ b/src/main/java/com/docspring/SubmissionPreview.java
@@ -0,0 +1,832 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.docspring.SubmissionAction;
+import com.docspring.SubmissionDataRequest;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SubmissionPreview
+ */
+@JsonPropertyOrder({
+  SubmissionPreview.JSON_PROPERTY_BATCH_ID,
+  SubmissionPreview.JSON_PROPERTY_DATA_REQUESTS,
+  SubmissionPreview.JSON_PROPERTY_EDITABLE,
+  SubmissionPreview.JSON_PROPERTY_EXPIRED,
+  SubmissionPreview.JSON_PROPERTY_EXPIRES_AT,
+  SubmissionPreview.JSON_PROPERTY_ID,
+  SubmissionPreview.JSON_PROPERTY_JSON_SCHEMA_ERRORS,
+  SubmissionPreview.JSON_PROPERTY_METADATA,
+  SubmissionPreview.JSON_PROPERTY_PASSWORD,
+  SubmissionPreview.JSON_PROPERTY_PROCESSED_AT,
+  SubmissionPreview.JSON_PROPERTY_STATE,
+  SubmissionPreview.JSON_PROPERTY_TEMPLATE_ID,
+  SubmissionPreview.JSON_PROPERTY_TEST,
+  SubmissionPreview.JSON_PROPERTY_TRUNCATED_TEXT,
+  SubmissionPreview.JSON_PROPERTY_PDF_HASH,
+  SubmissionPreview.JSON_PROPERTY_DOWNLOAD_URL,
+  SubmissionPreview.JSON_PROPERTY_PERMANENT_DOWNLOAD_URL,
+  SubmissionPreview.JSON_PROPERTY_PREVIEW_DOWNLOAD_URL,
+  SubmissionPreview.JSON_PROPERTY_PREVIEW_GENERATED_AT,
+  SubmissionPreview.JSON_PROPERTY_AUDIT_TRAIL_DOWNLOAD_URL,
+  SubmissionPreview.JSON_PROPERTY_ACTIONS
+})
+@JsonTypeName("submission_preview")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SubmissionPreview {
+  public static final String JSON_PROPERTY_BATCH_ID = "batch_id";
+  @javax.annotation.Nullable
+  private String batchId;
+
+  public static final String JSON_PROPERTY_DATA_REQUESTS = "data_requests";
+  @javax.annotation.Nonnull
+  private List<SubmissionDataRequest> dataRequests = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_EDITABLE = "editable";
+  @javax.annotation.Nullable
+  private Boolean editable;
+
+  public static final String JSON_PROPERTY_EXPIRED = "expired";
+  @javax.annotation.Nonnull
+  private Boolean expired;
+
+  public static final String JSON_PROPERTY_EXPIRES_AT = "expires_at";
+  @javax.annotation.Nullable
+  private String expiresAt;
+
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_JSON_SCHEMA_ERRORS = "json_schema_errors";
+  @javax.annotation.Nullable
+  private List<String> jsonSchemaErrors;
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nonnull
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_PASSWORD = "password";
+  @javax.annotation.Nullable
+  private String password;
+
+  public static final String JSON_PROPERTY_PROCESSED_AT = "processed_at";
+  @javax.annotation.Nullable
+  private String processedAt;
+
+  /**
+   * Gets or Sets state
+   */
+  public enum StateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    INVALID_DATA(String.valueOf("invalid_data")),
+    
+    ERROR(String.valueOf("error")),
+    
+    IMAGE_DOWNLOAD_FAILED(String.valueOf("image_download_failed")),
+    
+    IMAGE_PROCESSING_FAILED(String.valueOf("image_processing_failed")),
+    
+    WAITING_FOR_DATA_REQUESTS(String.valueOf("waiting_for_data_requests")),
+    
+    SYNTAX_ERROR(String.valueOf("syntax_error")),
+    
+    ACCOUNT_SUSPENDED(String.valueOf("account_suspended")),
+    
+    LICENSE_REVOKED(String.valueOf("license_revoked")),
+    
+    ACCIDENTAL(String.valueOf("accidental"));
+
+    private String value;
+
+    StateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StateEnum fromValue(String value) {
+      for (StateEnum b : StateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATE = "state";
+  @javax.annotation.Nonnull
+  private StateEnum state;
+
+  public static final String JSON_PROPERTY_TEMPLATE_ID = "template_id";
+  @javax.annotation.Nullable
+  private String templateId;
+
+  public static final String JSON_PROPERTY_TEST = "test";
+  @javax.annotation.Nonnull
+  private Boolean test;
+
+  public static final String JSON_PROPERTY_TRUNCATED_TEXT = "truncated_text";
+  @javax.annotation.Nullable
+  private Object truncatedText;
+
+  public static final String JSON_PROPERTY_PDF_HASH = "pdf_hash";
+  @javax.annotation.Nullable
+  private String pdfHash;
+
+  public static final String JSON_PROPERTY_DOWNLOAD_URL = "download_url";
+  @javax.annotation.Nullable
+  private String downloadUrl;
+
+  public static final String JSON_PROPERTY_PERMANENT_DOWNLOAD_URL = "permanent_download_url";
+  @javax.annotation.Nullable
+  private String permanentDownloadUrl;
+
+  public static final String JSON_PROPERTY_PREVIEW_DOWNLOAD_URL = "preview_download_url";
+  @javax.annotation.Nullable
+  private String previewDownloadUrl;
+
+  public static final String JSON_PROPERTY_PREVIEW_GENERATED_AT = "preview_generated_at";
+  @javax.annotation.Nullable
+  private String previewGeneratedAt;
+
+  public static final String JSON_PROPERTY_AUDIT_TRAIL_DOWNLOAD_URL = "audit_trail_download_url";
+  @javax.annotation.Nullable
+  private String auditTrailDownloadUrl;
+
+  public static final String JSON_PROPERTY_ACTIONS = "actions";
+  @javax.annotation.Nonnull
+  private List<SubmissionAction> actions = new ArrayList<>();
+
+  public SubmissionPreview() { 
+  }
+
+  public SubmissionPreview batchId(@javax.annotation.Nullable String batchId) {
+    this.batchId = batchId;
+    return this;
+  }
+
+  /**
+   * Get batchId
+   * @return batchId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_BATCH_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getBatchId() {
+    return batchId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_BATCH_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setBatchId(@javax.annotation.Nullable String batchId) {
+    this.batchId = batchId;
+  }
+
+
+  public SubmissionPreview dataRequests(@javax.annotation.Nonnull List<SubmissionDataRequest> dataRequests) {
+    this.dataRequests = dataRequests;
+    return this;
+  }
+
+  public SubmissionPreview addDataRequestsItem(SubmissionDataRequest dataRequestsItem) {
+    if (this.dataRequests == null) {
+      this.dataRequests = new ArrayList<>();
+    }
+    this.dataRequests.add(dataRequestsItem);
+    return this;
+  }
+
+  /**
+   * Get dataRequests
+   * @return dataRequests
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DATA_REQUESTS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<SubmissionDataRequest> getDataRequests() {
+    return dataRequests;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DATA_REQUESTS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDataRequests(@javax.annotation.Nonnull List<SubmissionDataRequest> dataRequests) {
+    this.dataRequests = dataRequests;
+  }
+
+
+  public SubmissionPreview editable(@javax.annotation.Nullable Boolean editable) {
+    this.editable = editable;
+    return this;
+  }
+
+  /**
+   * Get editable
+   * @return editable
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EDITABLE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getEditable() {
+    return editable;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EDITABLE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEditable(@javax.annotation.Nullable Boolean editable) {
+    this.editable = editable;
+  }
+
+
+  public SubmissionPreview expired(@javax.annotation.Nonnull Boolean expired) {
+    this.expired = expired;
+    return this;
+  }
+
+  /**
+   * Get expired
+   * @return expired
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getExpired() {
+    return expired;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpired(@javax.annotation.Nonnull Boolean expired) {
+    this.expired = expired;
+  }
+
+
+  public SubmissionPreview expiresAt(@javax.annotation.Nullable String expiresAt) {
+    this.expiresAt = expiresAt;
+    return this;
+  }
+
+  /**
+   * Get expiresAt
+   * @return expiresAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXPIRES_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExpiresAt() {
+    return expiresAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRES_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpiresAt(@javax.annotation.Nullable String expiresAt) {
+    this.expiresAt = expiresAt;
+  }
+
+
+  public SubmissionPreview id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public SubmissionPreview jsonSchemaErrors(@javax.annotation.Nullable List<String> jsonSchemaErrors) {
+    this.jsonSchemaErrors = jsonSchemaErrors;
+    return this;
+  }
+
+  public SubmissionPreview addJsonSchemaErrorsItem(String jsonSchemaErrorsItem) {
+    if (this.jsonSchemaErrors == null) {
+      this.jsonSchemaErrors = new ArrayList<>();
+    }
+    this.jsonSchemaErrors.add(jsonSchemaErrorsItem);
+    return this;
+  }
+
+  /**
+   * Get jsonSchemaErrors
+   * @return jsonSchemaErrors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_JSON_SCHEMA_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<String> getJsonSchemaErrors() {
+    return jsonSchemaErrors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_JSON_SCHEMA_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setJsonSchemaErrors(@javax.annotation.Nullable List<String> jsonSchemaErrors) {
+    this.jsonSchemaErrors = jsonSchemaErrors;
+  }
+
+
+  public SubmissionPreview metadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMetadata(@javax.annotation.Nonnull Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public SubmissionPreview password(@javax.annotation.Nullable String password) {
+    this.password = password;
+    return this;
+  }
+
+  /**
+   * Get password
+   * @return password
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPassword() {
+    return password;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPassword(@javax.annotation.Nullable String password) {
+    this.password = password;
+  }
+
+
+  public SubmissionPreview processedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+    return this;
+  }
+
+  /**
+   * Get processedAt
+   * @return processedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getProcessedAt() {
+    return processedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PROCESSED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setProcessedAt(@javax.annotation.Nullable String processedAt) {
+    this.processedAt = processedAt;
+  }
+
+
+  public SubmissionPreview state(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+    return this;
+  }
+
+  /**
+   * Get state
+   * @return state
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StateEnum getState() {
+    return state;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setState(@javax.annotation.Nonnull StateEnum state) {
+    this.state = state;
+  }
+
+
+  public SubmissionPreview templateId(@javax.annotation.Nullable String templateId) {
+    this.templateId = templateId;
+    return this;
+  }
+
+  /**
+   * Get templateId
+   * @return templateId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getTemplateId() {
+    return templateId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplateId(@javax.annotation.Nullable String templateId) {
+    this.templateId = templateId;
+  }
+
+
+  public SubmissionPreview test(@javax.annotation.Nonnull Boolean test) {
+    this.test = test;
+    return this;
+  }
+
+  /**
+   * Get test
+   * @return test
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getTest() {
+    return test;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEST)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTest(@javax.annotation.Nonnull Boolean test) {
+    this.test = test;
+  }
+
+
+  public SubmissionPreview truncatedText(@javax.annotation.Nullable Object truncatedText) {
+    this.truncatedText = truncatedText;
+    return this;
+  }
+
+  /**
+   * Get truncatedText
+   * @return truncatedText
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TRUNCATED_TEXT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getTruncatedText() {
+    return truncatedText;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TRUNCATED_TEXT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTruncatedText(@javax.annotation.Nullable Object truncatedText) {
+    this.truncatedText = truncatedText;
+  }
+
+
+  public SubmissionPreview pdfHash(@javax.annotation.Nullable String pdfHash) {
+    this.pdfHash = pdfHash;
+    return this;
+  }
+
+  /**
+   * Get pdfHash
+   * @return pdfHash
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PDF_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPdfHash() {
+    return pdfHash;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PDF_HASH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPdfHash(@javax.annotation.Nullable String pdfHash) {
+    this.pdfHash = pdfHash;
+  }
+
+
+  public SubmissionPreview downloadUrl(@javax.annotation.Nullable String downloadUrl) {
+    this.downloadUrl = downloadUrl;
+    return this;
+  }
+
+  /**
+   * Get downloadUrl
+   * @return downloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDownloadUrl() {
+    return downloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDownloadUrl(@javax.annotation.Nullable String downloadUrl) {
+    this.downloadUrl = downloadUrl;
+  }
+
+
+  public SubmissionPreview permanentDownloadUrl(@javax.annotation.Nullable String permanentDownloadUrl) {
+    this.permanentDownloadUrl = permanentDownloadUrl;
+    return this;
+  }
+
+  /**
+   * Get permanentDownloadUrl
+   * @return permanentDownloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PERMANENT_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPermanentDownloadUrl() {
+    return permanentDownloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PERMANENT_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPermanentDownloadUrl(@javax.annotation.Nullable String permanentDownloadUrl) {
+    this.permanentDownloadUrl = permanentDownloadUrl;
+  }
+
+
+  public SubmissionPreview previewDownloadUrl(@javax.annotation.Nullable String previewDownloadUrl) {
+    this.previewDownloadUrl = previewDownloadUrl;
+    return this;
+  }
+
+  /**
+   * Get previewDownloadUrl
+   * @return previewDownloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PREVIEW_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPreviewDownloadUrl() {
+    return previewDownloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PREVIEW_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPreviewDownloadUrl(@javax.annotation.Nullable String previewDownloadUrl) {
+    this.previewDownloadUrl = previewDownloadUrl;
+  }
+
+
+  public SubmissionPreview previewGeneratedAt(@javax.annotation.Nullable String previewGeneratedAt) {
+    this.previewGeneratedAt = previewGeneratedAt;
+    return this;
+  }
+
+  /**
+   * Get previewGeneratedAt
+   * @return previewGeneratedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PREVIEW_GENERATED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPreviewGeneratedAt() {
+    return previewGeneratedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PREVIEW_GENERATED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPreviewGeneratedAt(@javax.annotation.Nullable String previewGeneratedAt) {
+    this.previewGeneratedAt = previewGeneratedAt;
+  }
+
+
+  public SubmissionPreview auditTrailDownloadUrl(@javax.annotation.Nullable String auditTrailDownloadUrl) {
+    this.auditTrailDownloadUrl = auditTrailDownloadUrl;
+    return this;
+  }
+
+  /**
+   * Get auditTrailDownloadUrl
+   * @return auditTrailDownloadUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUDIT_TRAIL_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getAuditTrailDownloadUrl() {
+    return auditTrailDownloadUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUDIT_TRAIL_DOWNLOAD_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAuditTrailDownloadUrl(@javax.annotation.Nullable String auditTrailDownloadUrl) {
+    this.auditTrailDownloadUrl = auditTrailDownloadUrl;
+  }
+
+
+  public SubmissionPreview actions(@javax.annotation.Nonnull List<SubmissionAction> actions) {
+    this.actions = actions;
+    return this;
+  }
+
+  public SubmissionPreview addActionsItem(SubmissionAction actionsItem) {
+    if (this.actions == null) {
+      this.actions = new ArrayList<>();
+    }
+    this.actions.add(actionsItem);
+    return this;
+  }
+
+  /**
+   * Get actions
+   * @return actions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ACTIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<SubmissionAction> getActions() {
+    return actions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ACTIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setActions(@javax.annotation.Nonnull List<SubmissionAction> actions) {
+    this.actions = actions;
+  }
+
+
+  /**
+   * Return true if this submission_preview object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SubmissionPreview submissionPreview = (SubmissionPreview) o;
+    return Objects.equals(this.batchId, submissionPreview.batchId) &&
+        Objects.equals(this.dataRequests, submissionPreview.dataRequests) &&
+        Objects.equals(this.editable, submissionPreview.editable) &&
+        Objects.equals(this.expired, submissionPreview.expired) &&
+        Objects.equals(this.expiresAt, submissionPreview.expiresAt) &&
+        Objects.equals(this.id, submissionPreview.id) &&
+        Objects.equals(this.jsonSchemaErrors, submissionPreview.jsonSchemaErrors) &&
+        Objects.equals(this.metadata, submissionPreview.metadata) &&
+        Objects.equals(this.password, submissionPreview.password) &&
+        Objects.equals(this.processedAt, submissionPreview.processedAt) &&
+        Objects.equals(this.state, submissionPreview.state) &&
+        Objects.equals(this.templateId, submissionPreview.templateId) &&
+        Objects.equals(this.test, submissionPreview.test) &&
+        Objects.equals(this.truncatedText, submissionPreview.truncatedText) &&
+        Objects.equals(this.pdfHash, submissionPreview.pdfHash) &&
+        Objects.equals(this.downloadUrl, submissionPreview.downloadUrl) &&
+        Objects.equals(this.permanentDownloadUrl, submissionPreview.permanentDownloadUrl) &&
+        Objects.equals(this.previewDownloadUrl, submissionPreview.previewDownloadUrl) &&
+        Objects.equals(this.previewGeneratedAt, submissionPreview.previewGeneratedAt) &&
+        Objects.equals(this.auditTrailDownloadUrl, submissionPreview.auditTrailDownloadUrl) &&
+        Objects.equals(this.actions, submissionPreview.actions);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(batchId, dataRequests, editable, expired, expiresAt, id, jsonSchemaErrors, metadata, password, processedAt, state, templateId, test, truncatedText, pdfHash, downloadUrl, permanentDownloadUrl, previewDownloadUrl, previewGeneratedAt, auditTrailDownloadUrl, actions);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SubmissionPreview {\n");
+    sb.append("    batchId: ").append(toIndentedString(batchId)).append("\n");
+    sb.append("    dataRequests: ").append(toIndentedString(dataRequests)).append("\n");
+    sb.append("    editable: ").append(toIndentedString(editable)).append("\n");
+    sb.append("    expired: ").append(toIndentedString(expired)).append("\n");
+    sb.append("    expiresAt: ").append(toIndentedString(expiresAt)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    jsonSchemaErrors: ").append(toIndentedString(jsonSchemaErrors)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    password: ").append(toIndentedString(password)).append("\n");
+    sb.append("    processedAt: ").append(toIndentedString(processedAt)).append("\n");
+    sb.append("    state: ").append(toIndentedString(state)).append("\n");
+    sb.append("    templateId: ").append(toIndentedString(templateId)).append("\n");
+    sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("    truncatedText: ").append(toIndentedString(truncatedText)).append("\n");
+    sb.append("    pdfHash: ").append(toIndentedString(pdfHash)).append("\n");
+    sb.append("    downloadUrl: ").append(toIndentedString(downloadUrl)).append("\n");
+    sb.append("    permanentDownloadUrl: ").append(toIndentedString(permanentDownloadUrl)).append("\n");
+    sb.append("    previewDownloadUrl: ").append(toIndentedString(previewDownloadUrl)).append("\n");
+    sb.append("    previewGeneratedAt: ").append(toIndentedString(previewGeneratedAt)).append("\n");
+    sb.append("    auditTrailDownloadUrl: ").append(toIndentedString(auditTrailDownloadUrl)).append("\n");
+    sb.append("    actions: ").append(toIndentedString(actions)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SuccessErrorResponse.java b/src/main/java/com/docspring/SuccessErrorResponse.java
new file mode 100644
index 0000000..2ba89a1
--- /dev/null
+++ b/src/main/java/com/docspring/SuccessErrorResponse.java
@@ -0,0 +1,178 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SuccessErrorResponse
+ */
+@JsonPropertyOrder({
+  SuccessErrorResponse.JSON_PROPERTY_STATUS,
+  SuccessErrorResponse.JSON_PROPERTY_ERROR
+})
+@JsonTypeName("success_error_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SuccessErrorResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_ERROR = "error";
+  @javax.annotation.Nullable
+  private String error;
+
+  public SuccessErrorResponse() { 
+  }
+
+  public SuccessErrorResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public SuccessErrorResponse error(@javax.annotation.Nullable String error) {
+    this.error = error;
+    return this;
+  }
+
+  /**
+   * Get error
+   * @return error
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERROR)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getError() {
+    return error;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERROR)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setError(@javax.annotation.Nullable String error) {
+    this.error = error;
+  }
+
+
+  /**
+   * Return true if this success_error_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SuccessErrorResponse successErrorResponse = (SuccessErrorResponse) o;
+    return Objects.equals(this.status, successErrorResponse.status) &&
+        Objects.equals(this.error, successErrorResponse.error);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, error);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SuccessErrorResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    error: ").append(toIndentedString(error)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/SuccessMultipleErrorsResponse.java b/src/main/java/com/docspring/SuccessMultipleErrorsResponse.java
new file mode 100644
index 0000000..b965821
--- /dev/null
+++ b/src/main/java/com/docspring/SuccessMultipleErrorsResponse.java
@@ -0,0 +1,188 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * SuccessMultipleErrorsResponse
+ */
+@JsonPropertyOrder({
+  SuccessMultipleErrorsResponse.JSON_PROPERTY_STATUS,
+  SuccessMultipleErrorsResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("success_multiple_errors_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class SuccessMultipleErrorsResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public SuccessMultipleErrorsResponse() { 
+  }
+
+  public SuccessMultipleErrorsResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public SuccessMultipleErrorsResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public SuccessMultipleErrorsResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this success_multiple_errors_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    SuccessMultipleErrorsResponse successMultipleErrorsResponse = (SuccessMultipleErrorsResponse) o;
+    return Objects.equals(this.status, successMultipleErrorsResponse.status) &&
+        Objects.equals(this.errors, successMultipleErrorsResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class SuccessMultipleErrorsResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/Template.java b/src/main/java/com/docspring/Template.java
new file mode 100644
index 0000000..cb294a6
--- /dev/null
+++ b/src/main/java/com/docspring/Template.java
@@ -0,0 +1,1654 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * Template
+ */
+@JsonPropertyOrder({
+  Template.JSON_PROPERTY_ADD_DATA_REQUEST_SUBMISSION_ID_FOOTERS,
+  Template.JSON_PROPERTY_ALLOW_ADDITIONAL_PROPERTIES,
+  Template.JSON_PROPERTY_DESCRIPTION,
+  Template.JSON_PROPERTY_DOCUMENT_FILENAME,
+  Template.JSON_PROPERTY_DOCUMENT_MD5,
+  Template.JSON_PROPERTY_DOCUMENT_PARSE_ERROR,
+  Template.JSON_PROPERTY_DOCUMENT_PROCESSED,
+  Template.JSON_PROPERTY_DOCUMENT_STATE,
+  Template.JSON_PROPERTY_DOCUMENT_URL,
+  Template.JSON_PROPERTY_EDITABLE_SUBMISSIONS,
+  Template.JSON_PROPERTY_EMBED_DOMAINS,
+  Template.JSON_PROPERTY_ENCRYPT_PDFS_PASSWORD,
+  Template.JSON_PROPERTY_ENCRYPT_PDFS,
+  Template.JSON_PROPERTY_EXPIRATION_INTERVAL,
+  Template.JSON_PROPERTY_EXPIRE_AFTER,
+  Template.JSON_PROPERTY_EXPIRE_SUBMISSIONS,
+  Template.JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_ID,
+  Template.JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_NAME,
+  Template.JSON_PROPERTY_FIRST_TEMPLATE,
+  Template.JSON_PROPERTY_ID,
+  Template.JSON_PROPERTY_LOCKED,
+  Template.JSON_PROPERTY_MERGE_AUDIT_TRAIL_PDF,
+  Template.JSON_PROPERTY_NAME,
+  Template.JSON_PROPERTY_PAGE_COUNT,
+  Template.JSON_PROPERTY_PAGE_DIMENSIONS,
+  Template.JSON_PROPERTY_PARENT_FOLDER_ID,
+  Template.JSON_PROPERTY_PATH,
+  Template.JSON_PROPERTY_PERMANENT_DOCUMENT_URL,
+  Template.JSON_PROPERTY_PUBLIC_SUBMISSIONS,
+  Template.JSON_PROPERTY_PUBLIC_WEB_FORM,
+  Template.JSON_PROPERTY_REDIRECT_URL,
+  Template.JSON_PROPERTY_SLACK_WEBHOOK_URL,
+  Template.JSON_PROPERTY_TEMPLATE_TYPE,
+  Template.JSON_PROPERTY_UPDATED_AT,
+  Template.JSON_PROPERTY_WEBHOOK_URL,
+  Template.JSON_PROPERTY_DEMO,
+  Template.JSON_PROPERTY_DEFAULTS,
+  Template.JSON_PROPERTY_FIELD_ORDER,
+  Template.JSON_PROPERTY_FIELDS,
+  Template.JSON_PROPERTY_FOOTER_HTML,
+  Template.JSON_PROPERTY_HEADER_HTML,
+  Template.JSON_PROPERTY_HTML_ENGINE_OPTIONS,
+  Template.JSON_PROPERTY_HTML,
+  Template.JSON_PROPERTY_PREDEFINED_FIELDS,
+  Template.JSON_PROPERTY_SCSS,
+  Template.JSON_PROPERTY_SHARED_FIELD_DATA
+})
+@JsonTypeName("template")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class Template {
+  public static final String JSON_PROPERTY_ADD_DATA_REQUEST_SUBMISSION_ID_FOOTERS = "add_data_request_submission_id_footers";
+  @javax.annotation.Nonnull
+  private Boolean addDataRequestSubmissionIdFooters;
+
+  public static final String JSON_PROPERTY_ALLOW_ADDITIONAL_PROPERTIES = "allow_additional_properties";
+  @javax.annotation.Nonnull
+  private Boolean allowAdditionalProperties;
+
+  public static final String JSON_PROPERTY_DESCRIPTION = "description";
+  @javax.annotation.Nullable
+  private String description;
+
+  public static final String JSON_PROPERTY_DOCUMENT_FILENAME = "document_filename";
+  @javax.annotation.Nullable
+  private String documentFilename;
+
+  public static final String JSON_PROPERTY_DOCUMENT_MD5 = "document_md5";
+  @javax.annotation.Nullable
+  private String documentMd5;
+
+  public static final String JSON_PROPERTY_DOCUMENT_PARSE_ERROR = "document_parse_error";
+  @javax.annotation.Nonnull
+  private Boolean documentParseError;
+
+  public static final String JSON_PROPERTY_DOCUMENT_PROCESSED = "document_processed";
+  @javax.annotation.Nonnull
+  private Boolean documentProcessed;
+
+  /**
+   * Gets or Sets documentState
+   */
+  public enum DocumentStateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    PASSWORD_REQUIRED(String.valueOf("password_required")),
+    
+    MALFORMED_PDF(String.valueOf("malformed_pdf")),
+    
+    UNKNOWN_ERROR(String.valueOf("unknown_error"));
+
+    private String value;
+
+    DocumentStateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static DocumentStateEnum fromValue(String value) {
+      for (DocumentStateEnum b : DocumentStateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_DOCUMENT_STATE = "document_state";
+  @javax.annotation.Nonnull
+  private DocumentStateEnum documentState;
+
+  public static final String JSON_PROPERTY_DOCUMENT_URL = "document_url";
+  @javax.annotation.Nullable
+  private String documentUrl;
+
+  public static final String JSON_PROPERTY_EDITABLE_SUBMISSIONS = "editable_submissions";
+  @javax.annotation.Nonnull
+  private Boolean editableSubmissions;
+
+  public static final String JSON_PROPERTY_EMBED_DOMAINS = "embed_domains";
+  @javax.annotation.Nullable
+  private String embedDomains;
+
+  public static final String JSON_PROPERTY_ENCRYPT_PDFS_PASSWORD = "encrypt_pdfs_password";
+  @javax.annotation.Nullable
+  private String encryptPdfsPassword;
+
+  public static final String JSON_PROPERTY_ENCRYPT_PDFS = "encrypt_pdfs";
+  @javax.annotation.Nonnull
+  private Boolean encryptPdfs;
+
+  public static final String JSON_PROPERTY_EXPIRATION_INTERVAL = "expiration_interval";
+  @javax.annotation.Nonnull
+  private String expirationInterval;
+
+  public static final String JSON_PROPERTY_EXPIRE_AFTER = "expire_after";
+  @javax.annotation.Nonnull
+  private Integer expireAfter;
+
+  public static final String JSON_PROPERTY_EXPIRE_SUBMISSIONS = "expire_submissions";
+  @javax.annotation.Nonnull
+  private Boolean expireSubmissions;
+
+  public static final String JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_ID = "external_predefined_fields_template_id";
+  @javax.annotation.Nullable
+  private String externalPredefinedFieldsTemplateId;
+
+  public static final String JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_NAME = "external_predefined_fields_template_name";
+  @javax.annotation.Nullable
+  private String externalPredefinedFieldsTemplateName;
+
+  public static final String JSON_PROPERTY_FIRST_TEMPLATE = "first_template";
+  @javax.annotation.Nonnull
+  private Boolean firstTemplate;
+
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_LOCKED = "locked";
+  @javax.annotation.Nonnull
+  private Boolean locked;
+
+  public static final String JSON_PROPERTY_MERGE_AUDIT_TRAIL_PDF = "merge_audit_trail_pdf";
+  @javax.annotation.Nonnull
+  private Boolean mergeAuditTrailPdf;
+
+  public static final String JSON_PROPERTY_NAME = "name";
+  @javax.annotation.Nullable
+  private String name;
+
+  public static final String JSON_PROPERTY_PAGE_COUNT = "page_count";
+  @javax.annotation.Nonnull
+  private Integer pageCount;
+
+  public static final String JSON_PROPERTY_PAGE_DIMENSIONS = "page_dimensions";
+  @javax.annotation.Nullable
+  private List<List<BigDecimal>> pageDimensions;
+
+  public static final String JSON_PROPERTY_PARENT_FOLDER_ID = "parent_folder_id";
+  @javax.annotation.Nullable
+  private String parentFolderId;
+
+  public static final String JSON_PROPERTY_PATH = "path";
+  @javax.annotation.Nullable
+  private String path;
+
+  public static final String JSON_PROPERTY_PERMANENT_DOCUMENT_URL = "permanent_document_url";
+  @javax.annotation.Nullable
+  private String permanentDocumentUrl;
+
+  public static final String JSON_PROPERTY_PUBLIC_SUBMISSIONS = "public_submissions";
+  @javax.annotation.Nonnull
+  private Boolean publicSubmissions;
+
+  public static final String JSON_PROPERTY_PUBLIC_WEB_FORM = "public_web_form";
+  @javax.annotation.Nonnull
+  private Boolean publicWebForm;
+
+  public static final String JSON_PROPERTY_REDIRECT_URL = "redirect_url";
+  @javax.annotation.Nullable
+  private String redirectUrl;
+
+  public static final String JSON_PROPERTY_SLACK_WEBHOOK_URL = "slack_webhook_url";
+  @javax.annotation.Nullable
+  private String slackWebhookUrl;
+
+  /**
+   * Gets or Sets templateType
+   */
+  public enum TemplateTypeEnum {
+    PDF(String.valueOf("pdf")),
+    
+    HTML(String.valueOf("html"));
+
+    private String value;
+
+    TemplateTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static TemplateTypeEnum fromValue(String value) {
+      for (TemplateTypeEnum b : TemplateTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_TEMPLATE_TYPE = "template_type";
+  @javax.annotation.Nonnull
+  private TemplateTypeEnum templateType;
+
+  public static final String JSON_PROPERTY_UPDATED_AT = "updated_at";
+  @javax.annotation.Nullable
+  private String updatedAt;
+
+  public static final String JSON_PROPERTY_WEBHOOK_URL = "webhook_url";
+  @javax.annotation.Nullable
+  private String webhookUrl;
+
+  public static final String JSON_PROPERTY_DEMO = "demo";
+  @javax.annotation.Nonnull
+  private Boolean demo;
+
+  public static final String JSON_PROPERTY_DEFAULTS = "defaults";
+  @javax.annotation.Nonnull
+  private Object defaults;
+
+  public static final String JSON_PROPERTY_FIELD_ORDER = "field_order";
+  @javax.annotation.Nonnull
+  private List<List<BigDecimal>> fieldOrder = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_FIELDS = "fields";
+  @javax.annotation.Nonnull
+  private Object fields;
+
+  public static final String JSON_PROPERTY_FOOTER_HTML = "footer_html";
+  @javax.annotation.Nullable
+  private String footerHtml;
+
+  public static final String JSON_PROPERTY_HEADER_HTML = "header_html";
+  @javax.annotation.Nullable
+  private String headerHtml;
+
+  public static final String JSON_PROPERTY_HTML_ENGINE_OPTIONS = "html_engine_options";
+  @javax.annotation.Nonnull
+  private Object htmlEngineOptions;
+
+  public static final String JSON_PROPERTY_HTML = "html";
+  @javax.annotation.Nullable
+  private String html;
+
+  public static final String JSON_PROPERTY_PREDEFINED_FIELDS = "predefined_fields";
+  @javax.annotation.Nonnull
+  private List<Object> predefinedFields = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_SCSS = "scss";
+  @javax.annotation.Nullable
+  private String scss;
+
+  public static final String JSON_PROPERTY_SHARED_FIELD_DATA = "shared_field_data";
+  @javax.annotation.Nonnull
+  private Object sharedFieldData;
+
+  public Template() { 
+  }
+
+  public Template addDataRequestSubmissionIdFooters(@javax.annotation.Nonnull Boolean addDataRequestSubmissionIdFooters) {
+    this.addDataRequestSubmissionIdFooters = addDataRequestSubmissionIdFooters;
+    return this;
+  }
+
+  /**
+   * Get addDataRequestSubmissionIdFooters
+   * @return addDataRequestSubmissionIdFooters
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ADD_DATA_REQUEST_SUBMISSION_ID_FOOTERS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getAddDataRequestSubmissionIdFooters() {
+    return addDataRequestSubmissionIdFooters;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ADD_DATA_REQUEST_SUBMISSION_ID_FOOTERS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAddDataRequestSubmissionIdFooters(@javax.annotation.Nonnull Boolean addDataRequestSubmissionIdFooters) {
+    this.addDataRequestSubmissionIdFooters = addDataRequestSubmissionIdFooters;
+  }
+
+
+  public Template allowAdditionalProperties(@javax.annotation.Nonnull Boolean allowAdditionalProperties) {
+    this.allowAdditionalProperties = allowAdditionalProperties;
+    return this;
+  }
+
+  /**
+   * Get allowAdditionalProperties
+   * @return allowAdditionalProperties
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ALLOW_ADDITIONAL_PROPERTIES)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getAllowAdditionalProperties() {
+    return allowAdditionalProperties;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ALLOW_ADDITIONAL_PROPERTIES)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAllowAdditionalProperties(@javax.annotation.Nonnull Boolean allowAdditionalProperties) {
+    this.allowAdditionalProperties = allowAdditionalProperties;
+  }
+
+
+  public Template description(@javax.annotation.Nullable String description) {
+    this.description = description;
+    return this;
+  }
+
+  /**
+   * Get description
+   * @return description
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDescription() {
+    return description;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDescription(@javax.annotation.Nullable String description) {
+    this.description = description;
+  }
+
+
+  public Template documentFilename(@javax.annotation.Nullable String documentFilename) {
+    this.documentFilename = documentFilename;
+    return this;
+  }
+
+  /**
+   * Get documentFilename
+   * @return documentFilename
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_FILENAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDocumentFilename() {
+    return documentFilename;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_FILENAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentFilename(@javax.annotation.Nullable String documentFilename) {
+    this.documentFilename = documentFilename;
+  }
+
+
+  public Template documentMd5(@javax.annotation.Nullable String documentMd5) {
+    this.documentMd5 = documentMd5;
+    return this;
+  }
+
+  /**
+   * Get documentMd5
+   * @return documentMd5
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_MD5)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDocumentMd5() {
+    return documentMd5;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_MD5)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentMd5(@javax.annotation.Nullable String documentMd5) {
+    this.documentMd5 = documentMd5;
+  }
+
+
+  public Template documentParseError(@javax.annotation.Nonnull Boolean documentParseError) {
+    this.documentParseError = documentParseError;
+    return this;
+  }
+
+  /**
+   * Get documentParseError
+   * @return documentParseError
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_PARSE_ERROR)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getDocumentParseError() {
+    return documentParseError;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_PARSE_ERROR)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentParseError(@javax.annotation.Nonnull Boolean documentParseError) {
+    this.documentParseError = documentParseError;
+  }
+
+
+  public Template documentProcessed(@javax.annotation.Nonnull Boolean documentProcessed) {
+    this.documentProcessed = documentProcessed;
+    return this;
+  }
+
+  /**
+   * Get documentProcessed
+   * @return documentProcessed
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_PROCESSED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getDocumentProcessed() {
+    return documentProcessed;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_PROCESSED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentProcessed(@javax.annotation.Nonnull Boolean documentProcessed) {
+    this.documentProcessed = documentProcessed;
+  }
+
+
+  public Template documentState(@javax.annotation.Nonnull DocumentStateEnum documentState) {
+    this.documentState = documentState;
+    return this;
+  }
+
+  /**
+   * Get documentState
+   * @return documentState
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public DocumentStateEnum getDocumentState() {
+    return documentState;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentState(@javax.annotation.Nonnull DocumentStateEnum documentState) {
+    this.documentState = documentState;
+  }
+
+
+  public Template documentUrl(@javax.annotation.Nullable String documentUrl) {
+    this.documentUrl = documentUrl;
+    return this;
+  }
+
+  /**
+   * Get documentUrl
+   * @return documentUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDocumentUrl() {
+    return documentUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentUrl(@javax.annotation.Nullable String documentUrl) {
+    this.documentUrl = documentUrl;
+  }
+
+
+  public Template editableSubmissions(@javax.annotation.Nonnull Boolean editableSubmissions) {
+    this.editableSubmissions = editableSubmissions;
+    return this;
+  }
+
+  /**
+   * Get editableSubmissions
+   * @return editableSubmissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EDITABLE_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getEditableSubmissions() {
+    return editableSubmissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EDITABLE_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEditableSubmissions(@javax.annotation.Nonnull Boolean editableSubmissions) {
+    this.editableSubmissions = editableSubmissions;
+  }
+
+
+  public Template embedDomains(@javax.annotation.Nullable String embedDomains) {
+    this.embedDomains = embedDomains;
+    return this;
+  }
+
+  /**
+   * Get embedDomains
+   * @return embedDomains
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EMBED_DOMAINS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getEmbedDomains() {
+    return embedDomains;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EMBED_DOMAINS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEmbedDomains(@javax.annotation.Nullable String embedDomains) {
+    this.embedDomains = embedDomains;
+  }
+
+
+  public Template encryptPdfsPassword(@javax.annotation.Nullable String encryptPdfsPassword) {
+    this.encryptPdfsPassword = encryptPdfsPassword;
+    return this;
+  }
+
+  /**
+   * Get encryptPdfsPassword
+   * @return encryptPdfsPassword
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ENCRYPT_PDFS_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getEncryptPdfsPassword() {
+    return encryptPdfsPassword;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ENCRYPT_PDFS_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEncryptPdfsPassword(@javax.annotation.Nullable String encryptPdfsPassword) {
+    this.encryptPdfsPassword = encryptPdfsPassword;
+  }
+
+
+  public Template encryptPdfs(@javax.annotation.Nonnull Boolean encryptPdfs) {
+    this.encryptPdfs = encryptPdfs;
+    return this;
+  }
+
+  /**
+   * Get encryptPdfs
+   * @return encryptPdfs
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ENCRYPT_PDFS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getEncryptPdfs() {
+    return encryptPdfs;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ENCRYPT_PDFS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEncryptPdfs(@javax.annotation.Nonnull Boolean encryptPdfs) {
+    this.encryptPdfs = encryptPdfs;
+  }
+
+
+  public Template expirationInterval(@javax.annotation.Nonnull String expirationInterval) {
+    this.expirationInterval = expirationInterval;
+    return this;
+  }
+
+  /**
+   * Get expirationInterval
+   * @return expirationInterval
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRATION_INTERVAL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExpirationInterval() {
+    return expirationInterval;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRATION_INTERVAL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpirationInterval(@javax.annotation.Nonnull String expirationInterval) {
+    this.expirationInterval = expirationInterval;
+  }
+
+
+  public Template expireAfter(@javax.annotation.Nonnull Integer expireAfter) {
+    this.expireAfter = expireAfter;
+    return this;
+  }
+
+  /**
+   * Get expireAfter
+   * @return expireAfter
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRE_AFTER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getExpireAfter() {
+    return expireAfter;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRE_AFTER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpireAfter(@javax.annotation.Nonnull Integer expireAfter) {
+    this.expireAfter = expireAfter;
+  }
+
+
+  public Template expireSubmissions(@javax.annotation.Nonnull Boolean expireSubmissions) {
+    this.expireSubmissions = expireSubmissions;
+    return this;
+  }
+
+  /**
+   * Get expireSubmissions
+   * @return expireSubmissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRE_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getExpireSubmissions() {
+    return expireSubmissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRE_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpireSubmissions(@javax.annotation.Nonnull Boolean expireSubmissions) {
+    this.expireSubmissions = expireSubmissions;
+  }
+
+
+  public Template externalPredefinedFieldsTemplateId(@javax.annotation.Nullable String externalPredefinedFieldsTemplateId) {
+    this.externalPredefinedFieldsTemplateId = externalPredefinedFieldsTemplateId;
+    return this;
+  }
+
+  /**
+   * Get externalPredefinedFieldsTemplateId
+   * @return externalPredefinedFieldsTemplateId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExternalPredefinedFieldsTemplateId() {
+    return externalPredefinedFieldsTemplateId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExternalPredefinedFieldsTemplateId(@javax.annotation.Nullable String externalPredefinedFieldsTemplateId) {
+    this.externalPredefinedFieldsTemplateId = externalPredefinedFieldsTemplateId;
+  }
+
+
+  public Template externalPredefinedFieldsTemplateName(@javax.annotation.Nullable String externalPredefinedFieldsTemplateName) {
+    this.externalPredefinedFieldsTemplateName = externalPredefinedFieldsTemplateName;
+    return this;
+  }
+
+  /**
+   * Get externalPredefinedFieldsTemplateName
+   * @return externalPredefinedFieldsTemplateName
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExternalPredefinedFieldsTemplateName() {
+    return externalPredefinedFieldsTemplateName;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExternalPredefinedFieldsTemplateName(@javax.annotation.Nullable String externalPredefinedFieldsTemplateName) {
+    this.externalPredefinedFieldsTemplateName = externalPredefinedFieldsTemplateName;
+  }
+
+
+  public Template firstTemplate(@javax.annotation.Nonnull Boolean firstTemplate) {
+    this.firstTemplate = firstTemplate;
+    return this;
+  }
+
+  /**
+   * Get firstTemplate
+   * @return firstTemplate
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_FIRST_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getFirstTemplate() {
+    return firstTemplate;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIRST_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFirstTemplate(@javax.annotation.Nonnull Boolean firstTemplate) {
+    this.firstTemplate = firstTemplate;
+  }
+
+
+  public Template id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public Template locked(@javax.annotation.Nonnull Boolean locked) {
+    this.locked = locked;
+    return this;
+  }
+
+  /**
+   * Get locked
+   * @return locked
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_LOCKED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getLocked() {
+    return locked;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LOCKED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLocked(@javax.annotation.Nonnull Boolean locked) {
+    this.locked = locked;
+  }
+
+
+  public Template mergeAuditTrailPdf(@javax.annotation.Nonnull Boolean mergeAuditTrailPdf) {
+    this.mergeAuditTrailPdf = mergeAuditTrailPdf;
+    return this;
+  }
+
+  /**
+   * Get mergeAuditTrailPdf
+   * @return mergeAuditTrailPdf
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_MERGE_AUDIT_TRAIL_PDF)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getMergeAuditTrailPdf() {
+    return mergeAuditTrailPdf;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_MERGE_AUDIT_TRAIL_PDF)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMergeAuditTrailPdf(@javax.annotation.Nonnull Boolean mergeAuditTrailPdf) {
+    this.mergeAuditTrailPdf = mergeAuditTrailPdf;
+  }
+
+
+  public Template name(@javax.annotation.Nullable String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getName() {
+    return name;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setName(@javax.annotation.Nullable String name) {
+    this.name = name;
+  }
+
+
+  public Template pageCount(@javax.annotation.Nonnull Integer pageCount) {
+    this.pageCount = pageCount;
+    return this;
+  }
+
+  /**
+   * Get pageCount
+   * @return pageCount
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PAGE_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getPageCount() {
+    return pageCount;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PAGE_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPageCount(@javax.annotation.Nonnull Integer pageCount) {
+    this.pageCount = pageCount;
+  }
+
+
+  public Template pageDimensions(@javax.annotation.Nullable List<List<BigDecimal>> pageDimensions) {
+    this.pageDimensions = pageDimensions;
+    return this;
+  }
+
+  public Template addPageDimensionsItem(List<BigDecimal> pageDimensionsItem) {
+    if (this.pageDimensions == null) {
+      this.pageDimensions = new ArrayList<>();
+    }
+    this.pageDimensions.add(pageDimensionsItem);
+    return this;
+  }
+
+  /**
+   * Get pageDimensions
+   * @return pageDimensions
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PAGE_DIMENSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<List<BigDecimal>> getPageDimensions() {
+    return pageDimensions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PAGE_DIMENSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPageDimensions(@javax.annotation.Nullable List<List<BigDecimal>> pageDimensions) {
+    this.pageDimensions = pageDimensions;
+  }
+
+
+  public Template parentFolderId(@javax.annotation.Nullable String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+    return this;
+  }
+
+  /**
+   * Get parentFolderId
+   * @return parentFolderId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getParentFolderId() {
+    return parentFolderId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setParentFolderId(@javax.annotation.Nullable String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+  }
+
+
+  public Template path(@javax.annotation.Nullable String path) {
+    this.path = path;
+    return this;
+  }
+
+  /**
+   * Get path
+   * @return path
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PATH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPath() {
+    return path;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PATH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPath(@javax.annotation.Nullable String path) {
+    this.path = path;
+  }
+
+
+  public Template permanentDocumentUrl(@javax.annotation.Nullable String permanentDocumentUrl) {
+    this.permanentDocumentUrl = permanentDocumentUrl;
+    return this;
+  }
+
+  /**
+   * Get permanentDocumentUrl
+   * @return permanentDocumentUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PERMANENT_DOCUMENT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPermanentDocumentUrl() {
+    return permanentDocumentUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PERMANENT_DOCUMENT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPermanentDocumentUrl(@javax.annotation.Nullable String permanentDocumentUrl) {
+    this.permanentDocumentUrl = permanentDocumentUrl;
+  }
+
+
+  public Template publicSubmissions(@javax.annotation.Nonnull Boolean publicSubmissions) {
+    this.publicSubmissions = publicSubmissions;
+    return this;
+  }
+
+  /**
+   * Get publicSubmissions
+   * @return publicSubmissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PUBLIC_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getPublicSubmissions() {
+    return publicSubmissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PUBLIC_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPublicSubmissions(@javax.annotation.Nonnull Boolean publicSubmissions) {
+    this.publicSubmissions = publicSubmissions;
+  }
+
+
+  public Template publicWebForm(@javax.annotation.Nonnull Boolean publicWebForm) {
+    this.publicWebForm = publicWebForm;
+    return this;
+  }
+
+  /**
+   * Get publicWebForm
+   * @return publicWebForm
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PUBLIC_WEB_FORM)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getPublicWebForm() {
+    return publicWebForm;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PUBLIC_WEB_FORM)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPublicWebForm(@javax.annotation.Nonnull Boolean publicWebForm) {
+    this.publicWebForm = publicWebForm;
+  }
+
+
+  public Template redirectUrl(@javax.annotation.Nullable String redirectUrl) {
+    this.redirectUrl = redirectUrl;
+    return this;
+  }
+
+  /**
+   * Get redirectUrl
+   * @return redirectUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_REDIRECT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getRedirectUrl() {
+    return redirectUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_REDIRECT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setRedirectUrl(@javax.annotation.Nullable String redirectUrl) {
+    this.redirectUrl = redirectUrl;
+  }
+
+
+  public Template slackWebhookUrl(@javax.annotation.Nullable String slackWebhookUrl) {
+    this.slackWebhookUrl = slackWebhookUrl;
+    return this;
+  }
+
+  /**
+   * Get slackWebhookUrl
+   * @return slackWebhookUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_SLACK_WEBHOOK_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getSlackWebhookUrl() {
+    return slackWebhookUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SLACK_WEBHOOK_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSlackWebhookUrl(@javax.annotation.Nullable String slackWebhookUrl) {
+    this.slackWebhookUrl = slackWebhookUrl;
+  }
+
+
+  public Template templateType(@javax.annotation.Nonnull TemplateTypeEnum templateType) {
+    this.templateType = templateType;
+    return this;
+  }
+
+  /**
+   * Get templateType
+   * @return templateType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public TemplateTypeEnum getTemplateType() {
+    return templateType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplateType(@javax.annotation.Nonnull TemplateTypeEnum templateType) {
+    this.templateType = templateType;
+  }
+
+
+  public Template updatedAt(@javax.annotation.Nullable String updatedAt) {
+    this.updatedAt = updatedAt;
+    return this;
+  }
+
+  /**
+   * Get updatedAt
+   * @return updatedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_UPDATED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getUpdatedAt() {
+    return updatedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_UPDATED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setUpdatedAt(@javax.annotation.Nullable String updatedAt) {
+    this.updatedAt = updatedAt;
+  }
+
+
+  public Template webhookUrl(@javax.annotation.Nullable String webhookUrl) {
+    this.webhookUrl = webhookUrl;
+    return this;
+  }
+
+  /**
+   * Get webhookUrl
+   * @return webhookUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_WEBHOOK_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getWebhookUrl() {
+    return webhookUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_WEBHOOK_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setWebhookUrl(@javax.annotation.Nullable String webhookUrl) {
+    this.webhookUrl = webhookUrl;
+  }
+
+
+  public Template demo(@javax.annotation.Nonnull Boolean demo) {
+    this.demo = demo;
+    return this;
+  }
+
+  /**
+   * Get demo
+   * @return demo
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DEMO)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getDemo() {
+    return demo;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DEMO)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDemo(@javax.annotation.Nonnull Boolean demo) {
+    this.demo = demo;
+  }
+
+
+  public Template defaults(@javax.annotation.Nonnull Object defaults) {
+    this.defaults = defaults;
+    return this;
+  }
+
+  /**
+   * Get defaults
+   * @return defaults
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DEFAULTS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getDefaults() {
+    return defaults;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DEFAULTS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDefaults(@javax.annotation.Nonnull Object defaults) {
+    this.defaults = defaults;
+  }
+
+
+  public Template fieldOrder(@javax.annotation.Nonnull List<List<BigDecimal>> fieldOrder) {
+    this.fieldOrder = fieldOrder;
+    return this;
+  }
+
+  public Template addFieldOrderItem(List<BigDecimal> fieldOrderItem) {
+    if (this.fieldOrder == null) {
+      this.fieldOrder = new ArrayList<>();
+    }
+    this.fieldOrder.add(fieldOrderItem);
+    return this;
+  }
+
+  /**
+   * Get fieldOrder
+   * @return fieldOrder
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_FIELD_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<List<BigDecimal>> getFieldOrder() {
+    return fieldOrder;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELD_ORDER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFieldOrder(@javax.annotation.Nonnull List<List<BigDecimal>> fieldOrder) {
+    this.fieldOrder = fieldOrder;
+  }
+
+
+  public Template fields(@javax.annotation.Nonnull Object fields) {
+    this.fields = fields;
+    return this;
+  }
+
+  /**
+   * Get fields
+   * @return fields
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getFields() {
+    return fields;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFields(@javax.annotation.Nonnull Object fields) {
+    this.fields = fields;
+  }
+
+
+  public Template footerHtml(@javax.annotation.Nullable String footerHtml) {
+    this.footerHtml = footerHtml;
+    return this;
+  }
+
+  /**
+   * Get footerHtml
+   * @return footerHtml
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_FOOTER_HTML)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getFooterHtml() {
+    return footerHtml;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FOOTER_HTML)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFooterHtml(@javax.annotation.Nullable String footerHtml) {
+    this.footerHtml = footerHtml;
+  }
+
+
+  public Template headerHtml(@javax.annotation.Nullable String headerHtml) {
+    this.headerHtml = headerHtml;
+    return this;
+  }
+
+  /**
+   * Get headerHtml
+   * @return headerHtml
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_HEADER_HTML)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getHeaderHtml() {
+    return headerHtml;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_HEADER_HTML)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setHeaderHtml(@javax.annotation.Nullable String headerHtml) {
+    this.headerHtml = headerHtml;
+  }
+
+
+  public Template htmlEngineOptions(@javax.annotation.Nonnull Object htmlEngineOptions) {
+    this.htmlEngineOptions = htmlEngineOptions;
+    return this;
+  }
+
+  /**
+   * Get htmlEngineOptions
+   * @return htmlEngineOptions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_HTML_ENGINE_OPTIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getHtmlEngineOptions() {
+    return htmlEngineOptions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_HTML_ENGINE_OPTIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setHtmlEngineOptions(@javax.annotation.Nonnull Object htmlEngineOptions) {
+    this.htmlEngineOptions = htmlEngineOptions;
+  }
+
+
+  public Template html(@javax.annotation.Nullable String html) {
+    this.html = html;
+    return this;
+  }
+
+  /**
+   * Get html
+   * @return html
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_HTML)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getHtml() {
+    return html;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_HTML)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setHtml(@javax.annotation.Nullable String html) {
+    this.html = html;
+  }
+
+
+  public Template predefinedFields(@javax.annotation.Nonnull List<Object> predefinedFields) {
+    this.predefinedFields = predefinedFields;
+    return this;
+  }
+
+  public Template addPredefinedFieldsItem(Object predefinedFieldsItem) {
+    if (this.predefinedFields == null) {
+      this.predefinedFields = new ArrayList<>();
+    }
+    this.predefinedFields.add(predefinedFieldsItem);
+    return this;
+  }
+
+  /**
+   * Get predefinedFields
+   * @return predefinedFields
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PREDEFINED_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<Object> getPredefinedFields() {
+    return predefinedFields;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PREDEFINED_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPredefinedFields(@javax.annotation.Nonnull List<Object> predefinedFields) {
+    this.predefinedFields = predefinedFields;
+  }
+
+
+  public Template scss(@javax.annotation.Nullable String scss) {
+    this.scss = scss;
+    return this;
+  }
+
+  /**
+   * Get scss
+   * @return scss
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_SCSS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getScss() {
+    return scss;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SCSS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setScss(@javax.annotation.Nullable String scss) {
+    this.scss = scss;
+  }
+
+
+  public Template sharedFieldData(@javax.annotation.Nonnull Object sharedFieldData) {
+    this.sharedFieldData = sharedFieldData;
+    return this;
+  }
+
+  /**
+   * Get sharedFieldData
+   * @return sharedFieldData
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_SHARED_FIELD_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getSharedFieldData() {
+    return sharedFieldData;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SHARED_FIELD_DATA)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSharedFieldData(@javax.annotation.Nonnull Object sharedFieldData) {
+    this.sharedFieldData = sharedFieldData;
+  }
+
+
+  /**
+   * Return true if this template object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    Template template = (Template) o;
+    return Objects.equals(this.addDataRequestSubmissionIdFooters, template.addDataRequestSubmissionIdFooters) &&
+        Objects.equals(this.allowAdditionalProperties, template.allowAdditionalProperties) &&
+        Objects.equals(this.description, template.description) &&
+        Objects.equals(this.documentFilename, template.documentFilename) &&
+        Objects.equals(this.documentMd5, template.documentMd5) &&
+        Objects.equals(this.documentParseError, template.documentParseError) &&
+        Objects.equals(this.documentProcessed, template.documentProcessed) &&
+        Objects.equals(this.documentState, template.documentState) &&
+        Objects.equals(this.documentUrl, template.documentUrl) &&
+        Objects.equals(this.editableSubmissions, template.editableSubmissions) &&
+        Objects.equals(this.embedDomains, template.embedDomains) &&
+        Objects.equals(this.encryptPdfsPassword, template.encryptPdfsPassword) &&
+        Objects.equals(this.encryptPdfs, template.encryptPdfs) &&
+        Objects.equals(this.expirationInterval, template.expirationInterval) &&
+        Objects.equals(this.expireAfter, template.expireAfter) &&
+        Objects.equals(this.expireSubmissions, template.expireSubmissions) &&
+        Objects.equals(this.externalPredefinedFieldsTemplateId, template.externalPredefinedFieldsTemplateId) &&
+        Objects.equals(this.externalPredefinedFieldsTemplateName, template.externalPredefinedFieldsTemplateName) &&
+        Objects.equals(this.firstTemplate, template.firstTemplate) &&
+        Objects.equals(this.id, template.id) &&
+        Objects.equals(this.locked, template.locked) &&
+        Objects.equals(this.mergeAuditTrailPdf, template.mergeAuditTrailPdf) &&
+        Objects.equals(this.name, template.name) &&
+        Objects.equals(this.pageCount, template.pageCount) &&
+        Objects.equals(this.pageDimensions, template.pageDimensions) &&
+        Objects.equals(this.parentFolderId, template.parentFolderId) &&
+        Objects.equals(this.path, template.path) &&
+        Objects.equals(this.permanentDocumentUrl, template.permanentDocumentUrl) &&
+        Objects.equals(this.publicSubmissions, template.publicSubmissions) &&
+        Objects.equals(this.publicWebForm, template.publicWebForm) &&
+        Objects.equals(this.redirectUrl, template.redirectUrl) &&
+        Objects.equals(this.slackWebhookUrl, template.slackWebhookUrl) &&
+        Objects.equals(this.templateType, template.templateType) &&
+        Objects.equals(this.updatedAt, template.updatedAt) &&
+        Objects.equals(this.webhookUrl, template.webhookUrl) &&
+        Objects.equals(this.demo, template.demo) &&
+        Objects.equals(this.defaults, template.defaults) &&
+        Objects.equals(this.fieldOrder, template.fieldOrder) &&
+        Objects.equals(this.fields, template.fields) &&
+        Objects.equals(this.footerHtml, template.footerHtml) &&
+        Objects.equals(this.headerHtml, template.headerHtml) &&
+        Objects.equals(this.htmlEngineOptions, template.htmlEngineOptions) &&
+        Objects.equals(this.html, template.html) &&
+        Objects.equals(this.predefinedFields, template.predefinedFields) &&
+        Objects.equals(this.scss, template.scss) &&
+        Objects.equals(this.sharedFieldData, template.sharedFieldData);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(addDataRequestSubmissionIdFooters, allowAdditionalProperties, description, documentFilename, documentMd5, documentParseError, documentProcessed, documentState, documentUrl, editableSubmissions, embedDomains, encryptPdfsPassword, encryptPdfs, expirationInterval, expireAfter, expireSubmissions, externalPredefinedFieldsTemplateId, externalPredefinedFieldsTemplateName, firstTemplate, id, locked, mergeAuditTrailPdf, name, pageCount, pageDimensions, parentFolderId, path, permanentDocumentUrl, publicSubmissions, publicWebForm, redirectUrl, slackWebhookUrl, templateType, updatedAt, webhookUrl, demo, defaults, fieldOrder, fields, footerHtml, headerHtml, htmlEngineOptions, html, predefinedFields, scss, sharedFieldData);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class Template {\n");
+    sb.append("    addDataRequestSubmissionIdFooters: ").append(toIndentedString(addDataRequestSubmissionIdFooters)).append("\n");
+    sb.append("    allowAdditionalProperties: ").append(toIndentedString(allowAdditionalProperties)).append("\n");
+    sb.append("    description: ").append(toIndentedString(description)).append("\n");
+    sb.append("    documentFilename: ").append(toIndentedString(documentFilename)).append("\n");
+    sb.append("    documentMd5: ").append(toIndentedString(documentMd5)).append("\n");
+    sb.append("    documentParseError: ").append(toIndentedString(documentParseError)).append("\n");
+    sb.append("    documentProcessed: ").append(toIndentedString(documentProcessed)).append("\n");
+    sb.append("    documentState: ").append(toIndentedString(documentState)).append("\n");
+    sb.append("    documentUrl: ").append(toIndentedString(documentUrl)).append("\n");
+    sb.append("    editableSubmissions: ").append(toIndentedString(editableSubmissions)).append("\n");
+    sb.append("    embedDomains: ").append(toIndentedString(embedDomains)).append("\n");
+    sb.append("    encryptPdfsPassword: ").append(toIndentedString(encryptPdfsPassword)).append("\n");
+    sb.append("    encryptPdfs: ").append(toIndentedString(encryptPdfs)).append("\n");
+    sb.append("    expirationInterval: ").append(toIndentedString(expirationInterval)).append("\n");
+    sb.append("    expireAfter: ").append(toIndentedString(expireAfter)).append("\n");
+    sb.append("    expireSubmissions: ").append(toIndentedString(expireSubmissions)).append("\n");
+    sb.append("    externalPredefinedFieldsTemplateId: ").append(toIndentedString(externalPredefinedFieldsTemplateId)).append("\n");
+    sb.append("    externalPredefinedFieldsTemplateName: ").append(toIndentedString(externalPredefinedFieldsTemplateName)).append("\n");
+    sb.append("    firstTemplate: ").append(toIndentedString(firstTemplate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    locked: ").append(toIndentedString(locked)).append("\n");
+    sb.append("    mergeAuditTrailPdf: ").append(toIndentedString(mergeAuditTrailPdf)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    pageCount: ").append(toIndentedString(pageCount)).append("\n");
+    sb.append("    pageDimensions: ").append(toIndentedString(pageDimensions)).append("\n");
+    sb.append("    parentFolderId: ").append(toIndentedString(parentFolderId)).append("\n");
+    sb.append("    path: ").append(toIndentedString(path)).append("\n");
+    sb.append("    permanentDocumentUrl: ").append(toIndentedString(permanentDocumentUrl)).append("\n");
+    sb.append("    publicSubmissions: ").append(toIndentedString(publicSubmissions)).append("\n");
+    sb.append("    publicWebForm: ").append(toIndentedString(publicWebForm)).append("\n");
+    sb.append("    redirectUrl: ").append(toIndentedString(redirectUrl)).append("\n");
+    sb.append("    slackWebhookUrl: ").append(toIndentedString(slackWebhookUrl)).append("\n");
+    sb.append("    templateType: ").append(toIndentedString(templateType)).append("\n");
+    sb.append("    updatedAt: ").append(toIndentedString(updatedAt)).append("\n");
+    sb.append("    webhookUrl: ").append(toIndentedString(webhookUrl)).append("\n");
+    sb.append("    demo: ").append(toIndentedString(demo)).append("\n");
+    sb.append("    defaults: ").append(toIndentedString(defaults)).append("\n");
+    sb.append("    fieldOrder: ").append(toIndentedString(fieldOrder)).append("\n");
+    sb.append("    fields: ").append(toIndentedString(fields)).append("\n");
+    sb.append("    footerHtml: ").append(toIndentedString(footerHtml)).append("\n");
+    sb.append("    headerHtml: ").append(toIndentedString(headerHtml)).append("\n");
+    sb.append("    htmlEngineOptions: ").append(toIndentedString(htmlEngineOptions)).append("\n");
+    sb.append("    html: ").append(toIndentedString(html)).append("\n");
+    sb.append("    predefinedFields: ").append(toIndentedString(predefinedFields)).append("\n");
+    sb.append("    scss: ").append(toIndentedString(scss)).append("\n");
+    sb.append("    sharedFieldData: ").append(toIndentedString(sharedFieldData)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/TemplateAddFieldsResponse.java b/src/main/java/com/docspring/TemplateAddFieldsResponse.java
new file mode 100644
index 0000000..063d5e7
--- /dev/null
+++ b/src/main/java/com/docspring/TemplateAddFieldsResponse.java
@@ -0,0 +1,228 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * TemplateAddFieldsResponse
+ */
+@JsonPropertyOrder({
+  TemplateAddFieldsResponse.JSON_PROPERTY_STATUS,
+  TemplateAddFieldsResponse.JSON_PROPERTY_ERRORS,
+  TemplateAddFieldsResponse.JSON_PROPERTY_NEW_FIELD_IDS
+})
+@JsonTypeName("template_add_fields_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class TemplateAddFieldsResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_NEW_FIELD_IDS = "new_field_ids";
+  @javax.annotation.Nullable
+  private List<Integer> newFieldIds = new ArrayList<>();
+
+  public TemplateAddFieldsResponse() { 
+  }
+
+  public TemplateAddFieldsResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public TemplateAddFieldsResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public TemplateAddFieldsResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  public TemplateAddFieldsResponse newFieldIds(@javax.annotation.Nullable List<Integer> newFieldIds) {
+    this.newFieldIds = newFieldIds;
+    return this;
+  }
+
+  public TemplateAddFieldsResponse addNewFieldIdsItem(Integer newFieldIdsItem) {
+    if (this.newFieldIds == null) {
+      this.newFieldIds = new ArrayList<>();
+    }
+    this.newFieldIds.add(newFieldIdsItem);
+    return this;
+  }
+
+  /**
+   * Get newFieldIds
+   * @return newFieldIds
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_NEW_FIELD_IDS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<Integer> getNewFieldIds() {
+    return newFieldIds;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NEW_FIELD_IDS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setNewFieldIds(@javax.annotation.Nullable List<Integer> newFieldIds) {
+    this.newFieldIds = newFieldIds;
+  }
+
+
+  /**
+   * Return true if this template_add_fields_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TemplateAddFieldsResponse templateAddFieldsResponse = (TemplateAddFieldsResponse) o;
+    return Objects.equals(this.status, templateAddFieldsResponse.status) &&
+        Objects.equals(this.errors, templateAddFieldsResponse.errors) &&
+        Objects.equals(this.newFieldIds, templateAddFieldsResponse.newFieldIds);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, errors, newFieldIds);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TemplateAddFieldsResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("    newFieldIds: ").append(toIndentedString(newFieldIds)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/TemplatePreview.java b/src/main/java/com/docspring/TemplatePreview.java
new file mode 100644
index 0000000..23cff09
--- /dev/null
+++ b/src/main/java/com/docspring/TemplatePreview.java
@@ -0,0 +1,1318 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * TemplatePreview
+ */
+@JsonPropertyOrder({
+  TemplatePreview.JSON_PROPERTY_ADD_DATA_REQUEST_SUBMISSION_ID_FOOTERS,
+  TemplatePreview.JSON_PROPERTY_ALLOW_ADDITIONAL_PROPERTIES,
+  TemplatePreview.JSON_PROPERTY_DESCRIPTION,
+  TemplatePreview.JSON_PROPERTY_DOCUMENT_FILENAME,
+  TemplatePreview.JSON_PROPERTY_DOCUMENT_MD5,
+  TemplatePreview.JSON_PROPERTY_DOCUMENT_PARSE_ERROR,
+  TemplatePreview.JSON_PROPERTY_DOCUMENT_PROCESSED,
+  TemplatePreview.JSON_PROPERTY_DOCUMENT_STATE,
+  TemplatePreview.JSON_PROPERTY_DOCUMENT_URL,
+  TemplatePreview.JSON_PROPERTY_EDITABLE_SUBMISSIONS,
+  TemplatePreview.JSON_PROPERTY_EMBED_DOMAINS,
+  TemplatePreview.JSON_PROPERTY_ENCRYPT_PDFS_PASSWORD,
+  TemplatePreview.JSON_PROPERTY_ENCRYPT_PDFS,
+  TemplatePreview.JSON_PROPERTY_EXPIRATION_INTERVAL,
+  TemplatePreview.JSON_PROPERTY_EXPIRE_AFTER,
+  TemplatePreview.JSON_PROPERTY_EXPIRE_SUBMISSIONS,
+  TemplatePreview.JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_ID,
+  TemplatePreview.JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_NAME,
+  TemplatePreview.JSON_PROPERTY_FIRST_TEMPLATE,
+  TemplatePreview.JSON_PROPERTY_ID,
+  TemplatePreview.JSON_PROPERTY_LOCKED,
+  TemplatePreview.JSON_PROPERTY_MERGE_AUDIT_TRAIL_PDF,
+  TemplatePreview.JSON_PROPERTY_NAME,
+  TemplatePreview.JSON_PROPERTY_PAGE_COUNT,
+  TemplatePreview.JSON_PROPERTY_PAGE_DIMENSIONS,
+  TemplatePreview.JSON_PROPERTY_PARENT_FOLDER_ID,
+  TemplatePreview.JSON_PROPERTY_PATH,
+  TemplatePreview.JSON_PROPERTY_PERMANENT_DOCUMENT_URL,
+  TemplatePreview.JSON_PROPERTY_PUBLIC_SUBMISSIONS,
+  TemplatePreview.JSON_PROPERTY_PUBLIC_WEB_FORM,
+  TemplatePreview.JSON_PROPERTY_REDIRECT_URL,
+  TemplatePreview.JSON_PROPERTY_SLACK_WEBHOOK_URL,
+  TemplatePreview.JSON_PROPERTY_TEMPLATE_TYPE,
+  TemplatePreview.JSON_PROPERTY_UPDATED_AT,
+  TemplatePreview.JSON_PROPERTY_WEBHOOK_URL,
+  TemplatePreview.JSON_PROPERTY_DEMO
+})
+@JsonTypeName("template_preview")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class TemplatePreview {
+  public static final String JSON_PROPERTY_ADD_DATA_REQUEST_SUBMISSION_ID_FOOTERS = "add_data_request_submission_id_footers";
+  @javax.annotation.Nonnull
+  private Boolean addDataRequestSubmissionIdFooters;
+
+  public static final String JSON_PROPERTY_ALLOW_ADDITIONAL_PROPERTIES = "allow_additional_properties";
+  @javax.annotation.Nonnull
+  private Boolean allowAdditionalProperties;
+
+  public static final String JSON_PROPERTY_DESCRIPTION = "description";
+  @javax.annotation.Nullable
+  private String description;
+
+  public static final String JSON_PROPERTY_DOCUMENT_FILENAME = "document_filename";
+  @javax.annotation.Nullable
+  private String documentFilename;
+
+  public static final String JSON_PROPERTY_DOCUMENT_MD5 = "document_md5";
+  @javax.annotation.Nullable
+  private String documentMd5;
+
+  public static final String JSON_PROPERTY_DOCUMENT_PARSE_ERROR = "document_parse_error";
+  @javax.annotation.Nonnull
+  private Boolean documentParseError;
+
+  public static final String JSON_PROPERTY_DOCUMENT_PROCESSED = "document_processed";
+  @javax.annotation.Nonnull
+  private Boolean documentProcessed;
+
+  /**
+   * Gets or Sets documentState
+   */
+  public enum DocumentStateEnum {
+    PENDING(String.valueOf("pending")),
+    
+    PROCESSED(String.valueOf("processed")),
+    
+    PASSWORD_REQUIRED(String.valueOf("password_required")),
+    
+    MALFORMED_PDF(String.valueOf("malformed_pdf")),
+    
+    UNKNOWN_ERROR(String.valueOf("unknown_error"));
+
+    private String value;
+
+    DocumentStateEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static DocumentStateEnum fromValue(String value) {
+      for (DocumentStateEnum b : DocumentStateEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_DOCUMENT_STATE = "document_state";
+  @javax.annotation.Nonnull
+  private DocumentStateEnum documentState;
+
+  public static final String JSON_PROPERTY_DOCUMENT_URL = "document_url";
+  @javax.annotation.Nullable
+  private String documentUrl;
+
+  public static final String JSON_PROPERTY_EDITABLE_SUBMISSIONS = "editable_submissions";
+  @javax.annotation.Nonnull
+  private Boolean editableSubmissions;
+
+  public static final String JSON_PROPERTY_EMBED_DOMAINS = "embed_domains";
+  @javax.annotation.Nullable
+  private String embedDomains;
+
+  public static final String JSON_PROPERTY_ENCRYPT_PDFS_PASSWORD = "encrypt_pdfs_password";
+  @javax.annotation.Nullable
+  private String encryptPdfsPassword;
+
+  public static final String JSON_PROPERTY_ENCRYPT_PDFS = "encrypt_pdfs";
+  @javax.annotation.Nonnull
+  private Boolean encryptPdfs;
+
+  public static final String JSON_PROPERTY_EXPIRATION_INTERVAL = "expiration_interval";
+  @javax.annotation.Nonnull
+  private String expirationInterval;
+
+  public static final String JSON_PROPERTY_EXPIRE_AFTER = "expire_after";
+  @javax.annotation.Nonnull
+  private Integer expireAfter;
+
+  public static final String JSON_PROPERTY_EXPIRE_SUBMISSIONS = "expire_submissions";
+  @javax.annotation.Nonnull
+  private Boolean expireSubmissions;
+
+  public static final String JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_ID = "external_predefined_fields_template_id";
+  @javax.annotation.Nullable
+  private String externalPredefinedFieldsTemplateId;
+
+  public static final String JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_NAME = "external_predefined_fields_template_name";
+  @javax.annotation.Nullable
+  private String externalPredefinedFieldsTemplateName;
+
+  public static final String JSON_PROPERTY_FIRST_TEMPLATE = "first_template";
+  @javax.annotation.Nonnull
+  private Boolean firstTemplate;
+
+  public static final String JSON_PROPERTY_ID = "id";
+  @javax.annotation.Nullable
+  private String id;
+
+  public static final String JSON_PROPERTY_LOCKED = "locked";
+  @javax.annotation.Nonnull
+  private Boolean locked;
+
+  public static final String JSON_PROPERTY_MERGE_AUDIT_TRAIL_PDF = "merge_audit_trail_pdf";
+  @javax.annotation.Nonnull
+  private Boolean mergeAuditTrailPdf;
+
+  public static final String JSON_PROPERTY_NAME = "name";
+  @javax.annotation.Nullable
+  private String name;
+
+  public static final String JSON_PROPERTY_PAGE_COUNT = "page_count";
+  @javax.annotation.Nonnull
+  private Integer pageCount;
+
+  public static final String JSON_PROPERTY_PAGE_DIMENSIONS = "page_dimensions";
+  @javax.annotation.Nullable
+  private List<List<BigDecimal>> pageDimensions;
+
+  public static final String JSON_PROPERTY_PARENT_FOLDER_ID = "parent_folder_id";
+  @javax.annotation.Nullable
+  private String parentFolderId;
+
+  public static final String JSON_PROPERTY_PATH = "path";
+  @javax.annotation.Nullable
+  private String path;
+
+  public static final String JSON_PROPERTY_PERMANENT_DOCUMENT_URL = "permanent_document_url";
+  @javax.annotation.Nullable
+  private String permanentDocumentUrl;
+
+  public static final String JSON_PROPERTY_PUBLIC_SUBMISSIONS = "public_submissions";
+  @javax.annotation.Nonnull
+  private Boolean publicSubmissions;
+
+  public static final String JSON_PROPERTY_PUBLIC_WEB_FORM = "public_web_form";
+  @javax.annotation.Nonnull
+  private Boolean publicWebForm;
+
+  public static final String JSON_PROPERTY_REDIRECT_URL = "redirect_url";
+  @javax.annotation.Nullable
+  private String redirectUrl;
+
+  public static final String JSON_PROPERTY_SLACK_WEBHOOK_URL = "slack_webhook_url";
+  @javax.annotation.Nullable
+  private String slackWebhookUrl;
+
+  /**
+   * Gets or Sets templateType
+   */
+  public enum TemplateTypeEnum {
+    PDF(String.valueOf("pdf")),
+    
+    HTML(String.valueOf("html"));
+
+    private String value;
+
+    TemplateTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static TemplateTypeEnum fromValue(String value) {
+      for (TemplateTypeEnum b : TemplateTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_TEMPLATE_TYPE = "template_type";
+  @javax.annotation.Nonnull
+  private TemplateTypeEnum templateType;
+
+  public static final String JSON_PROPERTY_UPDATED_AT = "updated_at";
+  @javax.annotation.Nullable
+  private String updatedAt;
+
+  public static final String JSON_PROPERTY_WEBHOOK_URL = "webhook_url";
+  @javax.annotation.Nullable
+  private String webhookUrl;
+
+  public static final String JSON_PROPERTY_DEMO = "demo";
+  @javax.annotation.Nonnull
+  private Boolean demo;
+
+  public TemplatePreview() { 
+  }
+
+  public TemplatePreview addDataRequestSubmissionIdFooters(@javax.annotation.Nonnull Boolean addDataRequestSubmissionIdFooters) {
+    this.addDataRequestSubmissionIdFooters = addDataRequestSubmissionIdFooters;
+    return this;
+  }
+
+  /**
+   * Get addDataRequestSubmissionIdFooters
+   * @return addDataRequestSubmissionIdFooters
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ADD_DATA_REQUEST_SUBMISSION_ID_FOOTERS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getAddDataRequestSubmissionIdFooters() {
+    return addDataRequestSubmissionIdFooters;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ADD_DATA_REQUEST_SUBMISSION_ID_FOOTERS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAddDataRequestSubmissionIdFooters(@javax.annotation.Nonnull Boolean addDataRequestSubmissionIdFooters) {
+    this.addDataRequestSubmissionIdFooters = addDataRequestSubmissionIdFooters;
+  }
+
+
+  public TemplatePreview allowAdditionalProperties(@javax.annotation.Nonnull Boolean allowAdditionalProperties) {
+    this.allowAdditionalProperties = allowAdditionalProperties;
+    return this;
+  }
+
+  /**
+   * Get allowAdditionalProperties
+   * @return allowAdditionalProperties
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ALLOW_ADDITIONAL_PROPERTIES)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getAllowAdditionalProperties() {
+    return allowAdditionalProperties;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ALLOW_ADDITIONAL_PROPERTIES)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setAllowAdditionalProperties(@javax.annotation.Nonnull Boolean allowAdditionalProperties) {
+    this.allowAdditionalProperties = allowAdditionalProperties;
+  }
+
+
+  public TemplatePreview description(@javax.annotation.Nullable String description) {
+    this.description = description;
+    return this;
+  }
+
+  /**
+   * Get description
+   * @return description
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDescription() {
+    return description;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDescription(@javax.annotation.Nullable String description) {
+    this.description = description;
+  }
+
+
+  public TemplatePreview documentFilename(@javax.annotation.Nullable String documentFilename) {
+    this.documentFilename = documentFilename;
+    return this;
+  }
+
+  /**
+   * Get documentFilename
+   * @return documentFilename
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_FILENAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDocumentFilename() {
+    return documentFilename;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_FILENAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentFilename(@javax.annotation.Nullable String documentFilename) {
+    this.documentFilename = documentFilename;
+  }
+
+
+  public TemplatePreview documentMd5(@javax.annotation.Nullable String documentMd5) {
+    this.documentMd5 = documentMd5;
+    return this;
+  }
+
+  /**
+   * Get documentMd5
+   * @return documentMd5
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_MD5)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDocumentMd5() {
+    return documentMd5;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_MD5)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentMd5(@javax.annotation.Nullable String documentMd5) {
+    this.documentMd5 = documentMd5;
+  }
+
+
+  public TemplatePreview documentParseError(@javax.annotation.Nonnull Boolean documentParseError) {
+    this.documentParseError = documentParseError;
+    return this;
+  }
+
+  /**
+   * Get documentParseError
+   * @return documentParseError
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_PARSE_ERROR)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getDocumentParseError() {
+    return documentParseError;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_PARSE_ERROR)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentParseError(@javax.annotation.Nonnull Boolean documentParseError) {
+    this.documentParseError = documentParseError;
+  }
+
+
+  public TemplatePreview documentProcessed(@javax.annotation.Nonnull Boolean documentProcessed) {
+    this.documentProcessed = documentProcessed;
+    return this;
+  }
+
+  /**
+   * Get documentProcessed
+   * @return documentProcessed
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_PROCESSED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getDocumentProcessed() {
+    return documentProcessed;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_PROCESSED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentProcessed(@javax.annotation.Nonnull Boolean documentProcessed) {
+    this.documentProcessed = documentProcessed;
+  }
+
+
+  public TemplatePreview documentState(@javax.annotation.Nonnull DocumentStateEnum documentState) {
+    this.documentState = documentState;
+    return this;
+  }
+
+  /**
+   * Get documentState
+   * @return documentState
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public DocumentStateEnum getDocumentState() {
+    return documentState;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_STATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentState(@javax.annotation.Nonnull DocumentStateEnum documentState) {
+    this.documentState = documentState;
+  }
+
+
+  public TemplatePreview documentUrl(@javax.annotation.Nullable String documentUrl) {
+    this.documentUrl = documentUrl;
+    return this;
+  }
+
+  /**
+   * Get documentUrl
+   * @return documentUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getDocumentUrl() {
+    return documentUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DOCUMENT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDocumentUrl(@javax.annotation.Nullable String documentUrl) {
+    this.documentUrl = documentUrl;
+  }
+
+
+  public TemplatePreview editableSubmissions(@javax.annotation.Nonnull Boolean editableSubmissions) {
+    this.editableSubmissions = editableSubmissions;
+    return this;
+  }
+
+  /**
+   * Get editableSubmissions
+   * @return editableSubmissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EDITABLE_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getEditableSubmissions() {
+    return editableSubmissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EDITABLE_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEditableSubmissions(@javax.annotation.Nonnull Boolean editableSubmissions) {
+    this.editableSubmissions = editableSubmissions;
+  }
+
+
+  public TemplatePreview embedDomains(@javax.annotation.Nullable String embedDomains) {
+    this.embedDomains = embedDomains;
+    return this;
+  }
+
+  /**
+   * Get embedDomains
+   * @return embedDomains
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EMBED_DOMAINS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getEmbedDomains() {
+    return embedDomains;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EMBED_DOMAINS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEmbedDomains(@javax.annotation.Nullable String embedDomains) {
+    this.embedDomains = embedDomains;
+  }
+
+
+  public TemplatePreview encryptPdfsPassword(@javax.annotation.Nullable String encryptPdfsPassword) {
+    this.encryptPdfsPassword = encryptPdfsPassword;
+    return this;
+  }
+
+  /**
+   * Get encryptPdfsPassword
+   * @return encryptPdfsPassword
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ENCRYPT_PDFS_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getEncryptPdfsPassword() {
+    return encryptPdfsPassword;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ENCRYPT_PDFS_PASSWORD)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEncryptPdfsPassword(@javax.annotation.Nullable String encryptPdfsPassword) {
+    this.encryptPdfsPassword = encryptPdfsPassword;
+  }
+
+
+  public TemplatePreview encryptPdfs(@javax.annotation.Nonnull Boolean encryptPdfs) {
+    this.encryptPdfs = encryptPdfs;
+    return this;
+  }
+
+  /**
+   * Get encryptPdfs
+   * @return encryptPdfs
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_ENCRYPT_PDFS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getEncryptPdfs() {
+    return encryptPdfs;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ENCRYPT_PDFS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setEncryptPdfs(@javax.annotation.Nonnull Boolean encryptPdfs) {
+    this.encryptPdfs = encryptPdfs;
+  }
+
+
+  public TemplatePreview expirationInterval(@javax.annotation.Nonnull String expirationInterval) {
+    this.expirationInterval = expirationInterval;
+    return this;
+  }
+
+  /**
+   * Get expirationInterval
+   * @return expirationInterval
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRATION_INTERVAL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExpirationInterval() {
+    return expirationInterval;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRATION_INTERVAL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpirationInterval(@javax.annotation.Nonnull String expirationInterval) {
+    this.expirationInterval = expirationInterval;
+  }
+
+
+  public TemplatePreview expireAfter(@javax.annotation.Nonnull Integer expireAfter) {
+    this.expireAfter = expireAfter;
+    return this;
+  }
+
+  /**
+   * Get expireAfter
+   * @return expireAfter
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRE_AFTER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getExpireAfter() {
+    return expireAfter;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRE_AFTER)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpireAfter(@javax.annotation.Nonnull Integer expireAfter) {
+    this.expireAfter = expireAfter;
+  }
+
+
+  public TemplatePreview expireSubmissions(@javax.annotation.Nonnull Boolean expireSubmissions) {
+    this.expireSubmissions = expireSubmissions;
+    return this;
+  }
+
+  /**
+   * Get expireSubmissions
+   * @return expireSubmissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_EXPIRE_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getExpireSubmissions() {
+    return expireSubmissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXPIRE_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExpireSubmissions(@javax.annotation.Nonnull Boolean expireSubmissions) {
+    this.expireSubmissions = expireSubmissions;
+  }
+
+
+  public TemplatePreview externalPredefinedFieldsTemplateId(@javax.annotation.Nullable String externalPredefinedFieldsTemplateId) {
+    this.externalPredefinedFieldsTemplateId = externalPredefinedFieldsTemplateId;
+    return this;
+  }
+
+  /**
+   * Get externalPredefinedFieldsTemplateId
+   * @return externalPredefinedFieldsTemplateId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExternalPredefinedFieldsTemplateId() {
+    return externalPredefinedFieldsTemplateId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExternalPredefinedFieldsTemplateId(@javax.annotation.Nullable String externalPredefinedFieldsTemplateId) {
+    this.externalPredefinedFieldsTemplateId = externalPredefinedFieldsTemplateId;
+  }
+
+
+  public TemplatePreview externalPredefinedFieldsTemplateName(@javax.annotation.Nullable String externalPredefinedFieldsTemplateName) {
+    this.externalPredefinedFieldsTemplateName = externalPredefinedFieldsTemplateName;
+    return this;
+  }
+
+  /**
+   * Get externalPredefinedFieldsTemplateName
+   * @return externalPredefinedFieldsTemplateName
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getExternalPredefinedFieldsTemplateName() {
+    return externalPredefinedFieldsTemplateName;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_EXTERNAL_PREDEFINED_FIELDS_TEMPLATE_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setExternalPredefinedFieldsTemplateName(@javax.annotation.Nullable String externalPredefinedFieldsTemplateName) {
+    this.externalPredefinedFieldsTemplateName = externalPredefinedFieldsTemplateName;
+  }
+
+
+  public TemplatePreview firstTemplate(@javax.annotation.Nonnull Boolean firstTemplate) {
+    this.firstTemplate = firstTemplate;
+    return this;
+  }
+
+  /**
+   * Get firstTemplate
+   * @return firstTemplate
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_FIRST_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getFirstTemplate() {
+    return firstTemplate;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIRST_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFirstTemplate(@javax.annotation.Nonnull Boolean firstTemplate) {
+    this.firstTemplate = firstTemplate;
+  }
+
+
+  public TemplatePreview id(@javax.annotation.Nullable String id) {
+    this.id = id;
+    return this;
+  }
+
+  /**
+   * Get id
+   * @return id
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getId() {
+    return id;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setId(@javax.annotation.Nullable String id) {
+    this.id = id;
+  }
+
+
+  public TemplatePreview locked(@javax.annotation.Nonnull Boolean locked) {
+    this.locked = locked;
+    return this;
+  }
+
+  /**
+   * Get locked
+   * @return locked
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_LOCKED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getLocked() {
+    return locked;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LOCKED)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLocked(@javax.annotation.Nonnull Boolean locked) {
+    this.locked = locked;
+  }
+
+
+  public TemplatePreview mergeAuditTrailPdf(@javax.annotation.Nonnull Boolean mergeAuditTrailPdf) {
+    this.mergeAuditTrailPdf = mergeAuditTrailPdf;
+    return this;
+  }
+
+  /**
+   * Get mergeAuditTrailPdf
+   * @return mergeAuditTrailPdf
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_MERGE_AUDIT_TRAIL_PDF)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getMergeAuditTrailPdf() {
+    return mergeAuditTrailPdf;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_MERGE_AUDIT_TRAIL_PDF)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setMergeAuditTrailPdf(@javax.annotation.Nonnull Boolean mergeAuditTrailPdf) {
+    this.mergeAuditTrailPdf = mergeAuditTrailPdf;
+  }
+
+
+  public TemplatePreview name(@javax.annotation.Nullable String name) {
+    this.name = name;
+    return this;
+  }
+
+  /**
+   * Get name
+   * @return name
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getName() {
+    return name;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_NAME)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setName(@javax.annotation.Nullable String name) {
+    this.name = name;
+  }
+
+
+  public TemplatePreview pageCount(@javax.annotation.Nonnull Integer pageCount) {
+    this.pageCount = pageCount;
+    return this;
+  }
+
+  /**
+   * Get pageCount
+   * @return pageCount
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PAGE_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Integer getPageCount() {
+    return pageCount;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PAGE_COUNT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPageCount(@javax.annotation.Nonnull Integer pageCount) {
+    this.pageCount = pageCount;
+  }
+
+
+  public TemplatePreview pageDimensions(@javax.annotation.Nullable List<List<BigDecimal>> pageDimensions) {
+    this.pageDimensions = pageDimensions;
+    return this;
+  }
+
+  public TemplatePreview addPageDimensionsItem(List<BigDecimal> pageDimensionsItem) {
+    if (this.pageDimensions == null) {
+      this.pageDimensions = new ArrayList<>();
+    }
+    this.pageDimensions.add(pageDimensionsItem);
+    return this;
+  }
+
+  /**
+   * Get pageDimensions
+   * @return pageDimensions
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PAGE_DIMENSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<List<BigDecimal>> getPageDimensions() {
+    return pageDimensions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PAGE_DIMENSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPageDimensions(@javax.annotation.Nullable List<List<BigDecimal>> pageDimensions) {
+    this.pageDimensions = pageDimensions;
+  }
+
+
+  public TemplatePreview parentFolderId(@javax.annotation.Nullable String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+    return this;
+  }
+
+  /**
+   * Get parentFolderId
+   * @return parentFolderId
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getParentFolderId() {
+    return parentFolderId;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PARENT_FOLDER_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setParentFolderId(@javax.annotation.Nullable String parentFolderId) {
+    this.parentFolderId = parentFolderId;
+  }
+
+
+  public TemplatePreview path(@javax.annotation.Nullable String path) {
+    this.path = path;
+    return this;
+  }
+
+  /**
+   * Get path
+   * @return path
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PATH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPath() {
+    return path;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PATH)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPath(@javax.annotation.Nullable String path) {
+    this.path = path;
+  }
+
+
+  public TemplatePreview permanentDocumentUrl(@javax.annotation.Nullable String permanentDocumentUrl) {
+    this.permanentDocumentUrl = permanentDocumentUrl;
+    return this;
+  }
+
+  /**
+   * Get permanentDocumentUrl
+   * @return permanentDocumentUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_PERMANENT_DOCUMENT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getPermanentDocumentUrl() {
+    return permanentDocumentUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PERMANENT_DOCUMENT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPermanentDocumentUrl(@javax.annotation.Nullable String permanentDocumentUrl) {
+    this.permanentDocumentUrl = permanentDocumentUrl;
+  }
+
+
+  public TemplatePreview publicSubmissions(@javax.annotation.Nonnull Boolean publicSubmissions) {
+    this.publicSubmissions = publicSubmissions;
+    return this;
+  }
+
+  /**
+   * Get publicSubmissions
+   * @return publicSubmissions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PUBLIC_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getPublicSubmissions() {
+    return publicSubmissions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PUBLIC_SUBMISSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPublicSubmissions(@javax.annotation.Nonnull Boolean publicSubmissions) {
+    this.publicSubmissions = publicSubmissions;
+  }
+
+
+  public TemplatePreview publicWebForm(@javax.annotation.Nonnull Boolean publicWebForm) {
+    this.publicWebForm = publicWebForm;
+    return this;
+  }
+
+  /**
+   * Get publicWebForm
+   * @return publicWebForm
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_PUBLIC_WEB_FORM)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getPublicWebForm() {
+    return publicWebForm;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_PUBLIC_WEB_FORM)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setPublicWebForm(@javax.annotation.Nonnull Boolean publicWebForm) {
+    this.publicWebForm = publicWebForm;
+  }
+
+
+  public TemplatePreview redirectUrl(@javax.annotation.Nullable String redirectUrl) {
+    this.redirectUrl = redirectUrl;
+    return this;
+  }
+
+  /**
+   * Get redirectUrl
+   * @return redirectUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_REDIRECT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getRedirectUrl() {
+    return redirectUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_REDIRECT_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setRedirectUrl(@javax.annotation.Nullable String redirectUrl) {
+    this.redirectUrl = redirectUrl;
+  }
+
+
+  public TemplatePreview slackWebhookUrl(@javax.annotation.Nullable String slackWebhookUrl) {
+    this.slackWebhookUrl = slackWebhookUrl;
+    return this;
+  }
+
+  /**
+   * Get slackWebhookUrl
+   * @return slackWebhookUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_SLACK_WEBHOOK_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getSlackWebhookUrl() {
+    return slackWebhookUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_SLACK_WEBHOOK_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setSlackWebhookUrl(@javax.annotation.Nullable String slackWebhookUrl) {
+    this.slackWebhookUrl = slackWebhookUrl;
+  }
+
+
+  public TemplatePreview templateType(@javax.annotation.Nonnull TemplateTypeEnum templateType) {
+    this.templateType = templateType;
+    return this;
+  }
+
+  /**
+   * Get templateType
+   * @return templateType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public TemplateTypeEnum getTemplateType() {
+    return templateType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplateType(@javax.annotation.Nonnull TemplateTypeEnum templateType) {
+    this.templateType = templateType;
+  }
+
+
+  public TemplatePreview updatedAt(@javax.annotation.Nullable String updatedAt) {
+    this.updatedAt = updatedAt;
+    return this;
+  }
+
+  /**
+   * Get updatedAt
+   * @return updatedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_UPDATED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getUpdatedAt() {
+    return updatedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_UPDATED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setUpdatedAt(@javax.annotation.Nullable String updatedAt) {
+    this.updatedAt = updatedAt;
+  }
+
+
+  public TemplatePreview webhookUrl(@javax.annotation.Nullable String webhookUrl) {
+    this.webhookUrl = webhookUrl;
+    return this;
+  }
+
+  /**
+   * Get webhookUrl
+   * @return webhookUrl
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_WEBHOOK_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getWebhookUrl() {
+    return webhookUrl;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_WEBHOOK_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setWebhookUrl(@javax.annotation.Nullable String webhookUrl) {
+    this.webhookUrl = webhookUrl;
+  }
+
+
+  public TemplatePreview demo(@javax.annotation.Nonnull Boolean demo) {
+    this.demo = demo;
+    return this;
+  }
+
+  /**
+   * Get demo
+   * @return demo
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_DEMO)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Boolean getDemo() {
+    return demo;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DEMO)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setDemo(@javax.annotation.Nonnull Boolean demo) {
+    this.demo = demo;
+  }
+
+
+  /**
+   * Return true if this template_preview object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TemplatePreview templatePreview = (TemplatePreview) o;
+    return Objects.equals(this.addDataRequestSubmissionIdFooters, templatePreview.addDataRequestSubmissionIdFooters) &&
+        Objects.equals(this.allowAdditionalProperties, templatePreview.allowAdditionalProperties) &&
+        Objects.equals(this.description, templatePreview.description) &&
+        Objects.equals(this.documentFilename, templatePreview.documentFilename) &&
+        Objects.equals(this.documentMd5, templatePreview.documentMd5) &&
+        Objects.equals(this.documentParseError, templatePreview.documentParseError) &&
+        Objects.equals(this.documentProcessed, templatePreview.documentProcessed) &&
+        Objects.equals(this.documentState, templatePreview.documentState) &&
+        Objects.equals(this.documentUrl, templatePreview.documentUrl) &&
+        Objects.equals(this.editableSubmissions, templatePreview.editableSubmissions) &&
+        Objects.equals(this.embedDomains, templatePreview.embedDomains) &&
+        Objects.equals(this.encryptPdfsPassword, templatePreview.encryptPdfsPassword) &&
+        Objects.equals(this.encryptPdfs, templatePreview.encryptPdfs) &&
+        Objects.equals(this.expirationInterval, templatePreview.expirationInterval) &&
+        Objects.equals(this.expireAfter, templatePreview.expireAfter) &&
+        Objects.equals(this.expireSubmissions, templatePreview.expireSubmissions) &&
+        Objects.equals(this.externalPredefinedFieldsTemplateId, templatePreview.externalPredefinedFieldsTemplateId) &&
+        Objects.equals(this.externalPredefinedFieldsTemplateName, templatePreview.externalPredefinedFieldsTemplateName) &&
+        Objects.equals(this.firstTemplate, templatePreview.firstTemplate) &&
+        Objects.equals(this.id, templatePreview.id) &&
+        Objects.equals(this.locked, templatePreview.locked) &&
+        Objects.equals(this.mergeAuditTrailPdf, templatePreview.mergeAuditTrailPdf) &&
+        Objects.equals(this.name, templatePreview.name) &&
+        Objects.equals(this.pageCount, templatePreview.pageCount) &&
+        Objects.equals(this.pageDimensions, templatePreview.pageDimensions) &&
+        Objects.equals(this.parentFolderId, templatePreview.parentFolderId) &&
+        Objects.equals(this.path, templatePreview.path) &&
+        Objects.equals(this.permanentDocumentUrl, templatePreview.permanentDocumentUrl) &&
+        Objects.equals(this.publicSubmissions, templatePreview.publicSubmissions) &&
+        Objects.equals(this.publicWebForm, templatePreview.publicWebForm) &&
+        Objects.equals(this.redirectUrl, templatePreview.redirectUrl) &&
+        Objects.equals(this.slackWebhookUrl, templatePreview.slackWebhookUrl) &&
+        Objects.equals(this.templateType, templatePreview.templateType) &&
+        Objects.equals(this.updatedAt, templatePreview.updatedAt) &&
+        Objects.equals(this.webhookUrl, templatePreview.webhookUrl) &&
+        Objects.equals(this.demo, templatePreview.demo);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(addDataRequestSubmissionIdFooters, allowAdditionalProperties, description, documentFilename, documentMd5, documentParseError, documentProcessed, documentState, documentUrl, editableSubmissions, embedDomains, encryptPdfsPassword, encryptPdfs, expirationInterval, expireAfter, expireSubmissions, externalPredefinedFieldsTemplateId, externalPredefinedFieldsTemplateName, firstTemplate, id, locked, mergeAuditTrailPdf, name, pageCount, pageDimensions, parentFolderId, path, permanentDocumentUrl, publicSubmissions, publicWebForm, redirectUrl, slackWebhookUrl, templateType, updatedAt, webhookUrl, demo);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TemplatePreview {\n");
+    sb.append("    addDataRequestSubmissionIdFooters: ").append(toIndentedString(addDataRequestSubmissionIdFooters)).append("\n");
+    sb.append("    allowAdditionalProperties: ").append(toIndentedString(allowAdditionalProperties)).append("\n");
+    sb.append("    description: ").append(toIndentedString(description)).append("\n");
+    sb.append("    documentFilename: ").append(toIndentedString(documentFilename)).append("\n");
+    sb.append("    documentMd5: ").append(toIndentedString(documentMd5)).append("\n");
+    sb.append("    documentParseError: ").append(toIndentedString(documentParseError)).append("\n");
+    sb.append("    documentProcessed: ").append(toIndentedString(documentProcessed)).append("\n");
+    sb.append("    documentState: ").append(toIndentedString(documentState)).append("\n");
+    sb.append("    documentUrl: ").append(toIndentedString(documentUrl)).append("\n");
+    sb.append("    editableSubmissions: ").append(toIndentedString(editableSubmissions)).append("\n");
+    sb.append("    embedDomains: ").append(toIndentedString(embedDomains)).append("\n");
+    sb.append("    encryptPdfsPassword: ").append(toIndentedString(encryptPdfsPassword)).append("\n");
+    sb.append("    encryptPdfs: ").append(toIndentedString(encryptPdfs)).append("\n");
+    sb.append("    expirationInterval: ").append(toIndentedString(expirationInterval)).append("\n");
+    sb.append("    expireAfter: ").append(toIndentedString(expireAfter)).append("\n");
+    sb.append("    expireSubmissions: ").append(toIndentedString(expireSubmissions)).append("\n");
+    sb.append("    externalPredefinedFieldsTemplateId: ").append(toIndentedString(externalPredefinedFieldsTemplateId)).append("\n");
+    sb.append("    externalPredefinedFieldsTemplateName: ").append(toIndentedString(externalPredefinedFieldsTemplateName)).append("\n");
+    sb.append("    firstTemplate: ").append(toIndentedString(firstTemplate)).append("\n");
+    sb.append("    id: ").append(toIndentedString(id)).append("\n");
+    sb.append("    locked: ").append(toIndentedString(locked)).append("\n");
+    sb.append("    mergeAuditTrailPdf: ").append(toIndentedString(mergeAuditTrailPdf)).append("\n");
+    sb.append("    name: ").append(toIndentedString(name)).append("\n");
+    sb.append("    pageCount: ").append(toIndentedString(pageCount)).append("\n");
+    sb.append("    pageDimensions: ").append(toIndentedString(pageDimensions)).append("\n");
+    sb.append("    parentFolderId: ").append(toIndentedString(parentFolderId)).append("\n");
+    sb.append("    path: ").append(toIndentedString(path)).append("\n");
+    sb.append("    permanentDocumentUrl: ").append(toIndentedString(permanentDocumentUrl)).append("\n");
+    sb.append("    publicSubmissions: ").append(toIndentedString(publicSubmissions)).append("\n");
+    sb.append("    publicWebForm: ").append(toIndentedString(publicWebForm)).append("\n");
+    sb.append("    redirectUrl: ").append(toIndentedString(redirectUrl)).append("\n");
+    sb.append("    slackWebhookUrl: ").append(toIndentedString(slackWebhookUrl)).append("\n");
+    sb.append("    templateType: ").append(toIndentedString(templateType)).append("\n");
+    sb.append("    updatedAt: ").append(toIndentedString(updatedAt)).append("\n");
+    sb.append("    webhookUrl: ").append(toIndentedString(webhookUrl)).append("\n");
+    sb.append("    demo: ").append(toIndentedString(demo)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/UpdateHtmlTemplate.java b/src/main/java/com/docspring/UpdateHtmlTemplate.java
new file mode 100644
index 0000000..04a8904
--- /dev/null
+++ b/src/main/java/com/docspring/UpdateHtmlTemplate.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * UpdateHtmlTemplate
+ */
+@JsonPropertyOrder({
+  UpdateHtmlTemplate.JSON_PROPERTY_TEMPLATE
+})
+@JsonTypeName("update_html_template")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class UpdateHtmlTemplate {
+  public static final String JSON_PROPERTY_TEMPLATE = "template";
+  @javax.annotation.Nonnull
+  private Object template;
+
+  public UpdateHtmlTemplate() { 
+  }
+
+  public UpdateHtmlTemplate template(@javax.annotation.Nonnull Object template) {
+    this.template = template;
+    return this;
+  }
+
+  /**
+   * Get template
+   * @return template
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getTemplate() {
+    return template;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplate(@javax.annotation.Nonnull Object template) {
+    this.template = template;
+  }
+
+
+  /**
+   * Return true if this update_html_template object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    UpdateHtmlTemplate updateHtmlTemplate = (UpdateHtmlTemplate) o;
+    return Objects.equals(this.template, updateHtmlTemplate.template);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(template);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class UpdateHtmlTemplate {\n");
+    sb.append("    template: ").append(toIndentedString(template)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/UpdateSubmissionDataRequestData.java b/src/main/java/com/docspring/UpdateSubmissionDataRequestData.java
new file mode 100644
index 0000000..1901038
--- /dev/null
+++ b/src/main/java/com/docspring/UpdateSubmissionDataRequestData.java
@@ -0,0 +1,262 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * UpdateSubmissionDataRequestData
+ */
+@JsonPropertyOrder({
+  UpdateSubmissionDataRequestData.JSON_PROPERTY_AUTH_TYPE,
+  UpdateSubmissionDataRequestData.JSON_PROPERTY_FIELDS,
+  UpdateSubmissionDataRequestData.JSON_PROPERTY_METADATA,
+  UpdateSubmissionDataRequestData.JSON_PROPERTY_ORDER
+})
+@JsonTypeName("update_submission_data_request_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class UpdateSubmissionDataRequestData {
+  /**
+   * Gets or Sets authType
+   */
+  public enum AuthTypeEnum {
+    NONE(String.valueOf("none")),
+    
+    PASSWORD(String.valueOf("password")),
+    
+    OAUTH(String.valueOf("oauth")),
+    
+    EMAIL_LINK(String.valueOf("email_link")),
+    
+    PHONE_NUMBER(String.valueOf("phone_number")),
+    
+    LDAP(String.valueOf("ldap")),
+    
+    SAML(String.valueOf("saml"));
+
+    private String value;
+
+    AuthTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static AuthTypeEnum fromValue(String value) {
+      for (AuthTypeEnum b : AuthTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_AUTH_TYPE = "auth_type";
+  @javax.annotation.Nullable
+  private AuthTypeEnum authType;
+
+  public static final String JSON_PROPERTY_FIELDS = "fields";
+  @javax.annotation.Nullable
+  private List<String> fields = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_METADATA = "metadata";
+  @javax.annotation.Nullable
+  private Object metadata;
+
+  public static final String JSON_PROPERTY_ORDER = "order";
+  @javax.annotation.Nullable
+  private Integer order;
+
+  public UpdateSubmissionDataRequestData() { 
+  }
+
+  public UpdateSubmissionDataRequestData authType(@javax.annotation.Nullable AuthTypeEnum authType) {
+    this.authType = authType;
+    return this;
+  }
+
+  /**
+   * Get authType
+   * @return authType
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_AUTH_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public AuthTypeEnum getAuthType() {
+    return authType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_AUTH_TYPE)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setAuthType(@javax.annotation.Nullable AuthTypeEnum authType) {
+    this.authType = authType;
+  }
+
+
+  public UpdateSubmissionDataRequestData fields(@javax.annotation.Nullable List<String> fields) {
+    this.fields = fields;
+    return this;
+  }
+
+  public UpdateSubmissionDataRequestData addFieldsItem(String fieldsItem) {
+    if (this.fields == null) {
+      this.fields = new ArrayList<>();
+    }
+    this.fields.add(fieldsItem);
+    return this;
+  }
+
+  /**
+   * Get fields
+   * @return fields
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getFields() {
+    return fields;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setFields(@javax.annotation.Nullable List<String> fields) {
+    this.fields = fields;
+  }
+
+
+  public UpdateSubmissionDataRequestData metadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+    return this;
+  }
+
+  /**
+   * Get metadata
+   * @return metadata
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Object getMetadata() {
+    return metadata;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METADATA)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setMetadata(@javax.annotation.Nullable Object metadata) {
+    this.metadata = metadata;
+  }
+
+
+  public UpdateSubmissionDataRequestData order(@javax.annotation.Nullable Integer order) {
+    this.order = order;
+    return this;
+  }
+
+  /**
+   * Get order
+   * @return order
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ORDER)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public Integer getOrder() {
+    return order;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ORDER)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setOrder(@javax.annotation.Nullable Integer order) {
+    this.order = order;
+  }
+
+
+  /**
+   * Return true if this update_submission_data_request_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    UpdateSubmissionDataRequestData updateSubmissionDataRequestData = (UpdateSubmissionDataRequestData) o;
+    return Objects.equals(this.authType, updateSubmissionDataRequestData.authType) &&
+        Objects.equals(this.fields, updateSubmissionDataRequestData.fields) &&
+        Objects.equals(this.metadata, updateSubmissionDataRequestData.metadata) &&
+        Objects.equals(this.order, updateSubmissionDataRequestData.order);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(authType, fields, metadata, order);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class UpdateSubmissionDataRequestData {\n");
+    sb.append("    authType: ").append(toIndentedString(authType)).append("\n");
+    sb.append("    fields: ").append(toIndentedString(fields)).append("\n");
+    sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
+    sb.append("    order: ").append(toIndentedString(order)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/UploadPresignResponse.java b/src/main/java/com/docspring/UploadPresignResponse.java
new file mode 100644
index 0000000..8942c17
--- /dev/null
+++ b/src/main/java/com/docspring/UploadPresignResponse.java
@@ -0,0 +1,240 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * UploadPresignResponse
+ */
+@JsonPropertyOrder({
+  UploadPresignResponse.JSON_PROPERTY_FIELDS,
+  UploadPresignResponse.JSON_PROPERTY_HEADERS,
+  UploadPresignResponse.JSON_PROPERTY_URL,
+  UploadPresignResponse.JSON_PROPERTY_METHOD
+})
+@JsonTypeName("upload_presign_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class UploadPresignResponse {
+  public static final String JSON_PROPERTY_FIELDS = "fields";
+  @javax.annotation.Nonnull
+  private Object fields;
+
+  public static final String JSON_PROPERTY_HEADERS = "headers";
+  @javax.annotation.Nonnull
+  private Object headers;
+
+  public static final String JSON_PROPERTY_URL = "url";
+  @javax.annotation.Nonnull
+  private String url;
+
+  /**
+   * Gets or Sets method
+   */
+  public enum MethodEnum {
+    POST(String.valueOf("post"));
+
+    private String value;
+
+    MethodEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static MethodEnum fromValue(String value) {
+      for (MethodEnum b : MethodEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_METHOD = "method";
+  @javax.annotation.Nullable
+  private MethodEnum method;
+
+  public UploadPresignResponse() { 
+  }
+
+  public UploadPresignResponse fields(@javax.annotation.Nonnull Object fields) {
+    this.fields = fields;
+    return this;
+  }
+
+  /**
+   * Get fields
+   * @return fields
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getFields() {
+    return fields;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_FIELDS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setFields(@javax.annotation.Nonnull Object fields) {
+    this.fields = fields;
+  }
+
+
+  public UploadPresignResponse headers(@javax.annotation.Nonnull Object headers) {
+    this.headers = headers;
+    return this;
+  }
+
+  /**
+   * Get headers
+   * @return headers
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_HEADERS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getHeaders() {
+    return headers;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_HEADERS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setHeaders(@javax.annotation.Nonnull Object headers) {
+    this.headers = headers;
+  }
+
+
+  public UploadPresignResponse url(@javax.annotation.Nonnull String url) {
+    this.url = url;
+    return this;
+  }
+
+  /**
+   * Get url
+   * @return url
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getUrl() {
+    return url;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_URL)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setUrl(@javax.annotation.Nonnull String url) {
+    this.url = url;
+  }
+
+
+  public UploadPresignResponse method(@javax.annotation.Nullable MethodEnum method) {
+    this.method = method;
+    return this;
+  }
+
+  /**
+   * Get method
+   * @return method
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_METHOD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public MethodEnum getMethod() {
+    return method;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_METHOD)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setMethod(@javax.annotation.Nullable MethodEnum method) {
+    this.method = method;
+  }
+
+
+  /**
+   * Return true if this upload_presign_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    UploadPresignResponse uploadPresignResponse = (UploadPresignResponse) o;
+    return Objects.equals(this.fields, uploadPresignResponse.fields) &&
+        Objects.equals(this.headers, uploadPresignResponse.headers) &&
+        Objects.equals(this.url, uploadPresignResponse.url) &&
+        Objects.equals(this.method, uploadPresignResponse.method);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(fields, headers, url, method);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class UploadPresignResponse {\n");
+    sb.append("    fields: ").append(toIndentedString(fields)).append("\n");
+    sb.append("    headers: ").append(toIndentedString(headers)).append("\n");
+    sb.append("    url: ").append(toIndentedString(url)).append("\n");
+    sb.append("    method: ").append(toIndentedString(method)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/auth/ApiKeyAuth.java b/src/main/java/com/docspring/auth/ApiKeyAuth.java
new file mode 100644
index 0000000..12d66c1
--- /dev/null
+++ b/src/main/java/com/docspring/auth/ApiKeyAuth.java
@@ -0,0 +1,79 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring.auth;
+
+import com.docspring.Pair;
+import com.docspring.ApiException;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.List;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class ApiKeyAuth implements Authentication {
+  private final String location;
+  private final String paramName;
+
+  private String apiKey;
+  private String apiKeyPrefix;
+
+  public ApiKeyAuth(String location, String paramName) {
+    this.location = location;
+    this.paramName = paramName;
+  }
+
+  public String getLocation() {
+    return location;
+  }
+
+  public String getParamName() {
+    return paramName;
+  }
+
+  public String getApiKey() {
+    return apiKey;
+  }
+
+  public void setApiKey(String apiKey) {
+    this.apiKey = apiKey;
+  }
+
+  public String getApiKeyPrefix() {
+    return apiKeyPrefix;
+  }
+
+  public void setApiKeyPrefix(String apiKeyPrefix) {
+    this.apiKeyPrefix = apiKeyPrefix;
+  }
+
+  @Override
+  public void applyToParams(List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams, String payload, String method, URI uri) throws ApiException {
+    if (apiKey == null) {
+      return;
+    }
+    String value;
+    if (apiKeyPrefix != null) {
+      value = apiKeyPrefix + " " + apiKey;
+    } else {
+      value = apiKey;
+    }
+    if ("query".equals(location)) {
+      queryParams.add(new Pair(paramName, value));
+    } else if ("header".equals(location)) {
+      headerParams.put(paramName, value);
+    } else if ("cookie".equals(location)) {
+      cookieParams.put(paramName, value);
+    }
+  }
+}
diff --git a/src/main/java/com/docspring/auth/Authentication.java b/src/main/java/com/docspring/auth/Authentication.java
new file mode 100644
index 0000000..0e06346
--- /dev/null
+++ b/src/main/java/com/docspring/auth/Authentication.java
@@ -0,0 +1,33 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring.auth;
+
+import com.docspring.Pair;
+import com.docspring.ApiException;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.List;
+
+public interface Authentication {
+    /**
+     * Apply authentication settings to header and query params.
+     *
+     * @param queryParams List of query parameters
+     * @param headerParams Map of header parameters
+     * @param cookieParams Map of cookie parameters
+     */
+    void applyToParams(List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams, String payload, String method, URI uri) throws ApiException;
+
+}
diff --git a/src/main/java/com/docspring/auth/HttpBasicAuth.java b/src/main/java/com/docspring/auth/HttpBasicAuth.java
new file mode 100644
index 0000000..2eb5a0b
--- /dev/null
+++ b/src/main/java/com/docspring/auth/HttpBasicAuth.java
@@ -0,0 +1,55 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring.auth;
+
+import com.docspring.Pair;
+import com.docspring.ApiException;
+
+import java.util.Base64;
+import java.nio.charset.StandardCharsets;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.List;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class HttpBasicAuth implements Authentication {
+  private String username;
+  private String password;
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public String getPassword() {
+    return password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  @Override
+  public void applyToParams(List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams, String payload, String method, URI uri) throws ApiException {
+    if (username == null && password == null) {
+      return;
+    }
+    String str = (username == null ? "" : username) + ":" + (password == null ? "" : password);
+    headerParams.put("Authorization", "Basic " + Base64.getEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8)));
+  }
+}
diff --git a/src/main/java/com/docspring/auth/HttpBearerAuth.java b/src/main/java/com/docspring/auth/HttpBearerAuth.java
new file mode 100644
index 0000000..1c5f02b
--- /dev/null
+++ b/src/main/java/com/docspring/auth/HttpBearerAuth.java
@@ -0,0 +1,62 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring.auth;
+
+import com.docspring.Pair;
+import com.docspring.ApiException;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.List;
+
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class HttpBearerAuth implements Authentication {
+  private final String scheme;
+  private String bearerToken;
+
+  public HttpBearerAuth(String scheme) {
+    this.scheme = scheme;
+  }
+
+  /**
+   * Gets the token, which together with the scheme, will be sent as the value of the Authorization header.
+   *
+   * @return The bearer token
+   */
+  public String getBearerToken() {
+    return bearerToken;
+  }
+
+  /**
+   * Sets the token, which together with the scheme, will be sent as the value of the Authorization header.
+   *
+   * @param bearerToken The bearer token to send in the Authorization header
+   */
+  public void setBearerToken(String bearerToken) {
+    this.bearerToken = bearerToken;
+  }
+
+  @Override
+  public void applyToParams(List<Pair> queryParams, Map<String, String> headerParams, Map<String, String> cookieParams, String payload, String method, URI uri) throws ApiException {
+    if(bearerToken == null) {
+      return;
+    }
+
+    headerParams.put("Authorization", (scheme != null ? upperCaseBearer(scheme) + " " : "") + bearerToken);
+  }
+
+  private static String upperCaseBearer(String scheme) {
+    return ("bearer".equalsIgnoreCase(scheme)) ? "Bearer" : scheme;
+  }
+}
diff --git a/src/test/java/com/docspring/AddFieldsDataTest.java b/src/test/java/com/docspring/AddFieldsDataTest.java
new file mode 100644
index 0000000..ee1497b
--- /dev/null
+++ b/src/test/java/com/docspring/AddFieldsDataTest.java
@@ -0,0 +1,51 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for AddFieldsData
+ */
+public class AddFieldsDataTest {
+    private final AddFieldsData model = new AddFieldsData();
+
+    /**
+     * Model tests for AddFieldsData
+     */
+    @Test
+    public void testAddFieldsData() {
+        // TODO: test AddFieldsData
+    }
+
+    /**
+     * Test the property 'fields'
+     */
+    @Test
+    public void fieldsTest() {
+        // TODO: test fields
+    }
+
+}
diff --git a/src/test/java/com/docspring/BatchGeneratePdfs201ResponseTest.java b/src/test/java/com/docspring/BatchGeneratePdfs201ResponseTest.java
new file mode 100644
index 0000000..dffce00
--- /dev/null
+++ b/src/test/java/com/docspring/BatchGeneratePdfs201ResponseTest.java
@@ -0,0 +1,84 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.SubmissionBatch;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for BatchGeneratePdfs201Response
+ */
+public class BatchGeneratePdfs201ResponseTest {
+    private final BatchGeneratePdfs201Response model = new BatchGeneratePdfs201Response();
+
+    /**
+     * Model tests for BatchGeneratePdfs201Response
+     */
+    @Test
+    public void testBatchGeneratePdfs201Response() {
+        // TODO: test BatchGeneratePdfs201Response
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'error'
+     */
+    @Test
+    public void errorTest() {
+        // TODO: test error
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+    /**
+     * Test the property 'submissionBatch'
+     */
+    @Test
+    public void submissionBatchTest() {
+        // TODO: test submissionBatch
+    }
+
+    /**
+     * Test the property 'submissions'
+     */
+    @Test
+    public void submissionsTest() {
+        // TODO: test submissions
+    }
+
+}
diff --git a/src/test/java/com/docspring/CombinePdfsDataTest.java b/src/test/java/com/docspring/CombinePdfsDataTest.java
new file mode 100644
index 0000000..080a773
--- /dev/null
+++ b/src/test/java/com/docspring/CombinePdfsDataTest.java
@@ -0,0 +1,91 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CombinePdfsData
+ */
+public class CombinePdfsDataTest {
+    private final CombinePdfsData model = new CombinePdfsData();
+
+    /**
+     * Model tests for CombinePdfsData
+     */
+    @Test
+    public void testCombinePdfsData() {
+        // TODO: test CombinePdfsData
+    }
+
+    /**
+     * Test the property 'deleteCustomFiles'
+     */
+    @Test
+    public void deleteCustomFilesTest() {
+        // TODO: test deleteCustomFiles
+    }
+
+    /**
+     * Test the property 'expiresIn'
+     */
+    @Test
+    public void expiresInTest() {
+        // TODO: test expiresIn
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'password'
+     */
+    @Test
+    public void passwordTest() {
+        // TODO: test password
+    }
+
+    /**
+     * Test the property 'sourcePdfs'
+     */
+    @Test
+    public void sourcePdfsTest() {
+        // TODO: test sourcePdfs
+    }
+
+    /**
+     * Test the property 'test'
+     */
+    @Test
+    public void testTest() {
+        // TODO: test test
+    }
+
+}
diff --git a/src/test/java/com/docspring/CombinedSubmissionActionTest.java b/src/test/java/com/docspring/CombinedSubmissionActionTest.java
new file mode 100644
index 0000000..11de94d
--- /dev/null
+++ b/src/test/java/com/docspring/CombinedSubmissionActionTest.java
@@ -0,0 +1,89 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CombinedSubmissionAction
+ */
+public class CombinedSubmissionActionTest {
+    private final CombinedSubmissionAction model = new CombinedSubmissionAction();
+
+    /**
+     * Model tests for CombinedSubmissionAction
+     */
+    @Test
+    public void testCombinedSubmissionAction() {
+        // TODO: test CombinedSubmissionAction
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'integrationId'
+     */
+    @Test
+    public void integrationIdTest() {
+        // TODO: test integrationId
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'actionType'
+     */
+    @Test
+    public void actionTypeTest() {
+        // TODO: test actionType
+    }
+
+    /**
+     * Test the property 'actionCategory'
+     */
+    @Test
+    public void actionCategoryTest() {
+        // TODO: test actionCategory
+    }
+
+    /**
+     * Test the property 'resultData'
+     */
+    @Test
+    public void resultDataTest() {
+        // TODO: test resultData
+    }
+
+}
diff --git a/src/test/java/com/docspring/CombinedSubmissionDataTest.java b/src/test/java/com/docspring/CombinedSubmissionDataTest.java
new file mode 100644
index 0000000..d74620d
--- /dev/null
+++ b/src/test/java/com/docspring/CombinedSubmissionDataTest.java
@@ -0,0 +1,83 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CombinedSubmissionData
+ */
+public class CombinedSubmissionDataTest {
+    private final CombinedSubmissionData model = new CombinedSubmissionData();
+
+    /**
+     * Model tests for CombinedSubmissionData
+     */
+    @Test
+    public void testCombinedSubmissionData() {
+        // TODO: test CombinedSubmissionData
+    }
+
+    /**
+     * Test the property 'expiresIn'
+     */
+    @Test
+    public void expiresInTest() {
+        // TODO: test expiresIn
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'password'
+     */
+    @Test
+    public void passwordTest() {
+        // TODO: test password
+    }
+
+    /**
+     * Test the property 'submissionIds'
+     */
+    @Test
+    public void submissionIdsTest() {
+        // TODO: test submissionIds
+    }
+
+    /**
+     * Test the property 'test'
+     */
+    @Test
+    public void testTest() {
+        // TODO: test test
+    }
+
+}
diff --git a/src/test/java/com/docspring/CombinedSubmissionTest.java b/src/test/java/com/docspring/CombinedSubmissionTest.java
new file mode 100644
index 0000000..d10d627
--- /dev/null
+++ b/src/test/java/com/docspring/CombinedSubmissionTest.java
@@ -0,0 +1,156 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.CombinedSubmissionAction;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CombinedSubmission
+ */
+public class CombinedSubmissionTest {
+    private final CombinedSubmission model = new CombinedSubmission();
+
+    /**
+     * Model tests for CombinedSubmission
+     */
+    @Test
+    public void testCombinedSubmission() {
+        // TODO: test CombinedSubmission
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'expired'
+     */
+    @Test
+    public void expiredTest() {
+        // TODO: test expired
+    }
+
+    /**
+     * Test the property 'expiresIn'
+     */
+    @Test
+    public void expiresInTest() {
+        // TODO: test expiresIn
+    }
+
+    /**
+     * Test the property 'expiresAt'
+     */
+    @Test
+    public void expiresAtTest() {
+        // TODO: test expiresAt
+    }
+
+    /**
+     * Test the property 'processedAt'
+     */
+    @Test
+    public void processedAtTest() {
+        // TODO: test processedAt
+    }
+
+    /**
+     * Test the property 'errorMessage'
+     */
+    @Test
+    public void errorMessageTest() {
+        // TODO: test errorMessage
+    }
+
+    /**
+     * Test the property 'submissionIds'
+     */
+    @Test
+    public void submissionIdsTest() {
+        // TODO: test submissionIds
+    }
+
+    /**
+     * Test the property 'sourcePdfs'
+     */
+    @Test
+    public void sourcePdfsTest() {
+        // TODO: test sourcePdfs
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'password'
+     */
+    @Test
+    public void passwordTest() {
+        // TODO: test password
+    }
+
+    /**
+     * Test the property 'pdfHash'
+     */
+    @Test
+    public void pdfHashTest() {
+        // TODO: test pdfHash
+    }
+
+    /**
+     * Test the property 'downloadUrl'
+     */
+    @Test
+    public void downloadUrlTest() {
+        // TODO: test downloadUrl
+    }
+
+    /**
+     * Test the property 'actions'
+     */
+    @Test
+    public void actionsTest() {
+        // TODO: test actions
+    }
+
+}
diff --git a/src/test/java/com/docspring/CopyTemplateOptionsTest.java b/src/test/java/com/docspring/CopyTemplateOptionsTest.java
new file mode 100644
index 0000000..a54f6c8
--- /dev/null
+++ b/src/test/java/com/docspring/CopyTemplateOptionsTest.java
@@ -0,0 +1,57 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CopyTemplateOptions
+ */
+public class CopyTemplateOptionsTest {
+    private final CopyTemplateOptions model = new CopyTemplateOptions();
+
+    /**
+     * Model tests for CopyTemplateOptions
+     */
+    @Test
+    public void testCopyTemplateOptions() {
+        // TODO: test CopyTemplateOptions
+    }
+
+    /**
+     * Test the property 'name'
+     */
+    @Test
+    public void nameTest() {
+        // TODO: test name
+    }
+
+    /**
+     * Test the property 'parentFolderId'
+     */
+    @Test
+    public void parentFolderIdTest() {
+        // TODO: test parentFolderId
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateCombinedSubmissionResponseTest.java b/src/test/java/com/docspring/CreateCombinedSubmissionResponseTest.java
new file mode 100644
index 0000000..cda968d
--- /dev/null
+++ b/src/test/java/com/docspring/CreateCombinedSubmissionResponseTest.java
@@ -0,0 +1,68 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.CombinedSubmission;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateCombinedSubmissionResponse
+ */
+public class CreateCombinedSubmissionResponseTest {
+    private final CreateCombinedSubmissionResponse model = new CreateCombinedSubmissionResponse();
+
+    /**
+     * Model tests for CreateCombinedSubmissionResponse
+     */
+    @Test
+    public void testCreateCombinedSubmissionResponse() {
+        // TODO: test CreateCombinedSubmissionResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'combinedSubmission'
+     */
+    @Test
+    public void combinedSubmissionTest() {
+        // TODO: test combinedSubmission
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateCustomFileDataTest.java b/src/test/java/com/docspring/CreateCustomFileDataTest.java
new file mode 100644
index 0000000..adc89b1
--- /dev/null
+++ b/src/test/java/com/docspring/CreateCustomFileDataTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateCustomFileData
+ */
+public class CreateCustomFileDataTest {
+    private final CreateCustomFileData model = new CreateCustomFileData();
+
+    /**
+     * Model tests for CreateCustomFileData
+     */
+    @Test
+    public void testCreateCustomFileData() {
+        // TODO: test CreateCustomFileData
+    }
+
+    /**
+     * Test the property 'cacheId'
+     */
+    @Test
+    public void cacheIdTest() {
+        // TODO: test cacheId
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateCustomFileResponseTest.java b/src/test/java/com/docspring/CreateCustomFileResponseTest.java
new file mode 100644
index 0000000..9f17154
--- /dev/null
+++ b/src/test/java/com/docspring/CreateCustomFileResponseTest.java
@@ -0,0 +1,68 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.CustomFile;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateCustomFileResponse
+ */
+public class CreateCustomFileResponseTest {
+    private final CreateCustomFileResponse model = new CreateCustomFileResponse();
+
+    /**
+     * Model tests for CreateCustomFileResponse
+     */
+    @Test
+    public void testCreateCustomFileResponse() {
+        // TODO: test CreateCustomFileResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'customFile'
+     */
+    @Test
+    public void customFileTest() {
+        // TODO: test customFile
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateFolderDataTest.java b/src/test/java/com/docspring/CreateFolderDataTest.java
new file mode 100644
index 0000000..bc7576d
--- /dev/null
+++ b/src/test/java/com/docspring/CreateFolderDataTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateFolderData
+ */
+public class CreateFolderDataTest {
+    private final CreateFolderData model = new CreateFolderData();
+
+    /**
+     * Model tests for CreateFolderData
+     */
+    @Test
+    public void testCreateFolderData() {
+        // TODO: test CreateFolderData
+    }
+
+    /**
+     * Test the property 'folder'
+     */
+    @Test
+    public void folderTest() {
+        // TODO: test folder
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java b/src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java
new file mode 100644
index 0000000..86a6b4a
--- /dev/null
+++ b/src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java
@@ -0,0 +1,113 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateHtmlSubmissionData
+ */
+public class CreateHtmlSubmissionDataTest {
+    private final CreateHtmlSubmissionData model = new CreateHtmlSubmissionData();
+
+    /**
+     * Model tests for CreateHtmlSubmissionData
+     */
+    @Test
+    public void testCreateHtmlSubmissionData() {
+        // TODO: test CreateHtmlSubmissionData
+    }
+
+    /**
+     * Test the property 'css'
+     */
+    @Test
+    public void cssTest() {
+        // TODO: test css
+    }
+
+    /**
+     * Test the property 'data'
+     */
+    @Test
+    public void dataTest() {
+        // TODO: test data
+    }
+
+    /**
+     * Test the property 'editable'
+     */
+    @Test
+    public void editableTest() {
+        // TODO: test editable
+    }
+
+    /**
+     * Test the property 'expiresIn'
+     */
+    @Test
+    public void expiresInTest() {
+        // TODO: test expiresIn
+    }
+
+    /**
+     * Test the property 'fieldOverrides'
+     */
+    @Test
+    public void fieldOverridesTest() {
+        // TODO: test fieldOverrides
+    }
+
+    /**
+     * Test the property 'html'
+     */
+    @Test
+    public void htmlTest() {
+        // TODO: test html
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'password'
+     */
+    @Test
+    public void passwordTest() {
+        // TODO: test password
+    }
+
+    /**
+     * Test the property 'test'
+     */
+    @Test
+    public void testTest() {
+        // TODO: test test
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateHtmlTemplateTest.java b/src/test/java/com/docspring/CreateHtmlTemplateTest.java
new file mode 100644
index 0000000..ff26d4d
--- /dev/null
+++ b/src/test/java/com/docspring/CreateHtmlTemplateTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateHtmlTemplate
+ */
+public class CreateHtmlTemplateTest {
+    private final CreateHtmlTemplate model = new CreateHtmlTemplate();
+
+    /**
+     * Model tests for CreateHtmlTemplate
+     */
+    @Test
+    public void testCreateHtmlTemplate() {
+        // TODO: test CreateHtmlTemplate
+    }
+
+    /**
+     * Test the property 'template'
+     */
+    @Test
+    public void templateTest() {
+        // TODO: test template
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreatePdfSubmissionDataTest.java b/src/test/java/com/docspring/CreatePdfSubmissionDataTest.java
new file mode 100644
index 0000000..6b8e50e
--- /dev/null
+++ b/src/test/java/com/docspring/CreatePdfSubmissionDataTest.java
@@ -0,0 +1,108 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.CreateSubmissionDataRequestData;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreatePdfSubmissionData
+ */
+public class CreatePdfSubmissionDataTest {
+    private final CreatePdfSubmissionData model = new CreatePdfSubmissionData();
+
+    /**
+     * Model tests for CreatePdfSubmissionData
+     */
+    @Test
+    public void testCreatePdfSubmissionData() {
+        // TODO: test CreatePdfSubmissionData
+    }
+
+    /**
+     * Test the property 'data'
+     */
+    @Test
+    public void dataTest() {
+        // TODO: test data
+    }
+
+    /**
+     * Test the property 'dataRequests'
+     */
+    @Test
+    public void dataRequestsTest() {
+        // TODO: test dataRequests
+    }
+
+    /**
+     * Test the property 'editable'
+     */
+    @Test
+    public void editableTest() {
+        // TODO: test editable
+    }
+
+    /**
+     * Test the property 'expiresIn'
+     */
+    @Test
+    public void expiresInTest() {
+        // TODO: test expiresIn
+    }
+
+    /**
+     * Test the property 'fieldOverrides'
+     */
+    @Test
+    public void fieldOverridesTest() {
+        // TODO: test fieldOverrides
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'password'
+     */
+    @Test
+    public void passwordTest() {
+        // TODO: test password
+    }
+
+    /**
+     * Test the property 'test'
+     */
+    @Test
+    public void testTest() {
+        // TODO: test test
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreatePdfTemplateTest.java b/src/test/java/com/docspring/CreatePdfTemplateTest.java
new file mode 100644
index 0000000..bc29d0f
--- /dev/null
+++ b/src/test/java/com/docspring/CreatePdfTemplateTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreatePdfTemplate
+ */
+public class CreatePdfTemplateTest {
+    private final CreatePdfTemplate model = new CreatePdfTemplate();
+
+    /**
+     * Model tests for CreatePdfTemplate
+     */
+    @Test
+    public void testCreatePdfTemplate() {
+        // TODO: test CreatePdfTemplate
+    }
+
+    /**
+     * Test the property 'template'
+     */
+    @Test
+    public void templateTest() {
+        // TODO: test template
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateSubmissionDataRequestDataTest.java b/src/test/java/com/docspring/CreateSubmissionDataRequestDataTest.java
new file mode 100644
index 0000000..7832e57
--- /dev/null
+++ b/src/test/java/com/docspring/CreateSubmissionDataRequestDataTest.java
@@ -0,0 +1,83 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateSubmissionDataRequestData
+ */
+public class CreateSubmissionDataRequestDataTest {
+    private final CreateSubmissionDataRequestData model = new CreateSubmissionDataRequestData();
+
+    /**
+     * Model tests for CreateSubmissionDataRequestData
+     */
+    @Test
+    public void testCreateSubmissionDataRequestData() {
+        // TODO: test CreateSubmissionDataRequestData
+    }
+
+    /**
+     * Test the property 'authSecondFactorType'
+     */
+    @Test
+    public void authSecondFactorTypeTest() {
+        // TODO: test authSecondFactorType
+    }
+
+    /**
+     * Test the property 'authType'
+     */
+    @Test
+    public void authTypeTest() {
+        // TODO: test authType
+    }
+
+    /**
+     * Test the property 'fields'
+     */
+    @Test
+    public void fieldsTest() {
+        // TODO: test fields
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'order'
+     */
+    @Test
+    public void orderTest() {
+        // TODO: test order
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateSubmissionDataRequestEventRequestTest.java b/src/test/java/com/docspring/CreateSubmissionDataRequestEventRequestTest.java
new file mode 100644
index 0000000..eeae3d1
--- /dev/null
+++ b/src/test/java/com/docspring/CreateSubmissionDataRequestEventRequestTest.java
@@ -0,0 +1,61 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import org.openapitools.jackson.nullable.JsonNullable;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.util.NoSuchElementException;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateSubmissionDataRequestEventRequest
+ */
+public class CreateSubmissionDataRequestEventRequestTest {
+    private final CreateSubmissionDataRequestEventRequest model = new CreateSubmissionDataRequestEventRequest();
+
+    /**
+     * Model tests for CreateSubmissionDataRequestEventRequest
+     */
+    @Test
+    public void testCreateSubmissionDataRequestEventRequest() {
+        // TODO: test CreateSubmissionDataRequestEventRequest
+    }
+
+    /**
+     * Test the property 'eventType'
+     */
+    @Test
+    public void eventTypeTest() {
+        // TODO: test eventType
+    }
+
+    /**
+     * Test the property 'messageType'
+     */
+    @Test
+    public void messageTypeTest() {
+        // TODO: test messageType
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateSubmissionDataRequestEventResponseTest.java b/src/test/java/com/docspring/CreateSubmissionDataRequestEventResponseTest.java
new file mode 100644
index 0000000..8b605e8
--- /dev/null
+++ b/src/test/java/com/docspring/CreateSubmissionDataRequestEventResponseTest.java
@@ -0,0 +1,68 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.SubmissionDataRequestEvent;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateSubmissionDataRequestEventResponse
+ */
+public class CreateSubmissionDataRequestEventResponseTest {
+    private final CreateSubmissionDataRequestEventResponse model = new CreateSubmissionDataRequestEventResponse();
+
+    /**
+     * Model tests for CreateSubmissionDataRequestEventResponse
+     */
+    @Test
+    public void testCreateSubmissionDataRequestEventResponse() {
+        // TODO: test CreateSubmissionDataRequestEventResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'event'
+     */
+    @Test
+    public void eventTest() {
+        // TODO: test event
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateSubmissionDataRequestResponseTest.java b/src/test/java/com/docspring/CreateSubmissionDataRequestResponseTest.java
new file mode 100644
index 0000000..d2b00fd
--- /dev/null
+++ b/src/test/java/com/docspring/CreateSubmissionDataRequestResponseTest.java
@@ -0,0 +1,68 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.SubmissionDataRequestShow;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateSubmissionDataRequestResponse
+ */
+public class CreateSubmissionDataRequestResponseTest {
+    private final CreateSubmissionDataRequestResponse model = new CreateSubmissionDataRequestResponse();
+
+    /**
+     * Model tests for CreateSubmissionDataRequestResponse
+     */
+    @Test
+    public void testCreateSubmissionDataRequestResponse() {
+        // TODO: test CreateSubmissionDataRequestResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'dataRequest'
+     */
+    @Test
+    public void dataRequestTest() {
+        // TODO: test dataRequest
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateSubmissionDataRequestTokenResponseTest.java b/src/test/java/com/docspring/CreateSubmissionDataRequestTokenResponseTest.java
new file mode 100644
index 0000000..380aedc
--- /dev/null
+++ b/src/test/java/com/docspring/CreateSubmissionDataRequestTokenResponseTest.java
@@ -0,0 +1,68 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.SubmissionDataRequestToken;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateSubmissionDataRequestTokenResponse
+ */
+public class CreateSubmissionDataRequestTokenResponseTest {
+    private final CreateSubmissionDataRequestTokenResponse model = new CreateSubmissionDataRequestTokenResponse();
+
+    /**
+     * Model tests for CreateSubmissionDataRequestTokenResponse
+     */
+    @Test
+    public void testCreateSubmissionDataRequestTokenResponse() {
+        // TODO: test CreateSubmissionDataRequestTokenResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'token'
+     */
+    @Test
+    public void tokenTest() {
+        // TODO: test token
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/CreateSubmissionResponseTest.java b/src/test/java/com/docspring/CreateSubmissionResponseTest.java
new file mode 100644
index 0000000..dea092f
--- /dev/null
+++ b/src/test/java/com/docspring/CreateSubmissionResponseTest.java
@@ -0,0 +1,68 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.SubmissionPreview;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CreateSubmissionResponse
+ */
+public class CreateSubmissionResponseTest {
+    private final CreateSubmissionResponse model = new CreateSubmissionResponse();
+
+    /**
+     * Model tests for CreateSubmissionResponse
+     */
+    @Test
+    public void testCreateSubmissionResponse() {
+        // TODO: test CreateSubmissionResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'submission'
+     */
+    @Test
+    public void submissionTest() {
+        // TODO: test submission
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/CustomFileTest.java b/src/test/java/com/docspring/CustomFileTest.java
new file mode 100644
index 0000000..5c9c5f6
--- /dev/null
+++ b/src/test/java/com/docspring/CustomFileTest.java
@@ -0,0 +1,57 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for CustomFile
+ */
+public class CustomFileTest {
+    private final CustomFile model = new CustomFile();
+
+    /**
+     * Model tests for CustomFile
+     */
+    @Test
+    public void testCustomFile() {
+        // TODO: test CustomFile
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'url'
+     */
+    @Test
+    public void urlTest() {
+        // TODO: test url
+    }
+
+}
diff --git a/src/test/java/com/docspring/ErrorResponseTest.java b/src/test/java/com/docspring/ErrorResponseTest.java
new file mode 100644
index 0000000..8931711
--- /dev/null
+++ b/src/test/java/com/docspring/ErrorResponseTest.java
@@ -0,0 +1,57 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for ErrorResponse
+ */
+public class ErrorResponseTest {
+    private final ErrorResponse model = new ErrorResponse();
+
+    /**
+     * Model tests for ErrorResponse
+     */
+    @Test
+    public void testErrorResponse() {
+        // TODO: test ErrorResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'error'
+     */
+    @Test
+    public void errorTest() {
+        // TODO: test error
+    }
+
+}
diff --git a/src/test/java/com/docspring/FolderTest.java b/src/test/java/com/docspring/FolderTest.java
new file mode 100644
index 0000000..3bcfcc5
--- /dev/null
+++ b/src/test/java/com/docspring/FolderTest.java
@@ -0,0 +1,73 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for Folder
+ */
+public class FolderTest {
+    private final Folder model = new Folder();
+
+    /**
+     * Model tests for Folder
+     */
+    @Test
+    public void testFolder() {
+        // TODO: test Folder
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'name'
+     */
+    @Test
+    public void nameTest() {
+        // TODO: test name
+    }
+
+    /**
+     * Test the property 'path'
+     */
+    @Test
+    public void pathTest() {
+        // TODO: test path
+    }
+
+    /**
+     * Test the property 'parentFolderId'
+     */
+    @Test
+    public void parentFolderIdTest() {
+        // TODO: test parentFolderId
+    }
+
+}
diff --git a/src/test/java/com/docspring/JsonSchemaTest.java b/src/test/java/com/docspring/JsonSchemaTest.java
new file mode 100644
index 0000000..c4b3a60
--- /dev/null
+++ b/src/test/java/com/docspring/JsonSchemaTest.java
@@ -0,0 +1,116 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for JsonSchema
+ */
+public class JsonSchemaTest {
+    private final JsonSchema model = new JsonSchema();
+
+    /**
+     * Model tests for JsonSchema
+     */
+    @Test
+    public void testJsonSchema() {
+        // TODO: test JsonSchema
+    }
+
+    /**
+     * Test the property '$schema'
+     */
+    @Test
+    public void $schemaTest() {
+        // TODO: test $schema
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'title'
+     */
+    @Test
+    public void titleTest() {
+        // TODO: test title
+    }
+
+    /**
+     * Test the property 'description'
+     */
+    @Test
+    public void descriptionTest() {
+        // TODO: test description
+    }
+
+    /**
+     * Test the property 'definitions'
+     */
+    @Test
+    public void definitionsTest() {
+        // TODO: test definitions
+    }
+
+    /**
+     * Test the property 'type'
+     */
+    @Test
+    public void typeTest() {
+        // TODO: test type
+    }
+
+    /**
+     * Test the property 'properties'
+     */
+    @Test
+    public void propertiesTest() {
+        // TODO: test properties
+    }
+
+    /**
+     * Test the property 'additionalProperties'
+     */
+    @Test
+    public void additionalPropertiesTest() {
+        // TODO: test additionalProperties
+    }
+
+    /**
+     * Test the property 'required'
+     */
+    @Test
+    public void requiredTest() {
+        // TODO: test required
+    }
+
+}
diff --git a/src/test/java/com/docspring/ListSubmissionsResponseTest.java b/src/test/java/com/docspring/ListSubmissionsResponseTest.java
new file mode 100644
index 0000000..a5989c2
--- /dev/null
+++ b/src/test/java/com/docspring/ListSubmissionsResponseTest.java
@@ -0,0 +1,69 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.Submission;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for ListSubmissionsResponse
+ */
+public class ListSubmissionsResponseTest {
+    private final ListSubmissionsResponse model = new ListSubmissionsResponse();
+
+    /**
+     * Model tests for ListSubmissionsResponse
+     */
+    @Test
+    public void testListSubmissionsResponse() {
+        // TODO: test ListSubmissionsResponse
+    }
+
+    /**
+     * Test the property 'submissions'
+     */
+    @Test
+    public void submissionsTest() {
+        // TODO: test submissions
+    }
+
+    /**
+     * Test the property 'limit'
+     */
+    @Test
+    public void limitTest() {
+        // TODO: test limit
+    }
+
+    /**
+     * Test the property 'nextCursor'
+     */
+    @Test
+    public void nextCursorTest() {
+        // TODO: test nextCursor
+    }
+
+}
diff --git a/src/test/java/com/docspring/MoveFolderDataTest.java b/src/test/java/com/docspring/MoveFolderDataTest.java
new file mode 100644
index 0000000..f0f7f57
--- /dev/null
+++ b/src/test/java/com/docspring/MoveFolderDataTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for MoveFolderData
+ */
+public class MoveFolderDataTest {
+    private final MoveFolderData model = new MoveFolderData();
+
+    /**
+     * Model tests for MoveFolderData
+     */
+    @Test
+    public void testMoveFolderData() {
+        // TODO: test MoveFolderData
+    }
+
+    /**
+     * Test the property 'parentFolderId'
+     */
+    @Test
+    public void parentFolderIdTest() {
+        // TODO: test parentFolderId
+    }
+
+}
diff --git a/src/test/java/com/docspring/MoveTemplateDataTest.java b/src/test/java/com/docspring/MoveTemplateDataTest.java
new file mode 100644
index 0000000..352851c
--- /dev/null
+++ b/src/test/java/com/docspring/MoveTemplateDataTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for MoveTemplateData
+ */
+public class MoveTemplateDataTest {
+    private final MoveTemplateData model = new MoveTemplateData();
+
+    /**
+     * Model tests for MoveTemplateData
+     */
+    @Test
+    public void testMoveTemplateData() {
+        // TODO: test MoveTemplateData
+    }
+
+    /**
+     * Test the property 'parentFolderId'
+     */
+    @Test
+    public void parentFolderIdTest() {
+        // TODO: test parentFolderId
+    }
+
+}
diff --git a/src/test/java/com/docspring/MultipleErrorsResponseTest.java b/src/test/java/com/docspring/MultipleErrorsResponseTest.java
new file mode 100644
index 0000000..2f18523
--- /dev/null
+++ b/src/test/java/com/docspring/MultipleErrorsResponseTest.java
@@ -0,0 +1,59 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for MultipleErrorsResponse
+ */
+public class MultipleErrorsResponseTest {
+    private final MultipleErrorsResponse model = new MultipleErrorsResponse();
+
+    /**
+     * Model tests for MultipleErrorsResponse
+     */
+    @Test
+    public void testMultipleErrorsResponse() {
+        // TODO: test MultipleErrorsResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/PdfApiTest.java.original b/src/test/java/com/docspring/PdfApiTest.java.original
new file mode 100644
index 0000000..392aebb
--- /dev/null
+++ b/src/test/java/com/docspring/PdfApiTest.java.original
@@ -0,0 +1,567 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.*;
+import com.docspring.auth.*;
+import com.docspring.AddFieldsData;
+import com.docspring.BatchGeneratePdfs201Response;
+import java.math.BigDecimal;
+import com.docspring.CombinePdfsData;
+import com.docspring.CombinedSubmission;
+import com.docspring.CombinedSubmissionData;
+import com.docspring.CopyTemplateOptions;
+import com.docspring.CreateCombinedSubmissionResponse;
+import com.docspring.CreateCustomFileData;
+import com.docspring.CreateCustomFileResponse;
+import com.docspring.CreateFolderData;
+import com.docspring.CreateHtmlSubmissionData;
+import com.docspring.CreateHtmlTemplate;
+import com.docspring.CreatePdfSubmissionData;
+import com.docspring.CreatePdfTemplate;
+import com.docspring.CreateSubmissionDataRequestEventRequest;
+import com.docspring.CreateSubmissionDataRequestEventResponse;
+import com.docspring.CreateSubmissionDataRequestResponse;
+import com.docspring.CreateSubmissionDataRequestTokenResponse;
+import com.docspring.CreateSubmissionResponse;
+import com.docspring.ErrorResponse;
+import java.io.File;
+import com.docspring.Folder;
+import com.docspring.JsonSchema;
+import com.docspring.ListSubmissionsResponse;
+import com.docspring.MoveFolderData;
+import com.docspring.MoveTemplateData;
+import com.docspring.MultipleErrorsResponse;
+import com.docspring.RenameFolderData;
+import com.docspring.Submission;
+import com.docspring.SubmissionBatchData;
+import com.docspring.SubmissionBatchWithSubmissions;
+import com.docspring.SubmissionDataRequestShow;
+import com.docspring.SubmissionPreview;
+import com.docspring.SuccessErrorResponse;
+import com.docspring.SuccessMultipleErrorsResponse;
+import com.docspring.Template;
+import com.docspring.TemplateAddFieldsResponse;
+import com.docspring.TemplatePreview;
+import com.docspring.UpdateHtmlTemplate;
+import com.docspring.UpdateSubmissionDataRequestData;
+import com.docspring.UploadPresignResponse;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * API tests for PdfApi
+ */
+public class PdfApiTest {
+
+    private final PdfApi api = new PdfApi();
+
+    /**
+     * Add new fields to a Template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void addFieldsToTemplateTest() throws ApiException {
+        //String templateId = null;
+        //AddFieldsData data = null;
+        //TemplateAddFieldsResponse response = api.addFieldsToTemplate(templateId, data);
+        // TODO: test validations
+    }
+
+    /**
+     * Generates multiple PDFs
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void batchGeneratePdfsTest() throws ApiException {
+        //SubmissionBatchData data = null;
+        //Boolean wait = null;
+        //BatchGeneratePdfs201Response response = api.batchGeneratePdfs(data, wait);
+        // TODO: test validations
+    }
+
+    /**
+     * Merge submission PDFs, template PDFs, or custom files
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void combinePdfsTest() throws ApiException {
+        //CombinePdfsData data = null;
+        //CreateCombinedSubmissionResponse response = api.combinePdfs(data);
+        // TODO: test validations
+    }
+
+    /**
+     * Merge generated PDFs together
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void combineSubmissionsTest() throws ApiException {
+        //CombinedSubmissionData data = null;
+        //Boolean wait = null;
+        //CreateCombinedSubmissionResponse response = api.combineSubmissions(data, wait);
+        // TODO: test validations
+    }
+
+    /**
+     * Copy a Template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void copyTemplateTest() throws ApiException {
+        //String templateId = null;
+        //CopyTemplateOptions options = null;
+        //TemplatePreview response = api.copyTemplate(templateId, options);
+        // TODO: test validations
+    }
+
+    /**
+     * Create a new custom file from a cached presign upload
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void createCustomFileFromUploadTest() throws ApiException {
+        //CreateCustomFileData data = null;
+        //CreateCustomFileResponse response = api.createCustomFileFromUpload(data);
+        // TODO: test validations
+    }
+
+    /**
+     * Creates a new event for emailing a signee a request for signature
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void createDataRequestEventTest() throws ApiException {
+        //String dataRequestId = null;
+        //CreateSubmissionDataRequestEventRequest event = null;
+        //CreateSubmissionDataRequestEventResponse response = api.createDataRequestEvent(dataRequestId, event);
+        // TODO: test validations
+    }
+
+    /**
+     * Creates a new data request token for form authentication
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void createDataRequestTokenTest() throws ApiException {
+        //String dataRequestId = null;
+        //String type = null;
+        //CreateSubmissionDataRequestTokenResponse response = api.createDataRequestToken(dataRequestId, type);
+        // TODO: test validations
+    }
+
+    /**
+     * Create a folder
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void createFolderTest() throws ApiException {
+        //CreateFolderData data = null;
+        //Folder response = api.createFolder(data);
+        // TODO: test validations
+    }
+
+    /**
+     * Create a new HTML template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void createHTMLTemplateTest() throws ApiException {
+        //CreateHtmlTemplate data = null;
+        //TemplatePreview response = api.createHTMLTemplate(data);
+        // TODO: test validations
+    }
+
+    /**
+     * Create a new PDF template with a form POST file upload
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void createPDFTemplateTest() throws ApiException {
+        //File templateDocument = null;
+        //String templateName = null;
+        //Boolean wait = null;
+        //String templateDescription = null;
+        //String templateParentFolderId = null;
+        //TemplatePreview response = api.createPDFTemplate(templateDocument, templateName, wait, templateDescription, templateParentFolderId);
+        // TODO: test validations
+    }
+
+    /**
+     * Create a new PDF template from a cached presign upload
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void createPDFTemplateFromUploadTest() throws ApiException {
+        //CreatePdfTemplate data = null;
+        //TemplatePreview response = api.createPDFTemplateFromUpload(data);
+        // TODO: test validations
+    }
+
+    /**
+     * Delete a folder
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void deleteFolderTest() throws ApiException {
+        //String folderId = null;
+        //Folder response = api.deleteFolder(folderId);
+        // TODO: test validations
+    }
+
+    /**
+     * Delete a template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void deleteTemplateTest() throws ApiException {
+        //String templateId = null;
+        //SuccessMultipleErrorsResponse response = api.deleteTemplate(templateId);
+        // TODO: test validations
+    }
+
+    /**
+     * Expire a combined submission
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void expireCombinedSubmissionTest() throws ApiException {
+        //String combinedSubmissionId = null;
+        //CombinedSubmission response = api.expireCombinedSubmission(combinedSubmissionId);
+        // TODO: test validations
+    }
+
+    /**
+     * Expire a PDF submission
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void expireSubmissionTest() throws ApiException {
+        //String submissionId = null;
+        //SubmissionPreview response = api.expireSubmission(submissionId);
+        // TODO: test validations
+    }
+
+    /**
+     * Generates a new PDF
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void generatePdfTest() throws ApiException {
+        //String templateId = null;
+        //CreatePdfSubmissionData submission = null;
+        //Boolean wait = null;
+        //CreateSubmissionResponse response = api.generatePdf(templateId, submission, wait);
+        // TODO: test validations
+    }
+
+    /**
+     * Generates a new PDF for an HTML template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void generatePdfForHtmlTemplateTest() throws ApiException {
+        //String templateId = null;
+        //CreateHtmlSubmissionData submission = null;
+        //Boolean wait = null;
+        //CreateSubmissionResponse response = api.generatePdfForHtmlTemplate(templateId, submission, wait);
+        // TODO: test validations
+    }
+
+    /**
+     * Generated a preview PDF for partially completed data requests
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void generatePreviewTest() throws ApiException {
+        //String submissionId = null;
+        //SuccessErrorResponse response = api.generatePreview(submissionId);
+        // TODO: test validations
+    }
+
+    /**
+     * Check the status of a combined submission (merged PDFs)
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void getCombinedSubmissionTest() throws ApiException {
+        //String combinedSubmissionId = null;
+        //CombinedSubmission response = api.getCombinedSubmission(combinedSubmissionId);
+        // TODO: test validations
+    }
+
+    /**
+     * Look up a submission data request
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void getDataRequestTest() throws ApiException {
+        //String dataRequestId = null;
+        //SubmissionDataRequestShow response = api.getDataRequest(dataRequestId);
+        // TODO: test validations
+    }
+
+    /**
+     * Fetch the full template attributes
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void getFullTemplateTest() throws ApiException {
+        //String templateId = null;
+        //Template response = api.getFullTemplate(templateId);
+        // TODO: test validations
+    }
+
+    /**
+     * Get a presigned URL so that you can upload a file to our AWS S3 bucket
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void getPresignUrlTest() throws ApiException {
+        //UploadPresignResponse response = api.getPresignUrl();
+        // TODO: test validations
+    }
+
+    /**
+     * Check the status of a PDF
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void getSubmissionTest() throws ApiException {
+        //String submissionId = null;
+        //Boolean includeData = null;
+        //Submission response = api.getSubmission(submissionId, includeData);
+        // TODO: test validations
+    }
+
+    /**
+     * Check the status of a submission batch job
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void getSubmissionBatchTest() throws ApiException {
+        //String submissionBatchId = null;
+        //Boolean includeSubmissions = null;
+        //SubmissionBatchWithSubmissions response = api.getSubmissionBatch(submissionBatchId, includeSubmissions);
+        // TODO: test validations
+    }
+
+    /**
+     * Check the status of an uploaded template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void getTemplateTest() throws ApiException {
+        //String templateId = null;
+        //TemplatePreview response = api.getTemplate(templateId);
+        // TODO: test validations
+    }
+
+    /**
+     * Fetch the JSON schema for a template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void getTemplateSchemaTest() throws ApiException {
+        //String templateId = null;
+        //JsonSchema response = api.getTemplateSchema(templateId);
+        // TODO: test validations
+    }
+
+    /**
+     * Get a list of all combined submissions
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void listCombinedSubmissionsTest() throws ApiException {
+        //Integer page = null;
+        //Integer perPage = null;
+        //List<CombinedSubmission> response = api.listCombinedSubmissions(page, perPage);
+        // TODO: test validations
+    }
+
+    /**
+     * Get a list of all folders
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void listFoldersTest() throws ApiException {
+        //String parentFolderId = null;
+        //List<Folder> response = api.listFolders(parentFolderId);
+        // TODO: test validations
+    }
+
+    /**
+     * List all submissions
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void listSubmissionsTest() throws ApiException {
+        //String cursor = null;
+        //BigDecimal limit = null;
+        //String createdAfter = null;
+        //String createdBefore = null;
+        //String type = null;
+        //Boolean includeData = null;
+        //ListSubmissionsResponse response = api.listSubmissions(cursor, limit, createdAfter, createdBefore, type, includeData);
+        // TODO: test validations
+    }
+
+    /**
+     * List all submissions for a given template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void listTemplateSubmissionsTest() throws ApiException {
+        //String templateId = null;
+        //String cursor = null;
+        //BigDecimal limit = null;
+        //String createdAfter = null;
+        //String createdBefore = null;
+        //String type = null;
+        //Boolean includeData = null;
+        //ListSubmissionsResponse response = api.listTemplateSubmissions(templateId, cursor, limit, createdAfter, createdBefore, type, includeData);
+        // TODO: test validations
+    }
+
+    /**
+     * Get a list of all templates
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void listTemplatesTest() throws ApiException {
+        //String query = null;
+        //String parentFolderId = null;
+        //Integer page = null;
+        //Integer perPage = null;
+        //List<TemplatePreview> response = api.listTemplates(query, parentFolderId, page, perPage);
+        // TODO: test validations
+    }
+
+    /**
+     * Move a folder
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void moveFolderToFolderTest() throws ApiException {
+        //String folderId = null;
+        //MoveFolderData data = null;
+        //Folder response = api.moveFolderToFolder(folderId, data);
+        // TODO: test validations
+    }
+
+    /**
+     * Move Template to folder
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void moveTemplateToFolderTest() throws ApiException {
+        //String templateId = null;
+        //MoveTemplateData data = null;
+        //TemplatePreview response = api.moveTemplateToFolder(templateId, data);
+        // TODO: test validations
+    }
+
+    /**
+     * Rename a folder
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void renameFolderTest() throws ApiException {
+        //String folderId = null;
+        //RenameFolderData data = null;
+        //Folder response = api.renameFolder(folderId, data);
+        // TODO: test validations
+    }
+
+    /**
+     * Test Authentication
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void testAuthenticationTest() throws ApiException {
+        //SuccessErrorResponse response = api.testAuthentication();
+        // TODO: test validations
+    }
+
+    /**
+     * Update a submission data request
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void updateDataRequestTest() throws ApiException {
+        //String dataRequestId = null;
+        //UpdateSubmissionDataRequestData data = null;
+        //CreateSubmissionDataRequestResponse response = api.updateDataRequest(dataRequestId, data);
+        // TODO: test validations
+    }
+
+    /**
+     * Update a Template
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void updateTemplateTest() throws ApiException {
+        //String templateId = null;
+        //UpdateHtmlTemplate data = null;
+        //SuccessMultipleErrorsResponse response = api.updateTemplate(templateId, data);
+        // TODO: test validations
+    }
+
+}
diff --git a/src/test/java/com/docspring/RenameFolderDataTest.java b/src/test/java/com/docspring/RenameFolderDataTest.java
new file mode 100644
index 0000000..d53a6ce
--- /dev/null
+++ b/src/test/java/com/docspring/RenameFolderDataTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for RenameFolderData
+ */
+public class RenameFolderDataTest {
+    private final RenameFolderData model = new RenameFolderData();
+
+    /**
+     * Model tests for RenameFolderData
+     */
+    @Test
+    public void testRenameFolderData() {
+        // TODO: test RenameFolderData
+    }
+
+    /**
+     * Test the property 'name'
+     */
+    @Test
+    public void nameTest() {
+        // TODO: test name
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionActionTest.java b/src/test/java/com/docspring/SubmissionActionTest.java
new file mode 100644
index 0000000..2e1ba64
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionActionTest.java
@@ -0,0 +1,89 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionAction
+ */
+public class SubmissionActionTest {
+    private final SubmissionAction model = new SubmissionAction();
+
+    /**
+     * Model tests for SubmissionAction
+     */
+    @Test
+    public void testSubmissionAction() {
+        // TODO: test SubmissionAction
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'integrationId'
+     */
+    @Test
+    public void integrationIdTest() {
+        // TODO: test integrationId
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'actionType'
+     */
+    @Test
+    public void actionTypeTest() {
+        // TODO: test actionType
+    }
+
+    /**
+     * Test the property 'actionCategory'
+     */
+    @Test
+    public void actionCategoryTest() {
+        // TODO: test actionCategory
+    }
+
+    /**
+     * Test the property 'resultData'
+     */
+    @Test
+    public void resultDataTest() {
+        // TODO: test resultData
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionBatchDataTest.java b/src/test/java/com/docspring/SubmissionBatchDataTest.java
new file mode 100644
index 0000000..e886fdf
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionBatchDataTest.java
@@ -0,0 +1,67 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionBatchData
+ */
+public class SubmissionBatchDataTest {
+    private final SubmissionBatchData model = new SubmissionBatchData();
+
+    /**
+     * Model tests for SubmissionBatchData
+     */
+    @Test
+    public void testSubmissionBatchData() {
+        // TODO: test SubmissionBatchData
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'submissions'
+     */
+    @Test
+    public void submissionsTest() {
+        // TODO: test submissions
+    }
+
+    /**
+     * Test the property 'test'
+     */
+    @Test
+    public void testTest() {
+        // TODO: test test
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionBatchTest.java b/src/test/java/com/docspring/SubmissionBatchTest.java
new file mode 100644
index 0000000..665d37c
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionBatchTest.java
@@ -0,0 +1,106 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionBatch
+ */
+public class SubmissionBatchTest {
+    private final SubmissionBatch model = new SubmissionBatch();
+
+    /**
+     * Model tests for SubmissionBatch
+     */
+    @Test
+    public void testSubmissionBatch() {
+        // TODO: test SubmissionBatch
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'processedAt'
+     */
+    @Test
+    public void processedAtTest() {
+        // TODO: test processedAt
+    }
+
+    /**
+     * Test the property 'totalCount'
+     */
+    @Test
+    public void totalCountTest() {
+        // TODO: test totalCount
+    }
+
+    /**
+     * Test the property 'pendingCount'
+     */
+    @Test
+    public void pendingCountTest() {
+        // TODO: test pendingCount
+    }
+
+    /**
+     * Test the property 'errorCount'
+     */
+    @Test
+    public void errorCountTest() {
+        // TODO: test errorCount
+    }
+
+    /**
+     * Test the property 'completionPercentage'
+     */
+    @Test
+    public void completionPercentageTest() {
+        // TODO: test completionPercentage
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionBatchWithSubmissionsTest.java b/src/test/java/com/docspring/SubmissionBatchWithSubmissionsTest.java
new file mode 100644
index 0000000..e869313
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionBatchWithSubmissionsTest.java
@@ -0,0 +1,117 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.SubmissionPreview;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionBatchWithSubmissions
+ */
+public class SubmissionBatchWithSubmissionsTest {
+    private final SubmissionBatchWithSubmissions model = new SubmissionBatchWithSubmissions();
+
+    /**
+     * Model tests for SubmissionBatchWithSubmissions
+     */
+    @Test
+    public void testSubmissionBatchWithSubmissions() {
+        // TODO: test SubmissionBatchWithSubmissions
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'processedAt'
+     */
+    @Test
+    public void processedAtTest() {
+        // TODO: test processedAt
+    }
+
+    /**
+     * Test the property 'totalCount'
+     */
+    @Test
+    public void totalCountTest() {
+        // TODO: test totalCount
+    }
+
+    /**
+     * Test the property 'pendingCount'
+     */
+    @Test
+    public void pendingCountTest() {
+        // TODO: test pendingCount
+    }
+
+    /**
+     * Test the property 'errorCount'
+     */
+    @Test
+    public void errorCountTest() {
+        // TODO: test errorCount
+    }
+
+    /**
+     * Test the property 'completionPercentage'
+     */
+    @Test
+    public void completionPercentageTest() {
+        // TODO: test completionPercentage
+    }
+
+    /**
+     * Test the property 'submissions'
+     */
+    @Test
+    public void submissionsTest() {
+        // TODO: test submissions
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionDataRequestEventTest.java b/src/test/java/com/docspring/SubmissionDataRequestEventTest.java
new file mode 100644
index 0000000..0ff93b5
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionDataRequestEventTest.java
@@ -0,0 +1,97 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionDataRequestEvent
+ */
+public class SubmissionDataRequestEventTest {
+    private final SubmissionDataRequestEvent model = new SubmissionDataRequestEvent();
+
+    /**
+     * Model tests for SubmissionDataRequestEvent
+     */
+    @Test
+    public void testSubmissionDataRequestEvent() {
+        // TODO: test SubmissionDataRequestEvent
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'submissionId'
+     */
+    @Test
+    public void submissionIdTest() {
+        // TODO: test submissionId
+    }
+
+    /**
+     * Test the property 'submissionDataRequestId'
+     */
+    @Test
+    public void submissionDataRequestIdTest() {
+        // TODO: test submissionDataRequestId
+    }
+
+    /**
+     * Test the property 'eventType'
+     */
+    @Test
+    public void eventTypeTest() {
+        // TODO: test eventType
+    }
+
+    /**
+     * Test the property 'messageType'
+     */
+    @Test
+    public void messageTypeTest() {
+        // TODO: test messageType
+    }
+
+    /**
+     * Test the property 'messageRecipient'
+     */
+    @Test
+    public void messageRecipientTest() {
+        // TODO: test messageRecipient
+    }
+
+    /**
+     * Test the property 'occurredAt'
+     */
+    @Test
+    public void occurredAtTest() {
+        // TODO: test occurredAt
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionDataRequestShowTest.java b/src/test/java/com/docspring/SubmissionDataRequestShowTest.java
new file mode 100644
index 0000000..d7576e5
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionDataRequestShowTest.java
@@ -0,0 +1,219 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionDataRequestShow
+ */
+public class SubmissionDataRequestShowTest {
+    private final SubmissionDataRequestShow model = new SubmissionDataRequestShow();
+
+    /**
+     * Model tests for SubmissionDataRequestShow
+     */
+    @Test
+    public void testSubmissionDataRequestShow() {
+        // TODO: test SubmissionDataRequestShow
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'email'
+     */
+    @Test
+    public void emailTest() {
+        // TODO: test email
+    }
+
+    /**
+     * Test the property 'name'
+     */
+    @Test
+    public void nameTest() {
+        // TODO: test name
+    }
+
+    /**
+     * Test the property 'order'
+     */
+    @Test
+    public void orderTest() {
+        // TODO: test order
+    }
+
+    /**
+     * Test the property 'sortOrder'
+     */
+    @Test
+    public void sortOrderTest() {
+        // TODO: test sortOrder
+    }
+
+    /**
+     * Test the property 'fields'
+     */
+    @Test
+    public void fieldsTest() {
+        // TODO: test fields
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'viewedAt'
+     */
+    @Test
+    public void viewedAtTest() {
+        // TODO: test viewedAt
+    }
+
+    /**
+     * Test the property 'completedAt'
+     */
+    @Test
+    public void completedAtTest() {
+        // TODO: test completedAt
+    }
+
+    /**
+     * Test the property 'data'
+     */
+    @Test
+    public void dataTest() {
+        // TODO: test data
+    }
+
+    /**
+     * Test the property 'authType'
+     */
+    @Test
+    public void authTypeTest() {
+        // TODO: test authType
+    }
+
+    /**
+     * Test the property 'authSecondFactorType'
+     */
+    @Test
+    public void authSecondFactorTypeTest() {
+        // TODO: test authSecondFactorType
+    }
+
+    /**
+     * Test the property 'authProvider'
+     */
+    @Test
+    public void authProviderTest() {
+        // TODO: test authProvider
+    }
+
+    /**
+     * Test the property 'authSessionStartedAt'
+     */
+    @Test
+    public void authSessionStartedAtTest() {
+        // TODO: test authSessionStartedAt
+    }
+
+    /**
+     * Test the property 'authSessionIdHash'
+     */
+    @Test
+    public void authSessionIdHashTest() {
+        // TODO: test authSessionIdHash
+    }
+
+    /**
+     * Test the property 'authUserIdHash'
+     */
+    @Test
+    public void authUserIdHashTest() {
+        // TODO: test authUserIdHash
+    }
+
+    /**
+     * Test the property 'authUsernameHash'
+     */
+    @Test
+    public void authUsernameHashTest() {
+        // TODO: test authUsernameHash
+    }
+
+    /**
+     * Test the property 'authPhoneNumberHash'
+     */
+    @Test
+    public void authPhoneNumberHashTest() {
+        // TODO: test authPhoneNumberHash
+    }
+
+    /**
+     * Test the property 'ipAddress'
+     */
+    @Test
+    public void ipAddressTest() {
+        // TODO: test ipAddress
+    }
+
+    /**
+     * Test the property 'userAgent'
+     */
+    @Test
+    public void userAgentTest() {
+        // TODO: test userAgent
+    }
+
+    /**
+     * Test the property 'submissionId'
+     */
+    @Test
+    public void submissionIdTest() {
+        // TODO: test submissionId
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionDataRequestTest.java b/src/test/java/com/docspring/SubmissionDataRequestTest.java
new file mode 100644
index 0000000..a2a36a6
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionDataRequestTest.java
@@ -0,0 +1,211 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionDataRequest
+ */
+public class SubmissionDataRequestTest {
+    private final SubmissionDataRequest model = new SubmissionDataRequest();
+
+    /**
+     * Model tests for SubmissionDataRequest
+     */
+    @Test
+    public void testSubmissionDataRequest() {
+        // TODO: test SubmissionDataRequest
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'email'
+     */
+    @Test
+    public void emailTest() {
+        // TODO: test email
+    }
+
+    /**
+     * Test the property 'name'
+     */
+    @Test
+    public void nameTest() {
+        // TODO: test name
+    }
+
+    /**
+     * Test the property 'order'
+     */
+    @Test
+    public void orderTest() {
+        // TODO: test order
+    }
+
+    /**
+     * Test the property 'sortOrder'
+     */
+    @Test
+    public void sortOrderTest() {
+        // TODO: test sortOrder
+    }
+
+    /**
+     * Test the property 'fields'
+     */
+    @Test
+    public void fieldsTest() {
+        // TODO: test fields
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'viewedAt'
+     */
+    @Test
+    public void viewedAtTest() {
+        // TODO: test viewedAt
+    }
+
+    /**
+     * Test the property 'completedAt'
+     */
+    @Test
+    public void completedAtTest() {
+        // TODO: test completedAt
+    }
+
+    /**
+     * Test the property 'data'
+     */
+    @Test
+    public void dataTest() {
+        // TODO: test data
+    }
+
+    /**
+     * Test the property 'authType'
+     */
+    @Test
+    public void authTypeTest() {
+        // TODO: test authType
+    }
+
+    /**
+     * Test the property 'authSecondFactorType'
+     */
+    @Test
+    public void authSecondFactorTypeTest() {
+        // TODO: test authSecondFactorType
+    }
+
+    /**
+     * Test the property 'authProvider'
+     */
+    @Test
+    public void authProviderTest() {
+        // TODO: test authProvider
+    }
+
+    /**
+     * Test the property 'authSessionStartedAt'
+     */
+    @Test
+    public void authSessionStartedAtTest() {
+        // TODO: test authSessionStartedAt
+    }
+
+    /**
+     * Test the property 'authSessionIdHash'
+     */
+    @Test
+    public void authSessionIdHashTest() {
+        // TODO: test authSessionIdHash
+    }
+
+    /**
+     * Test the property 'authUserIdHash'
+     */
+    @Test
+    public void authUserIdHashTest() {
+        // TODO: test authUserIdHash
+    }
+
+    /**
+     * Test the property 'authUsernameHash'
+     */
+    @Test
+    public void authUsernameHashTest() {
+        // TODO: test authUsernameHash
+    }
+
+    /**
+     * Test the property 'authPhoneNumberHash'
+     */
+    @Test
+    public void authPhoneNumberHashTest() {
+        // TODO: test authPhoneNumberHash
+    }
+
+    /**
+     * Test the property 'ipAddress'
+     */
+    @Test
+    public void ipAddressTest() {
+        // TODO: test ipAddress
+    }
+
+    /**
+     * Test the property 'userAgent'
+     */
+    @Test
+    public void userAgentTest() {
+        // TODO: test userAgent
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionDataRequestTokenTest.java b/src/test/java/com/docspring/SubmissionDataRequestTokenTest.java
new file mode 100644
index 0000000..d29236d
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionDataRequestTokenTest.java
@@ -0,0 +1,73 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionDataRequestToken
+ */
+public class SubmissionDataRequestTokenTest {
+    private final SubmissionDataRequestToken model = new SubmissionDataRequestToken();
+
+    /**
+     * Model tests for SubmissionDataRequestToken
+     */
+    @Test
+    public void testSubmissionDataRequestToken() {
+        // TODO: test SubmissionDataRequestToken
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'secret'
+     */
+    @Test
+    public void secretTest() {
+        // TODO: test secret
+    }
+
+    /**
+     * Test the property 'expiresAt'
+     */
+    @Test
+    public void expiresAtTest() {
+        // TODO: test expiresAt
+    }
+
+    /**
+     * Test the property 'dataRequestUrl'
+     */
+    @Test
+    public void dataRequestUrlTest() {
+        // TODO: test dataRequestUrl
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionPreviewTest.java b/src/test/java/com/docspring/SubmissionPreviewTest.java
new file mode 100644
index 0000000..9a1b04b
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionPreviewTest.java
@@ -0,0 +1,213 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.SubmissionAction;
+import com.docspring.SubmissionDataRequest;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SubmissionPreview
+ */
+public class SubmissionPreviewTest {
+    private final SubmissionPreview model = new SubmissionPreview();
+
+    /**
+     * Model tests for SubmissionPreview
+     */
+    @Test
+    public void testSubmissionPreview() {
+        // TODO: test SubmissionPreview
+    }
+
+    /**
+     * Test the property 'batchId'
+     */
+    @Test
+    public void batchIdTest() {
+        // TODO: test batchId
+    }
+
+    /**
+     * Test the property 'dataRequests'
+     */
+    @Test
+    public void dataRequestsTest() {
+        // TODO: test dataRequests
+    }
+
+    /**
+     * Test the property 'editable'
+     */
+    @Test
+    public void editableTest() {
+        // TODO: test editable
+    }
+
+    /**
+     * Test the property 'expired'
+     */
+    @Test
+    public void expiredTest() {
+        // TODO: test expired
+    }
+
+    /**
+     * Test the property 'expiresAt'
+     */
+    @Test
+    public void expiresAtTest() {
+        // TODO: test expiresAt
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'jsonSchemaErrors'
+     */
+    @Test
+    public void jsonSchemaErrorsTest() {
+        // TODO: test jsonSchemaErrors
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'password'
+     */
+    @Test
+    public void passwordTest() {
+        // TODO: test password
+    }
+
+    /**
+     * Test the property 'processedAt'
+     */
+    @Test
+    public void processedAtTest() {
+        // TODO: test processedAt
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'templateId'
+     */
+    @Test
+    public void templateIdTest() {
+        // TODO: test templateId
+    }
+
+    /**
+     * Test the property 'test'
+     */
+    @Test
+    public void testTest() {
+        // TODO: test test
+    }
+
+    /**
+     * Test the property 'truncatedText'
+     */
+    @Test
+    public void truncatedTextTest() {
+        // TODO: test truncatedText
+    }
+
+    /**
+     * Test the property 'pdfHash'
+     */
+    @Test
+    public void pdfHashTest() {
+        // TODO: test pdfHash
+    }
+
+    /**
+     * Test the property 'downloadUrl'
+     */
+    @Test
+    public void downloadUrlTest() {
+        // TODO: test downloadUrl
+    }
+
+    /**
+     * Test the property 'permanentDownloadUrl'
+     */
+    @Test
+    public void permanentDownloadUrlTest() {
+        // TODO: test permanentDownloadUrl
+    }
+
+    /**
+     * Test the property 'previewDownloadUrl'
+     */
+    @Test
+    public void previewDownloadUrlTest() {
+        // TODO: test previewDownloadUrl
+    }
+
+    /**
+     * Test the property 'previewGeneratedAt'
+     */
+    @Test
+    public void previewGeneratedAtTest() {
+        // TODO: test previewGeneratedAt
+    }
+
+    /**
+     * Test the property 'auditTrailDownloadUrl'
+     */
+    @Test
+    public void auditTrailDownloadUrlTest() {
+        // TODO: test auditTrailDownloadUrl
+    }
+
+    /**
+     * Test the property 'actions'
+     */
+    @Test
+    public void actionsTest() {
+        // TODO: test actions
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionTest.java b/src/test/java/com/docspring/SubmissionTest.java
new file mode 100644
index 0000000..e3273d0
--- /dev/null
+++ b/src/test/java/com/docspring/SubmissionTest.java
@@ -0,0 +1,237 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.docspring.SubmissionAction;
+import com.docspring.SubmissionDataRequest;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for Submission
+ */
+public class SubmissionTest {
+    private final Submission model = new Submission();
+
+    /**
+     * Model tests for Submission
+     */
+    @Test
+    public void testSubmission() {
+        // TODO: test Submission
+    }
+
+    /**
+     * Test the property 'batchId'
+     */
+    @Test
+    public void batchIdTest() {
+        // TODO: test batchId
+    }
+
+    /**
+     * Test the property 'dataRequests'
+     */
+    @Test
+    public void dataRequestsTest() {
+        // TODO: test dataRequests
+    }
+
+    /**
+     * Test the property 'editable'
+     */
+    @Test
+    public void editableTest() {
+        // TODO: test editable
+    }
+
+    /**
+     * Test the property 'expired'
+     */
+    @Test
+    public void expiredTest() {
+        // TODO: test expired
+    }
+
+    /**
+     * Test the property 'expiresAt'
+     */
+    @Test
+    public void expiresAtTest() {
+        // TODO: test expiresAt
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'jsonSchemaErrors'
+     */
+    @Test
+    public void jsonSchemaErrorsTest() {
+        // TODO: test jsonSchemaErrors
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'password'
+     */
+    @Test
+    public void passwordTest() {
+        // TODO: test password
+    }
+
+    /**
+     * Test the property 'processedAt'
+     */
+    @Test
+    public void processedAtTest() {
+        // TODO: test processedAt
+    }
+
+    /**
+     * Test the property 'state'
+     */
+    @Test
+    public void stateTest() {
+        // TODO: test state
+    }
+
+    /**
+     * Test the property 'templateId'
+     */
+    @Test
+    public void templateIdTest() {
+        // TODO: test templateId
+    }
+
+    /**
+     * Test the property 'test'
+     */
+    @Test
+    public void testTest() {
+        // TODO: test test
+    }
+
+    /**
+     * Test the property 'truncatedText'
+     */
+    @Test
+    public void truncatedTextTest() {
+        // TODO: test truncatedText
+    }
+
+    /**
+     * Test the property 'pdfHash'
+     */
+    @Test
+    public void pdfHashTest() {
+        // TODO: test pdfHash
+    }
+
+    /**
+     * Test the property 'downloadUrl'
+     */
+    @Test
+    public void downloadUrlTest() {
+        // TODO: test downloadUrl
+    }
+
+    /**
+     * Test the property 'permanentDownloadUrl'
+     */
+    @Test
+    public void permanentDownloadUrlTest() {
+        // TODO: test permanentDownloadUrl
+    }
+
+    /**
+     * Test the property 'previewDownloadUrl'
+     */
+    @Test
+    public void previewDownloadUrlTest() {
+        // TODO: test previewDownloadUrl
+    }
+
+    /**
+     * Test the property 'previewGeneratedAt'
+     */
+    @Test
+    public void previewGeneratedAtTest() {
+        // TODO: test previewGeneratedAt
+    }
+
+    /**
+     * Test the property 'auditTrailDownloadUrl'
+     */
+    @Test
+    public void auditTrailDownloadUrlTest() {
+        // TODO: test auditTrailDownloadUrl
+    }
+
+    /**
+     * Test the property 'actions'
+     */
+    @Test
+    public void actionsTest() {
+        // TODO: test actions
+    }
+
+    /**
+     * Test the property 'source'
+     */
+    @Test
+    public void sourceTest() {
+        // TODO: test source
+    }
+
+    /**
+     * Test the property 'referrer'
+     */
+    @Test
+    public void referrerTest() {
+        // TODO: test referrer
+    }
+
+    /**
+     * Test the property 'data'
+     */
+    @Test
+    public void dataTest() {
+        // TODO: test data
+    }
+
+}
diff --git a/src/test/java/com/docspring/SuccessErrorResponseTest.java b/src/test/java/com/docspring/SuccessErrorResponseTest.java
new file mode 100644
index 0000000..0a3aabb
--- /dev/null
+++ b/src/test/java/com/docspring/SuccessErrorResponseTest.java
@@ -0,0 +1,57 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SuccessErrorResponse
+ */
+public class SuccessErrorResponseTest {
+    private final SuccessErrorResponse model = new SuccessErrorResponse();
+
+    /**
+     * Model tests for SuccessErrorResponse
+     */
+    @Test
+    public void testSuccessErrorResponse() {
+        // TODO: test SuccessErrorResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'error'
+     */
+    @Test
+    public void errorTest() {
+        // TODO: test error
+    }
+
+}
diff --git a/src/test/java/com/docspring/SuccessMultipleErrorsResponseTest.java b/src/test/java/com/docspring/SuccessMultipleErrorsResponseTest.java
new file mode 100644
index 0000000..d236250
--- /dev/null
+++ b/src/test/java/com/docspring/SuccessMultipleErrorsResponseTest.java
@@ -0,0 +1,59 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for SuccessMultipleErrorsResponse
+ */
+public class SuccessMultipleErrorsResponseTest {
+    private final SuccessMultipleErrorsResponse model = new SuccessMultipleErrorsResponse();
+
+    /**
+     * Model tests for SuccessMultipleErrorsResponse
+     */
+    @Test
+    public void testSuccessMultipleErrorsResponse() {
+        // TODO: test SuccessMultipleErrorsResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/TemplateAddFieldsResponseTest.java b/src/test/java/com/docspring/TemplateAddFieldsResponseTest.java
new file mode 100644
index 0000000..a250014
--- /dev/null
+++ b/src/test/java/com/docspring/TemplateAddFieldsResponseTest.java
@@ -0,0 +1,67 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for TemplateAddFieldsResponse
+ */
+public class TemplateAddFieldsResponseTest {
+    private final TemplateAddFieldsResponse model = new TemplateAddFieldsResponse();
+
+    /**
+     * Model tests for TemplateAddFieldsResponse
+     */
+    @Test
+    public void testTemplateAddFieldsResponse() {
+        // TODO: test TemplateAddFieldsResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+    /**
+     * Test the property 'newFieldIds'
+     */
+    @Test
+    public void newFieldIdsTest() {
+        // TODO: test newFieldIds
+    }
+
+}
diff --git a/src/test/java/com/docspring/TemplatePreviewTest.java b/src/test/java/com/docspring/TemplatePreviewTest.java
new file mode 100644
index 0000000..ae0575f
--- /dev/null
+++ b/src/test/java/com/docspring/TemplatePreviewTest.java
@@ -0,0 +1,332 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for TemplatePreview
+ */
+public class TemplatePreviewTest {
+    private final TemplatePreview model = new TemplatePreview();
+
+    /**
+     * Model tests for TemplatePreview
+     */
+    @Test
+    public void testTemplatePreview() {
+        // TODO: test TemplatePreview
+    }
+
+    /**
+     * Test the property 'addDataRequestSubmissionIdFooters'
+     */
+    @Test
+    public void addDataRequestSubmissionIdFootersTest() {
+        // TODO: test addDataRequestSubmissionIdFooters
+    }
+
+    /**
+     * Test the property 'allowAdditionalProperties'
+     */
+    @Test
+    public void allowAdditionalPropertiesTest() {
+        // TODO: test allowAdditionalProperties
+    }
+
+    /**
+     * Test the property 'description'
+     */
+    @Test
+    public void descriptionTest() {
+        // TODO: test description
+    }
+
+    /**
+     * Test the property 'documentFilename'
+     */
+    @Test
+    public void documentFilenameTest() {
+        // TODO: test documentFilename
+    }
+
+    /**
+     * Test the property 'documentMd5'
+     */
+    @Test
+    public void documentMd5Test() {
+        // TODO: test documentMd5
+    }
+
+    /**
+     * Test the property 'documentParseError'
+     */
+    @Test
+    public void documentParseErrorTest() {
+        // TODO: test documentParseError
+    }
+
+    /**
+     * Test the property 'documentProcessed'
+     */
+    @Test
+    public void documentProcessedTest() {
+        // TODO: test documentProcessed
+    }
+
+    /**
+     * Test the property 'documentState'
+     */
+    @Test
+    public void documentStateTest() {
+        // TODO: test documentState
+    }
+
+    /**
+     * Test the property 'documentUrl'
+     */
+    @Test
+    public void documentUrlTest() {
+        // TODO: test documentUrl
+    }
+
+    /**
+     * Test the property 'editableSubmissions'
+     */
+    @Test
+    public void editableSubmissionsTest() {
+        // TODO: test editableSubmissions
+    }
+
+    /**
+     * Test the property 'embedDomains'
+     */
+    @Test
+    public void embedDomainsTest() {
+        // TODO: test embedDomains
+    }
+
+    /**
+     * Test the property 'encryptPdfsPassword'
+     */
+    @Test
+    public void encryptPdfsPasswordTest() {
+        // TODO: test encryptPdfsPassword
+    }
+
+    /**
+     * Test the property 'encryptPdfs'
+     */
+    @Test
+    public void encryptPdfsTest() {
+        // TODO: test encryptPdfs
+    }
+
+    /**
+     * Test the property 'expirationInterval'
+     */
+    @Test
+    public void expirationIntervalTest() {
+        // TODO: test expirationInterval
+    }
+
+    /**
+     * Test the property 'expireAfter'
+     */
+    @Test
+    public void expireAfterTest() {
+        // TODO: test expireAfter
+    }
+
+    /**
+     * Test the property 'expireSubmissions'
+     */
+    @Test
+    public void expireSubmissionsTest() {
+        // TODO: test expireSubmissions
+    }
+
+    /**
+     * Test the property 'externalPredefinedFieldsTemplateId'
+     */
+    @Test
+    public void externalPredefinedFieldsTemplateIdTest() {
+        // TODO: test externalPredefinedFieldsTemplateId
+    }
+
+    /**
+     * Test the property 'externalPredefinedFieldsTemplateName'
+     */
+    @Test
+    public void externalPredefinedFieldsTemplateNameTest() {
+        // TODO: test externalPredefinedFieldsTemplateName
+    }
+
+    /**
+     * Test the property 'firstTemplate'
+     */
+    @Test
+    public void firstTemplateTest() {
+        // TODO: test firstTemplate
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'locked'
+     */
+    @Test
+    public void lockedTest() {
+        // TODO: test locked
+    }
+
+    /**
+     * Test the property 'mergeAuditTrailPdf'
+     */
+    @Test
+    public void mergeAuditTrailPdfTest() {
+        // TODO: test mergeAuditTrailPdf
+    }
+
+    /**
+     * Test the property 'name'
+     */
+    @Test
+    public void nameTest() {
+        // TODO: test name
+    }
+
+    /**
+     * Test the property 'pageCount'
+     */
+    @Test
+    public void pageCountTest() {
+        // TODO: test pageCount
+    }
+
+    /**
+     * Test the property 'pageDimensions'
+     */
+    @Test
+    public void pageDimensionsTest() {
+        // TODO: test pageDimensions
+    }
+
+    /**
+     * Test the property 'parentFolderId'
+     */
+    @Test
+    public void parentFolderIdTest() {
+        // TODO: test parentFolderId
+    }
+
+    /**
+     * Test the property 'path'
+     */
+    @Test
+    public void pathTest() {
+        // TODO: test path
+    }
+
+    /**
+     * Test the property 'permanentDocumentUrl'
+     */
+    @Test
+    public void permanentDocumentUrlTest() {
+        // TODO: test permanentDocumentUrl
+    }
+
+    /**
+     * Test the property 'publicSubmissions'
+     */
+    @Test
+    public void publicSubmissionsTest() {
+        // TODO: test publicSubmissions
+    }
+
+    /**
+     * Test the property 'publicWebForm'
+     */
+    @Test
+    public void publicWebFormTest() {
+        // TODO: test publicWebForm
+    }
+
+    /**
+     * Test the property 'redirectUrl'
+     */
+    @Test
+    public void redirectUrlTest() {
+        // TODO: test redirectUrl
+    }
+
+    /**
+     * Test the property 'slackWebhookUrl'
+     */
+    @Test
+    public void slackWebhookUrlTest() {
+        // TODO: test slackWebhookUrl
+    }
+
+    /**
+     * Test the property 'templateType'
+     */
+    @Test
+    public void templateTypeTest() {
+        // TODO: test templateType
+    }
+
+    /**
+     * Test the property 'updatedAt'
+     */
+    @Test
+    public void updatedAtTest() {
+        // TODO: test updatedAt
+    }
+
+    /**
+     * Test the property 'webhookUrl'
+     */
+    @Test
+    public void webhookUrlTest() {
+        // TODO: test webhookUrl
+    }
+
+    /**
+     * Test the property 'demo'
+     */
+    @Test
+    public void demoTest() {
+        // TODO: test demo
+    }
+
+}
diff --git a/src/test/java/com/docspring/TemplateTest.java b/src/test/java/com/docspring/TemplateTest.java
new file mode 100644
index 0000000..9d4c14c
--- /dev/null
+++ b/src/test/java/com/docspring/TemplateTest.java
@@ -0,0 +1,412 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for Template
+ */
+public class TemplateTest {
+    private final Template model = new Template();
+
+    /**
+     * Model tests for Template
+     */
+    @Test
+    public void testTemplate() {
+        // TODO: test Template
+    }
+
+    /**
+     * Test the property 'addDataRequestSubmissionIdFooters'
+     */
+    @Test
+    public void addDataRequestSubmissionIdFootersTest() {
+        // TODO: test addDataRequestSubmissionIdFooters
+    }
+
+    /**
+     * Test the property 'allowAdditionalProperties'
+     */
+    @Test
+    public void allowAdditionalPropertiesTest() {
+        // TODO: test allowAdditionalProperties
+    }
+
+    /**
+     * Test the property 'description'
+     */
+    @Test
+    public void descriptionTest() {
+        // TODO: test description
+    }
+
+    /**
+     * Test the property 'documentFilename'
+     */
+    @Test
+    public void documentFilenameTest() {
+        // TODO: test documentFilename
+    }
+
+    /**
+     * Test the property 'documentMd5'
+     */
+    @Test
+    public void documentMd5Test() {
+        // TODO: test documentMd5
+    }
+
+    /**
+     * Test the property 'documentParseError'
+     */
+    @Test
+    public void documentParseErrorTest() {
+        // TODO: test documentParseError
+    }
+
+    /**
+     * Test the property 'documentProcessed'
+     */
+    @Test
+    public void documentProcessedTest() {
+        // TODO: test documentProcessed
+    }
+
+    /**
+     * Test the property 'documentState'
+     */
+    @Test
+    public void documentStateTest() {
+        // TODO: test documentState
+    }
+
+    /**
+     * Test the property 'documentUrl'
+     */
+    @Test
+    public void documentUrlTest() {
+        // TODO: test documentUrl
+    }
+
+    /**
+     * Test the property 'editableSubmissions'
+     */
+    @Test
+    public void editableSubmissionsTest() {
+        // TODO: test editableSubmissions
+    }
+
+    /**
+     * Test the property 'embedDomains'
+     */
+    @Test
+    public void embedDomainsTest() {
+        // TODO: test embedDomains
+    }
+
+    /**
+     * Test the property 'encryptPdfsPassword'
+     */
+    @Test
+    public void encryptPdfsPasswordTest() {
+        // TODO: test encryptPdfsPassword
+    }
+
+    /**
+     * Test the property 'encryptPdfs'
+     */
+    @Test
+    public void encryptPdfsTest() {
+        // TODO: test encryptPdfs
+    }
+
+    /**
+     * Test the property 'expirationInterval'
+     */
+    @Test
+    public void expirationIntervalTest() {
+        // TODO: test expirationInterval
+    }
+
+    /**
+     * Test the property 'expireAfter'
+     */
+    @Test
+    public void expireAfterTest() {
+        // TODO: test expireAfter
+    }
+
+    /**
+     * Test the property 'expireSubmissions'
+     */
+    @Test
+    public void expireSubmissionsTest() {
+        // TODO: test expireSubmissions
+    }
+
+    /**
+     * Test the property 'externalPredefinedFieldsTemplateId'
+     */
+    @Test
+    public void externalPredefinedFieldsTemplateIdTest() {
+        // TODO: test externalPredefinedFieldsTemplateId
+    }
+
+    /**
+     * Test the property 'externalPredefinedFieldsTemplateName'
+     */
+    @Test
+    public void externalPredefinedFieldsTemplateNameTest() {
+        // TODO: test externalPredefinedFieldsTemplateName
+    }
+
+    /**
+     * Test the property 'firstTemplate'
+     */
+    @Test
+    public void firstTemplateTest() {
+        // TODO: test firstTemplate
+    }
+
+    /**
+     * Test the property 'id'
+     */
+    @Test
+    public void idTest() {
+        // TODO: test id
+    }
+
+    /**
+     * Test the property 'locked'
+     */
+    @Test
+    public void lockedTest() {
+        // TODO: test locked
+    }
+
+    /**
+     * Test the property 'mergeAuditTrailPdf'
+     */
+    @Test
+    public void mergeAuditTrailPdfTest() {
+        // TODO: test mergeAuditTrailPdf
+    }
+
+    /**
+     * Test the property 'name'
+     */
+    @Test
+    public void nameTest() {
+        // TODO: test name
+    }
+
+    /**
+     * Test the property 'pageCount'
+     */
+    @Test
+    public void pageCountTest() {
+        // TODO: test pageCount
+    }
+
+    /**
+     * Test the property 'pageDimensions'
+     */
+    @Test
+    public void pageDimensionsTest() {
+        // TODO: test pageDimensions
+    }
+
+    /**
+     * Test the property 'parentFolderId'
+     */
+    @Test
+    public void parentFolderIdTest() {
+        // TODO: test parentFolderId
+    }
+
+    /**
+     * Test the property 'path'
+     */
+    @Test
+    public void pathTest() {
+        // TODO: test path
+    }
+
+    /**
+     * Test the property 'permanentDocumentUrl'
+     */
+    @Test
+    public void permanentDocumentUrlTest() {
+        // TODO: test permanentDocumentUrl
+    }
+
+    /**
+     * Test the property 'publicSubmissions'
+     */
+    @Test
+    public void publicSubmissionsTest() {
+        // TODO: test publicSubmissions
+    }
+
+    /**
+     * Test the property 'publicWebForm'
+     */
+    @Test
+    public void publicWebFormTest() {
+        // TODO: test publicWebForm
+    }
+
+    /**
+     * Test the property 'redirectUrl'
+     */
+    @Test
+    public void redirectUrlTest() {
+        // TODO: test redirectUrl
+    }
+
+    /**
+     * Test the property 'slackWebhookUrl'
+     */
+    @Test
+    public void slackWebhookUrlTest() {
+        // TODO: test slackWebhookUrl
+    }
+
+    /**
+     * Test the property 'templateType'
+     */
+    @Test
+    public void templateTypeTest() {
+        // TODO: test templateType
+    }
+
+    /**
+     * Test the property 'updatedAt'
+     */
+    @Test
+    public void updatedAtTest() {
+        // TODO: test updatedAt
+    }
+
+    /**
+     * Test the property 'webhookUrl'
+     */
+    @Test
+    public void webhookUrlTest() {
+        // TODO: test webhookUrl
+    }
+
+    /**
+     * Test the property 'demo'
+     */
+    @Test
+    public void demoTest() {
+        // TODO: test demo
+    }
+
+    /**
+     * Test the property 'defaults'
+     */
+    @Test
+    public void defaultsTest() {
+        // TODO: test defaults
+    }
+
+    /**
+     * Test the property 'fieldOrder'
+     */
+    @Test
+    public void fieldOrderTest() {
+        // TODO: test fieldOrder
+    }
+
+    /**
+     * Test the property 'fields'
+     */
+    @Test
+    public void fieldsTest() {
+        // TODO: test fields
+    }
+
+    /**
+     * Test the property 'footerHtml'
+     */
+    @Test
+    public void footerHtmlTest() {
+        // TODO: test footerHtml
+    }
+
+    /**
+     * Test the property 'headerHtml'
+     */
+    @Test
+    public void headerHtmlTest() {
+        // TODO: test headerHtml
+    }
+
+    /**
+     * Test the property 'htmlEngineOptions'
+     */
+    @Test
+    public void htmlEngineOptionsTest() {
+        // TODO: test htmlEngineOptions
+    }
+
+    /**
+     * Test the property 'html'
+     */
+    @Test
+    public void htmlTest() {
+        // TODO: test html
+    }
+
+    /**
+     * Test the property 'predefinedFields'
+     */
+    @Test
+    public void predefinedFieldsTest() {
+        // TODO: test predefinedFields
+    }
+
+    /**
+     * Test the property 'scss'
+     */
+    @Test
+    public void scssTest() {
+        // TODO: test scss
+    }
+
+    /**
+     * Test the property 'sharedFieldData'
+     */
+    @Test
+    public void sharedFieldDataTest() {
+        // TODO: test sharedFieldData
+    }
+
+}
diff --git a/src/test/java/com/docspring/UpdateHtmlTemplateTest.java b/src/test/java/com/docspring/UpdateHtmlTemplateTest.java
new file mode 100644
index 0000000..d47a3f6
--- /dev/null
+++ b/src/test/java/com/docspring/UpdateHtmlTemplateTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for UpdateHtmlTemplate
+ */
+public class UpdateHtmlTemplateTest {
+    private final UpdateHtmlTemplate model = new UpdateHtmlTemplate();
+
+    /**
+     * Model tests for UpdateHtmlTemplate
+     */
+    @Test
+    public void testUpdateHtmlTemplate() {
+        // TODO: test UpdateHtmlTemplate
+    }
+
+    /**
+     * Test the property 'template'
+     */
+    @Test
+    public void templateTest() {
+        // TODO: test template
+    }
+
+}
diff --git a/src/test/java/com/docspring/UpdateSubmissionDataRequestDataTest.java b/src/test/java/com/docspring/UpdateSubmissionDataRequestDataTest.java
new file mode 100644
index 0000000..83ac450
--- /dev/null
+++ b/src/test/java/com/docspring/UpdateSubmissionDataRequestDataTest.java
@@ -0,0 +1,75 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for UpdateSubmissionDataRequestData
+ */
+public class UpdateSubmissionDataRequestDataTest {
+    private final UpdateSubmissionDataRequestData model = new UpdateSubmissionDataRequestData();
+
+    /**
+     * Model tests for UpdateSubmissionDataRequestData
+     */
+    @Test
+    public void testUpdateSubmissionDataRequestData() {
+        // TODO: test UpdateSubmissionDataRequestData
+    }
+
+    /**
+     * Test the property 'authType'
+     */
+    @Test
+    public void authTypeTest() {
+        // TODO: test authType
+    }
+
+    /**
+     * Test the property 'fields'
+     */
+    @Test
+    public void fieldsTest() {
+        // TODO: test fields
+    }
+
+    /**
+     * Test the property 'metadata'
+     */
+    @Test
+    public void metadataTest() {
+        // TODO: test metadata
+    }
+
+    /**
+     * Test the property 'order'
+     */
+    @Test
+    public void orderTest() {
+        // TODO: test order
+    }
+
+}
diff --git a/src/test/java/com/docspring/UploadPresignResponseTest.java b/src/test/java/com/docspring/UploadPresignResponseTest.java
new file mode 100644
index 0000000..c99382b
--- /dev/null
+++ b/src/test/java/com/docspring/UploadPresignResponseTest.java
@@ -0,0 +1,73 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for UploadPresignResponse
+ */
+public class UploadPresignResponseTest {
+    private final UploadPresignResponse model = new UploadPresignResponse();
+
+    /**
+     * Model tests for UploadPresignResponse
+     */
+    @Test
+    public void testUploadPresignResponse() {
+        // TODO: test UploadPresignResponse
+    }
+
+    /**
+     * Test the property 'fields'
+     */
+    @Test
+    public void fieldsTest() {
+        // TODO: test fields
+    }
+
+    /**
+     * Test the property 'headers'
+     */
+    @Test
+    public void headersTest() {
+        // TODO: test headers
+    }
+
+    /**
+     * Test the property 'url'
+     */
+    @Test
+    public void urlTest() {
+        // TODO: test url
+    }
+
+    /**
+     * Test the property 'method'
+     */
+    @Test
+    public void methodTest() {
+        // TODO: test method
+    }
+
+}

From c4362985f270caf2b2fc815e50c983a4ffec542e Mon Sep 17 00:00:00 2001
From: Nathan Broadbent <git@ndbroadbent.com>
Date: Wed, 26 Feb 2025 20:48:22 +1300
Subject: [PATCH 2/6] Updated on 2025-02-26 20:48:22. Version: 2.0.0

---
 pom.xml | 35 ++++++++++++++++++++++++++++++++---
 1 file changed, 32 insertions(+), 3 deletions(-)

diff --git a/pom.xml b/pom.xml
index 4aac798..511d37a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -223,7 +223,17 @@
                 </java>
               </configuration>
             </plugin>
-        </plugins>
+            <plugin>
+                <groupId>org.sonatype.plugins</groupId>
+                <artifactId>nexus-staging-maven-plugin</artifactId>
+                <version>1.6.13</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <serverId>ossrh</serverId>
+                    <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
+                    <autoReleaseAfterClose>true</autoReleaseAfterClose>
+                </configuration>
+            </plugin>        </plugins>
     </build>
 
     <profiles>
@@ -245,7 +255,17 @@
                             </execution>
                         </executions>
                     </plugin>
-                </plugins>
+            <plugin>
+                <groupId>org.sonatype.plugins</groupId>
+                <artifactId>nexus-staging-maven-plugin</artifactId>
+                <version>1.6.13</version>
+                <extensions>true</extensions>
+                <configuration>
+                    <serverId>ossrh</serverId>
+                    <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
+                    <autoReleaseAfterClose>true</autoReleaseAfterClose>
+                </configuration>
+            </plugin>                </plugins>
             </build>
         </profile>
     </profiles>
@@ -338,4 +358,13 @@
         <junit-version>5.10.0</junit-version>
         <spotless.version>2.21.0</spotless.version>
     </properties>
-</project>
+    <distributionManagement>
+        <snapshotRepository>
+            <id>ossrh</id>
+            <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
+        </snapshotRepository>
+        <repository>
+            <id>ossrh</id>
+            <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
+        </repository>
+    </distributionManagement></project>

From f2c5b3696ce28d15791302e78c38f530645ac6a3 Mon Sep 17 00:00:00 2001
From: Nathan Broadbent <git@ndbroadbent.com>
Date: Wed, 26 Feb 2025 20:50:00 +1300
Subject: [PATCH 3/6] Updated on 2025-02-26 20:50:00. Version: 2.0.0

---
 pom.xml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 511d37a..ce3de80 100644
--- a/pom.xml
+++ b/pom.xml
@@ -230,7 +230,7 @@
                 <extensions>true</extensions>
                 <configuration>
                     <serverId>ossrh</serverId>
-                    <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
+                    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                     <autoReleaseAfterClose>true</autoReleaseAfterClose>
                 </configuration>
             </plugin>        </plugins>
@@ -262,7 +262,7 @@
                 <extensions>true</extensions>
                 <configuration>
                     <serverId>ossrh</serverId>
-                    <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
+                    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
                     <autoReleaseAfterClose>true</autoReleaseAfterClose>
                 </configuration>
             </plugin>                </plugins>
@@ -361,10 +361,10 @@
     <distributionManagement>
         <snapshotRepository>
             <id>ossrh</id>
-            <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
+            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
         </snapshotRepository>
         <repository>
             <id>ossrh</id>
-            <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
+            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
         </repository>
     </distributionManagement></project>

From 2a18a881cd790837a6c6165caa38ece273a0ecb4 Mon Sep 17 00:00:00 2001
From: Nathan Broadbent <git@ndbroadbent.com>
Date: Wed, 26 Feb 2025 21:03:07 +1300
Subject: [PATCH 4/6] Updated on 2025-02-26 21:03:07. Version: 2.0.0

---
 pom.xml | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/pom.xml b/pom.xml
index ce3de80..0c34bf7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -237,8 +237,15 @@
     </build>
 
     <profiles>
+
         <profile>
             <id>sign-artifacts</id>
+            <activation>
+                <property>
+                    <name>performRelease</name>
+                    <value>true</value>
+                </property>
+            </activation>
             <build>
                 <plugins>
                     <plugin>
@@ -252,23 +259,18 @@
                                 <goals>
                                     <goal>sign</goal>
                                 </goals>
+                                <configuration>
+                                    <gpgArguments>
+                                        <arg>--pinentry-mode</arg>
+                                        <arg>loopback</arg>
+                                    </gpgArguments>
+                                </configuration>
                             </execution>
                         </executions>
                     </plugin>
-            <plugin>
-                <groupId>org.sonatype.plugins</groupId>
-                <artifactId>nexus-staging-maven-plugin</artifactId>
-                <version>1.6.13</version>
-                <extensions>true</extensions>
-                <configuration>
-                    <serverId>ossrh</serverId>
-                    <nexusUrl>https://oss.sonatype.org/</nexusUrl>
-                    <autoReleaseAfterClose>true</autoReleaseAfterClose>
-                </configuration>
-            </plugin>                </plugins>
+                </plugins>
             </build>
-        </profile>
-    </profiles>
+        </profile>    </profiles>
 
     <dependencies>
 

From 1ae43b8baf324c654e6e658f54d2de56199b0b67 Mon Sep 17 00:00:00 2001
From: Nathan Broadbent <git@ndbroadbent.com>
Date: Wed, 26 Feb 2025 21:07:58 +1300
Subject: [PATCH 5/6] Updated on 2025-02-26 21:07:58. Version: 2.0.0

---
 pom.xml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/pom.xml b/pom.xml
index 0c34bf7..a3c77dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -264,6 +264,7 @@
                                         <arg>--pinentry-mode</arg>
                                         <arg>loopback</arg>
                                     </gpgArguments>
+                                    <passphrase>${gpg.passphrase}</passphrase>
                                 </configuration>
                             </execution>
                         </executions>

From 4e2175e5041d8dcd75f41510cfa0e9875181f306 Mon Sep 17 00:00:00 2001
From: Nathan Broadbent <git@ndbroadbent.com>
Date: Sat, 22 Mar 2025 23:22:24 +1300
Subject: [PATCH 6/6] Updated on 2025-03-22 23:22:24. Version: 2.1.0

---
 .openapi-generator/FILES                      |  12 +
 CHANGELOG.md                                  |   7 +
 README.md                                     |  14 +-
 api/openapi.yaml                              | 668 +++++++++++++++---
 build.gradle                                  |   2 +-
 build.sbt                                     |   2 +-
 docs/CreateHtmlSubmissionData.md              |   1 +
 docs/CreatePdfSubmissionData.md               |   1 +
 docs/PdfApi.md                                | 164 ++++-
 docs/PublishVersionData.md                    |  14 +
 docs/RestoreVersionData.md                    |  13 +
 docs/Submission.md                            |  11 +
 docs/SubmissionPreview.md                     |  11 +
 docs/Template.md                              |  16 +
 docs/TemplateDeleteResponse.md                |  25 +
 docs/TemplatePreview.md                       |  15 +
 docs/TemplatePublishVersionResponse.md        |  24 +
 pom.xml                                       |   2 +-
 src/main/java/com/docspring/ApiClient.java    |   2 +-
 .../docspring/CombinedSubmissionAction.java   |  10 +-
 .../java/com/docspring/Configuration.java     |   2 +-
 .../docspring/CreateHtmlSubmissionData.java   |  38 +-
 .../docspring/CreatePdfSubmissionData.java    |  38 +-
 src/main/java/com/docspring/PdfApi.java       | 151 +++-
 .../com/docspring/PublishVersionData.java     | 143 ++++
 .../com/docspring/RestoreVersionData.java     | 111 +++
 src/main/java/com/docspring/Submission.java   | 101 ++-
 .../docspring/SubmissionDataRequestEvent.java |  10 +-
 .../java/com/docspring/SubmissionPreview.java | 101 ++-
 src/main/java/com/docspring/Template.java     | 273 ++++++-
 .../com/docspring/TemplateDeleteResponse.java | 282 ++++++++
 .../java/com/docspring/TemplatePreview.java   | 233 +++++-
 .../TemplatePublishVersionResponse.java       | 220 ++++++
 .../CreateHtmlSubmissionDataTest.java         |   8 +
 .../CreatePdfSubmissionDataTest.java          |   8 +
 .../com/docspring/PdfApiTest.java.original    |  35 +-
 .../com/docspring/PublishVersionDataTest.java |  57 ++
 .../com/docspring/RestoreVersionDataTest.java |  49 ++
 .../com/docspring/SubmissionPreviewTest.java  |  16 +
 .../java/com/docspring/SubmissionTest.java    |  16 +
 .../docspring/TemplateDeleteResponseTest.java |  79 +++
 .../com/docspring/TemplatePreviewTest.java    |  48 ++
 .../TemplatePublishVersionResponseTest.java   |  67 ++
 src/test/java/com/docspring/TemplateTest.java |  56 ++
 44 files changed, 3000 insertions(+), 156 deletions(-)
 create mode 100644 docs/PublishVersionData.md
 create mode 100644 docs/RestoreVersionData.md
 create mode 100644 docs/TemplateDeleteResponse.md
 create mode 100644 docs/TemplatePublishVersionResponse.md
 create mode 100644 src/main/java/com/docspring/PublishVersionData.java
 create mode 100644 src/main/java/com/docspring/RestoreVersionData.java
 create mode 100644 src/main/java/com/docspring/TemplateDeleteResponse.java
 create mode 100644 src/main/java/com/docspring/TemplatePublishVersionResponse.java
 create mode 100644 src/test/java/com/docspring/PublishVersionDataTest.java
 create mode 100644 src/test/java/com/docspring/RestoreVersionDataTest.java
 create mode 100644 src/test/java/com/docspring/TemplateDeleteResponseTest.java
 create mode 100644 src/test/java/com/docspring/TemplatePublishVersionResponseTest.java

diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES
index 9ded442..46060d0 100644
--- a/.openapi-generator/FILES
+++ b/.openapi-generator/FILES
@@ -35,7 +35,9 @@ docs/MoveFolderData.md
 docs/MoveTemplateData.md
 docs/MultipleErrorsResponse.md
 docs/PdfApi.md
+docs/PublishVersionData.md
 docs/RenameFolderData.md
+docs/RestoreVersionData.md
 docs/Submission.md
 docs/SubmissionAction.md
 docs/SubmissionBatch.md
@@ -50,7 +52,9 @@ docs/SuccessErrorResponse.md
 docs/SuccessMultipleErrorsResponse.md
 docs/Template.md
 docs/TemplateAddFieldsResponse.md
+docs/TemplateDeleteResponse.md
 docs/TemplatePreview.md
+docs/TemplatePublishVersionResponse.md
 docs/UpdateHtmlTemplate.md
 docs/UpdateSubmissionDataRequestData.md
 docs/UploadPresignResponse.md
@@ -101,8 +105,10 @@ src/main/java/com/docspring/MoveTemplateData.java
 src/main/java/com/docspring/MultipleErrorsResponse.java
 src/main/java/com/docspring/Pair.java
 src/main/java/com/docspring/PdfApi.java
+src/main/java/com/docspring/PublishVersionData.java
 src/main/java/com/docspring/RFC3339DateFormat.java
 src/main/java/com/docspring/RenameFolderData.java
+src/main/java/com/docspring/RestoreVersionData.java
 src/main/java/com/docspring/ServerConfiguration.java
 src/main/java/com/docspring/ServerVariable.java
 src/main/java/com/docspring/StringUtil.java
@@ -120,7 +126,9 @@ src/main/java/com/docspring/SuccessErrorResponse.java
 src/main/java/com/docspring/SuccessMultipleErrorsResponse.java
 src/main/java/com/docspring/Template.java
 src/main/java/com/docspring/TemplateAddFieldsResponse.java
+src/main/java/com/docspring/TemplateDeleteResponse.java
 src/main/java/com/docspring/TemplatePreview.java
+src/main/java/com/docspring/TemplatePublishVersionResponse.java
 src/main/java/com/docspring/UpdateHtmlTemplate.java
 src/main/java/com/docspring/UpdateSubmissionDataRequestData.java
 src/main/java/com/docspring/UploadPresignResponse.java
@@ -158,7 +166,9 @@ src/test/java/com/docspring/MoveFolderDataTest.java
 src/test/java/com/docspring/MoveTemplateDataTest.java
 src/test/java/com/docspring/MultipleErrorsResponseTest.java
 src/test/java/com/docspring/PdfApiTest.java
+src/test/java/com/docspring/PublishVersionDataTest.java
 src/test/java/com/docspring/RenameFolderDataTest.java
+src/test/java/com/docspring/RestoreVersionDataTest.java
 src/test/java/com/docspring/SubmissionActionTest.java
 src/test/java/com/docspring/SubmissionBatchDataTest.java
 src/test/java/com/docspring/SubmissionBatchTest.java
@@ -172,7 +182,9 @@ src/test/java/com/docspring/SubmissionTest.java
 src/test/java/com/docspring/SuccessErrorResponseTest.java
 src/test/java/com/docspring/SuccessMultipleErrorsResponseTest.java
 src/test/java/com/docspring/TemplateAddFieldsResponseTest.java
+src/test/java/com/docspring/TemplateDeleteResponseTest.java
 src/test/java/com/docspring/TemplatePreviewTest.java
+src/test/java/com/docspring/TemplatePublishVersionResponseTest.java
 src/test/java/com/docspring/TemplateTest.java
 src/test/java/com/docspring/UpdateHtmlTemplateTest.java
 src/test/java/com/docspring/UpdateSubmissionDataRequestDataTest.java
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 96cb6df..2ef3a65 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+### 2.1.0 [March 22, 2025]
+
+- Added support for Template Versioning parameters:
+  - Optional version parameter in submission requests (e.g., 1.2.3, draft, latest)
+  - New API methods: publish_template_version, restore_template_version
+  - Updated copy_template and delete_template methods to accept template version strings
+
 ### 2.0.0 [February 23, 2025]
 
 - **BREAKING CHANGE**: Updated default host to our new synchronous API subdomain: sync.api.docspring.com. (EU customers should use sync.api-eu.docspring.com). Removed all custom polling code from library since this logic is now handled by the API service running on our sync subdomain
diff --git a/README.md b/README.md
index 99d8f5f..72d4969 100644
--- a/README.md
+++ b/README.md
@@ -42,7 +42,7 @@ Add this dependency to your project's POM:
 <dependency>
   <groupId>com.docspring</groupId>
   <artifactId>DocSpring</artifactId>
-  <version>2.0.0</version>
+  <version>2.1.0</version>
   <scope>compile</scope>
 </dependency>
 ```
@@ -58,7 +58,7 @@ Add this dependency to your project's build file:
   }
 
   dependencies {
-     implementation "com.docspring:DocSpring:2.0.0"
+     implementation "com.docspring:DocSpring:2.1.0"
   }
 ```
 
@@ -72,7 +72,7 @@ mvn clean package
 
 Then manually install the following JARs:
 
-- `target/DocSpring-2.0.0.jar`
+- `target/DocSpring-2.1.0.jar`
 - `target/lib/*.jar`
 
 ## Usage
@@ -167,7 +167,7 @@ Class | Method | HTTP request | Description
 *PdfApi* | [**generatePreview**](docs/PdfApi.md#generatePreview) | **POST** /submissions/{submission_id}/generate_preview | Generated a preview PDF for partially completed data requests
 *PdfApi* | [**getCombinedSubmission**](docs/PdfApi.md#getCombinedSubmission) | **GET** /combined_submissions/{combined_submission_id} | Check the status of a combined submission (merged PDFs)
 *PdfApi* | [**getDataRequest**](docs/PdfApi.md#getDataRequest) | **GET** /data_requests/{data_request_id} | Look up a submission data request
-*PdfApi* | [**getFullTemplate**](docs/PdfApi.md#getFullTemplate) | **GET** /templates/{template_id}?full&#x3D;true | Fetch the full template attributes
+*PdfApi* | [**getFullTemplate**](docs/PdfApi.md#getFullTemplate) | **GET** /templates/{template_id}?full&#x3D;true | Fetch the full attributes for a PDF template
 *PdfApi* | [**getPresignUrl**](docs/PdfApi.md#getPresignUrl) | **GET** /uploads/presign | Get a presigned URL so that you can upload a file to our AWS S3 bucket
 *PdfApi* | [**getSubmission**](docs/PdfApi.md#getSubmission) | **GET** /submissions/{submission_id} | Check the status of a PDF
 *PdfApi* | [**getSubmissionBatch**](docs/PdfApi.md#getSubmissionBatch) | **GET** /submissions/batches/{submission_batch_id} | Check the status of a submission batch job
@@ -180,7 +180,9 @@ Class | Method | HTTP request | Description
 *PdfApi* | [**listTemplates**](docs/PdfApi.md#listTemplates) | **GET** /templates | Get a list of all templates
 *PdfApi* | [**moveFolderToFolder**](docs/PdfApi.md#moveFolderToFolder) | **POST** /folders/{folder_id}/move | Move a folder
 *PdfApi* | [**moveTemplateToFolder**](docs/PdfApi.md#moveTemplateToFolder) | **POST** /templates/{template_id}/move | Move Template to folder
+*PdfApi* | [**publishTemplateVersion**](docs/PdfApi.md#publishTemplateVersion) | **POST** /templates/{template_id}/publish_version | Publish a template version
 *PdfApi* | [**renameFolder**](docs/PdfApi.md#renameFolder) | **POST** /folders/{folder_id}/rename | Rename a folder
+*PdfApi* | [**restoreTemplateVersion**](docs/PdfApi.md#restoreTemplateVersion) | **POST** /templates/{template_id}/restore_version | Restore a template version
 *PdfApi* | [**testAuthentication**](docs/PdfApi.md#testAuthentication) | **GET** /authentication | Test Authentication
 *PdfApi* | [**updateDataRequest**](docs/PdfApi.md#updateDataRequest) | **PUT** /data_requests/{data_request_id} | Update a submission data request
 *PdfApi* | [**updateTemplate**](docs/PdfApi.md#updateTemplate) | **PUT** /templates/{template_id} | Update a Template
@@ -217,7 +219,9 @@ Class | Method | HTTP request | Description
  - [MoveFolderData](docs/MoveFolderData.md)
  - [MoveTemplateData](docs/MoveTemplateData.md)
  - [MultipleErrorsResponse](docs/MultipleErrorsResponse.md)
+ - [PublishVersionData](docs/PublishVersionData.md)
  - [RenameFolderData](docs/RenameFolderData.md)
+ - [RestoreVersionData](docs/RestoreVersionData.md)
  - [Submission](docs/Submission.md)
  - [SubmissionAction](docs/SubmissionAction.md)
  - [SubmissionBatch](docs/SubmissionBatch.md)
@@ -232,7 +236,9 @@ Class | Method | HTTP request | Description
  - [SuccessMultipleErrorsResponse](docs/SuccessMultipleErrorsResponse.md)
  - [Template](docs/Template.md)
  - [TemplateAddFieldsResponse](docs/TemplateAddFieldsResponse.md)
+ - [TemplateDeleteResponse](docs/TemplateDeleteResponse.md)
  - [TemplatePreview](docs/TemplatePreview.md)
+ - [TemplatePublishVersionResponse](docs/TemplatePublishVersionResponse.md)
  - [UpdateHtmlTemplate](docs/UpdateHtmlTemplate.md)
  - [UpdateSubmissionDataRequestData](docs/UpdateSubmissionDataRequestData.md)
  - [UploadPresignResponse](docs/UploadPresignResponse.md)
diff --git a/api/openapi.yaml b/api/openapi.yaml
index 3080dc0..a543397 100644
--- a/api/openapi.yaml
+++ b/api/openapi.yaml
@@ -250,6 +250,9 @@ paths:
                   source_pdfs:
                   - type: submission
                     id: sub_1234567890abcdef01
+                  - type: template
+                    id: tpl_1234567890abcdef01
+                    template_version: 1.0.0
                   - type: template
                     id: tpl_1234567890abcdef01
                   - type: submission
@@ -279,6 +282,8 @@ paths:
                 - "source_pdfs: Could not find Submission with ID: MISSING_SUBMISSION_ID"
                 - "source_pdfs: Template document is not processed: tpl_1234567890abcdef01\
                   \ (state: pending)"
+                - "source_pdfs: Invalid template version: 'x.y.z' for template: tpl_1234567890abcdef01"
+                - "source_pdfs: Could not find Template with version 3.4.5: tpl_1234567890abcdef01"
                 - "source_pdfs: Could not find Template with ID: MISSING_TEMPLATE_ID"
                 - "source_pdfs: Could not find Custom File with ID: MISSING_CUSTOM_FILE_ID"
                 - "source_pdfs: Could not find Combined Submission with ID: MISSING_COMBINED_SUBMISSION_ID"
@@ -620,7 +625,7 @@ paths:
           content:
             application/json:
               example:
-                id: fld_1234567890abcdef0n1
+                id: fld_1234567890abcdef05
                 name: Folder 3
                 path: /
                 parent_folder_id: null
@@ -897,10 +902,10 @@ paths:
               example:
                 status: success
                 token:
-                  id: 1234567890abcdefa1
+                  id: 1234567890abcdef01
                   secret: ABCDEF01234567890
                   expires_at: 2018-10-20T14:00:00Z
-                  data_request_url: https://app.docspring.com/data_requests/drq_1234567890abcdef01?token_id=1234567890abcdefa1&token_secret=ABCDEF01234567890
+                  data_request_url: https://app.docspring.com/data_requests/drq_1234567890abcdef01?token_id=1234567890abcdef01&token_secret=ABCDEF01234567890
               schema:
                 $ref: '#/components/schemas/create_submission_data_request_token_response'
           description: token created
@@ -1139,6 +1144,8 @@ paths:
                     processed_at: null
                     state: pending
                     template_id: tpl_1234567890abcdef01
+                    template_type: pdf
+                    template_version: null
                     test: false
                     truncated_text: {}
                     pdf_hash: null
@@ -1163,6 +1170,8 @@ paths:
                     processed_at: null
                     state: pending
                     template_id: tpl_1234567890abcdef01
+                    template_type: pdf
+                    template_version: null
                     test: true
                     truncated_text: {}
                     pdf_hash: null
@@ -1192,6 +1201,7 @@ paths:
                   completion_percentage: 100
                 submissions:
                 - status: valid_but_not_saved
+                  errors: []
                 - status: error
                   submission:
                     batch_id: sbb_1234567890abcdef01
@@ -1208,6 +1218,8 @@ paths:
                     processed_at: null
                     state: invalid_data
                     template_id: tpl_1234567890abcdef01
+                    template_type: pdf
+                    template_version: null
                     test: true
                     truncated_text: {}
                     pdf_hash: null
@@ -1306,6 +1318,8 @@ paths:
                   processed_at: null
                   state: processed
                   template_id: tpl_1234567890abcdef01
+                  template_type: pdf
+                  template_version: null
                   test: false
                   truncated_text: {}
                   pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
@@ -1327,6 +1341,8 @@ paths:
                   processed_at: null
                   state: processed
                   template_id: tpl_1234567890abcdef01
+                  template_type: pdf
+                  template_version: null
                   test: false
                   truncated_text: {}
                   pdf_hash: bbc369dd471442006963e3244a1b43610e066165c09770978221f91bd7ace8f5
@@ -1420,6 +1436,8 @@ paths:
                   processed_at: 2020-05-14T02:00:00Z
                   state: processed
                   template_id: tpl_1234567890abcdef02
+                  template_type: pdf
+                  template_version: null
                   test: false
                   truncated_text:
                     first_name:
@@ -1451,6 +1469,8 @@ paths:
                   processed_at: 2020-05-14T02:00:00Z
                   state: processed
                   template_id: tpl_1234567890abcdef02
+                  template_type: pdf
+                  template_version: null
                   test: false
                   truncated_text:
                     first_name:
@@ -1482,6 +1502,8 @@ paths:
                   processed_at: 2020-05-14T02:00:00Z
                   state: processed
                   template_id: tpl_1234567890abcdef02
+                  template_type: pdf
+                  template_version: null
                   test: false
                   truncated_text:
                     first_name:
@@ -1513,6 +1535,8 @@ paths:
                   processed_at: 2020-05-14T02:00:00Z
                   state: processed
                   template_id: tpl_1234567890abcdef02
+                  template_type: pdf
+                  template_version: null
                   test: false
                   truncated_text:
                     first_name:
@@ -1612,6 +1636,8 @@ paths:
                   processed_at: null
                   state: waiting_for_data_requests
                   template_id: tpl_1234567890abcdef02
+                  template_type: pdf
+                  template_version: null
                   test: false
                   truncated_text: {}
                   pdf_hash: null
@@ -1647,6 +1673,8 @@ paths:
                   processed_at: null
                   state: invalid_data
                   template_id: tpl_1234567890abcdef01
+                  template_type: pdf
+                  template_version: null
                   test: false
                   truncated_text: {}
                   pdf_hash: null
@@ -1723,6 +1751,8 @@ paths:
                   processed_at: null
                   state: pending
                   template_id: tpl_HTML567890abcdef01
+                  template_type: html
+                  template_version: null
                   test: false
                   truncated_text: {}
                   pdf_hash: null
@@ -1773,6 +1803,8 @@ paths:
                 processed_at: 2020-05-14T02:00:00Z
                 state: processed
                 template_id: tpl_1234567890abcdef01
+                template_type: pdf
+                template_version: null
                 test: true
                 truncated_text:
                   first_name:
@@ -1864,6 +1896,8 @@ paths:
                 processed_at: 2020-05-14T02:00:00Z
                 state: processed
                 template_id: tpl_1234567890abcdef01
+                template_type: pdf
+                template_version: null
                 test: true
                 truncated_text:
                   first_name:
@@ -2019,6 +2053,8 @@ paths:
                   processed_at: 2020-05-14T02:00:00Z
                   state: processed
                   template_id: tpl_1234567890abcdef01
+                  template_type: pdf
+                  template_version: null
                   test: true
                   truncated_text:
                     first_name:
@@ -2050,6 +2086,8 @@ paths:
                   processed_at: 2020-05-14T02:00:00Z
                   state: processed
                   template_id: tpl_1234567890abcdef01
+                  template_type: pdf
+                  template_version: null
                   test: true
                   truncated_text:
                     first_name:
@@ -2081,6 +2119,8 @@ paths:
                   processed_at: 2020-05-14T02:00:00Z
                   state: processed
                   template_id: tpl_1234567890abcdef01
+                  template_type: pdf
+                  template_version: null
                   test: true
                   truncated_text:
                     first_name:
@@ -2184,7 +2224,7 @@ paths:
                 external_predefined_fields_template_id: null
                 external_predefined_fields_template_name: null
                 first_template: false
-                id: tpl_1234567890abcdef011
+                id: tpl_1234567890abcdef04
                 locked: false
                 merge_audit_trail_pdf: true
                 name: Sub Template 1
@@ -2198,15 +2238,21 @@ paths:
                   - 792
                 parent_folder_id: fld_1234567890abcdef01
                 path: /Folder
-                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef011/original_pdf?token=123456789abcdef
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef04/original_pdf?token=123456789abcdef
                 public_submissions: false
                 public_web_form: false
                 redirect_url: null
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: null
+                last_changed_by_type: null
+                last_changed_by_id: null
               - add_data_request_submission_id_footers: true
                 allow_additional_properties: false
                 description: null
@@ -2241,8 +2287,14 @@ paths:
                 slack_webhook_url: null
                 template_type: html
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: null
+                last_changed_by_type: null
+                last_changed_by_id: null
               - add_data_request_submission_id_footers: true
                 allow_additional_properties: false
                 description: null
@@ -2283,8 +2335,14 @@ paths:
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: null
+                last_changed_by_type: null
+                last_changed_by_id: null
               - add_data_request_submission_id_footers: true
                 allow_additional_properties: false
                 description: null
@@ -2293,7 +2351,7 @@ paths:
                 document_parse_error: false
                 document_processed: true
                 document_state: processed
-                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/draft/document/original-0000000000.abcdef1234567890abcd.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
                 editable_submissions: false
                 embed_domains: null
                 encrypt_pdfs_password: null
@@ -2321,8 +2379,14 @@ paths:
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: null
+                last_changed_by_type: null
+                last_changed_by_id: null
               schema:
                 items:
                   $ref: '#/components/schemas/template_preview'
@@ -2393,7 +2457,7 @@ paths:
                 external_predefined_fields_template_id: null
                 external_predefined_fields_template_name: null
                 first_template: true
-                id: tpl_1234567890abcdef04
+                id: tpl_1234567890abcdef01
                 locked: false
                 merge_audit_trail_pdf: true
                 name: Test Template
@@ -2408,8 +2472,14 @@ paths:
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: 2018-10-20T09:00:00.000-04:00
+                last_changed_by_type: null
+                last_changed_by_id: usr_1234567890abcdef01
               schema:
                 $ref: '#/components/schemas/template_preview'
           description: returns a pending template
@@ -2464,7 +2534,7 @@ paths:
                 external_predefined_fields_template_id: null
                 external_predefined_fields_template_name: null
                 first_template: true
-                id: tpl_1234567890abcdef04
+                id: tpl_1234567890abcdef01
                 locked: false
                 merge_audit_trail_pdf: true
                 name: Test HTML Template
@@ -2479,8 +2549,14 @@ paths:
                 slack_webhook_url: null
                 template_type: html
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: 2018-10-20T09:00:00.000-04:00
+                last_changed_by_type: null
+                last_changed_by_id: usr_1234567890abcdef01
               schema:
                 $ref: '#/components/schemas/template_preview'
           description: returns a created template
@@ -2536,7 +2612,7 @@ paths:
                 external_predefined_fields_template_id: null
                 external_predefined_fields_template_name: null
                 first_template: false
-                id: tpl_1234567890abcdef04
+                id: tpl_1234567890abcdef05
                 locked: false
                 merge_audit_trail_pdf: true
                 name: Test Template Presigned
@@ -2551,8 +2627,14 @@ paths:
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: 2018-10-20T09:00:00.000-04:00
+                last_changed_by_type: null
+                last_changed_by_id: usr_1234567890abcdef01
               schema:
                 $ref: '#/components/schemas/template_preview'
           description: returns a pending template
@@ -2585,21 +2667,36 @@ paths:
         required: true
         schema:
           type: string
+      - example: 0.1.0
+        in: query
+        name: version
+        schema:
+          type: string
       responses:
         "200":
           content:
             application/json:
               example:
                 status: success
+                latest_version: 1.0.1
+                versions:
+                - version: 1.0.1
+                  description: null
+                  published_at: 2018-10-20T09:00:02.000-04:00
+                  published_by_id: usr_1234567890abcdef01
+                - version: 1.0.0
+                  description: null
+                  published_at: 2018-10-20T09:00:01.000-04:00
+                  published_by_id: usr_1234567890abcdef01
               schema:
-                $ref: '#/components/schemas/success_multiple_errors_response'
-          description: template deleted
+                $ref: '#/components/schemas/template_delete_response'
+          description: template version deleted successfully
         "404":
           content:
             application/json:
               example:
                 status: error
-                error: Template not found.
+                error: Template not found
               schema:
                 $ref: '#/components/schemas/error_response'
           description: template not found
@@ -2642,7 +2739,7 @@ paths:
                 document_parse_error: false
                 document_processed: true
                 document_state: processed
-                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/draft/document/original-0000000000.abcdef1234567890abcd.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
                 editable_submissions: false
                 embed_domains: null
                 encrypt_pdfs_password: null
@@ -2670,8 +2767,14 @@ paths:
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: null
+                last_changed_by_type: null
+                last_changed_by_id: null
               schema:
                 $ref: '#/components/schemas/template_preview'
           description: template found
@@ -2680,7 +2783,7 @@ paths:
             application/json:
               example:
                 status: error
-                error: Template not found.
+                error: Template not found
               schema:
                 $ref: '#/components/schemas/error_response'
           description: template not found
@@ -2734,6 +2837,139 @@ paths:
       x-content-type: application/json
       x-accepts:
       - application/json
+  /templates/{template_id}/publish_version:
+    post:
+      operationId: publishTemplateVersion
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/publish_version_data'
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                status: success
+                result:
+                  version: 0.1.0
+                  description: Added new fields
+                  published_by_id: usr_1234567890abcdef01
+                  published_at: 2018-10-20T09:00:00.000-04:00
+              schema:
+                $ref: '#/components/schemas/template_publish_version_response'
+          description: version published successfully
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                errors:
+                - "Invalid version type! Must be one of: major, minor, patch"
+              schema:
+                $ref: '#/components/schemas/success_multiple_errors_response'
+          description: invalid version type
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                error: Template not found
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: template not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Publish a template version
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
+  /templates/{template_id}/restore_version:
+    post:
+      operationId: restoreTemplateVersion
+      parameters:
+      - example: tpl_1234567890abcdef01
+        in: path
+        name: template_id
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/restore_version_data'
+        required: true
+      responses:
+        "200":
+          content:
+            application/json:
+              example:
+                status: success
+              schema:
+                $ref: '#/components/schemas/success_error_response'
+          description: version restored successfully
+        "422":
+          content:
+            application/json:
+              example:
+                status: error
+                errors:
+                - Version is required!
+              schema:
+                $ref: '#/components/schemas/success_multiple_errors_response'
+          description: draft version not allowed
+        "404":
+          content:
+            application/json:
+              example:
+                status: error
+                errors:
+                - Couldn't find published template for tpl_1234567890abcdef01 version
+                  999.999.999
+              schema:
+                $ref: '#/components/schemas/success_multiple_errors_response'
+          description: template version not found
+        "401":
+          content:
+            application/json:
+              example:
+                status: error
+                error: "Missing Basic Auth: Please provide an API token via Basic\
+                  \ Auth. See: https://docspring.com/docs/api/authentication.html"
+              schema:
+                $ref: '#/components/schemas/error_response'
+          description: authentication failed
+      security:
+      - api_token_basic: []
+      summary: Restore a template version
+      tags:
+      - PDF
+      x-codegen-request-body-name: data
+      x-content-type: application/json
+      x-accepts:
+      - application/json
   /templates/{template_id}?full=true:
     get:
       operationId: getFullTemplate
@@ -2757,7 +2993,7 @@ paths:
                 document_parse_error: false
                 document_processed: true
                 document_state: processed
-                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/draft/document/original-0000000000.abcdef1234567890abcd.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
                 editable_submissions: false
                 embed_domains: null
                 encrypt_pdfs_password: null
@@ -2785,8 +3021,14 @@ paths:
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: null
+                last_changed_by_type: null
+                last_changed_by_id: null
                 defaults:
                   color: "444444"
                   opacity: 1
@@ -2855,6 +3097,7 @@ paths:
                     type: string
                     required: false
                     fieldCount: 1
+                versions: []
               schema:
                 $ref: '#/components/schemas/template'
           description: template found
@@ -2863,7 +3106,7 @@ paths:
             application/json:
               example:
                 status: error
-                error: Template not found.
+                error: Template not found
               schema:
                 $ref: '#/components/schemas/error_response'
           description: template not found
@@ -2879,7 +3122,7 @@ paths:
           description: authentication failed
       security:
       - api_token_basic: []
-      summary: Fetch the full template attributes
+      summary: Fetch the full attributes for a PDF template
       tags:
       - PDF
       x-accepts:
@@ -2993,7 +3236,7 @@ paths:
                 document_parse_error: false
                 document_processed: true
                 document_state: processed
-                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef01/draft/document/original-0000000000.abcdef1234567890abcd.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
                 editable_submissions: false
                 embed_domains: null
                 encrypt_pdfs_password: null
@@ -3021,8 +3264,14 @@ paths:
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: null
+                last_changed_by_type: null
+                last_changed_by_id: null
               schema:
                 $ref: '#/components/schemas/template_preview'
           description: move template success
@@ -3073,7 +3322,7 @@ paths:
                 document_parse_error: false
                 document_processed: true
                 document_state: processed
-                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef0new1/document/original-0000000000.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
+                document_url: https://docspring-s3-example.s3.amazonaws.com/store/acc_1234567890abcdef01/templates/tpl_1234567890abcdef05/draft/document/original-0000000000.abcdef1234567890abcd.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=docspring-s3-example%2F20210101%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210101T090000Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=abcdef0123456789
                 editable_submissions: false
                 embed_domains: null
                 encrypt_pdfs_password: null
@@ -3084,7 +3333,7 @@ paths:
                 external_predefined_fields_template_id: null
                 external_predefined_fields_template_name: null
                 first_template: false
-                id: tpl_1234567890abcdef0new1
+                id: tpl_1234567890abcdef05
                 locked: false
                 merge_audit_trail_pdf: true
                 name: Copied Template Name
@@ -3094,15 +3343,21 @@ paths:
                   - 792
                 parent_folder_id: fld_1234567890abcdef01
                 path: /Folder
-                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef0new1/original_pdf?token=123456789abcdef
+                permanent_document_url: https://app.docspring.com/templates/tpl_1234567890abcdef05/original_pdf?token=123456789abcdef
                 public_submissions: false
                 public_web_form: false
                 redirect_url: null
                 slack_webhook_url: null
                 template_type: pdf
                 updated_at: 2018-10-20T09:00:00.000-04:00
+                version_published_at: null
+                version: null
                 webhook_url: null
                 demo: false
+                latest_version: null
+                last_changed_at: null
+                last_changed_by_type: null
+                last_changed_by_id: null
               schema:
                 $ref: '#/components/schemas/template_preview'
           description: copy template success
@@ -3169,7 +3424,7 @@ paths:
             application/json:
               example:
                 status: error
-                error: Template not found.
+                error: Template not found
               schema:
                 $ref: '#/components/schemas/error_response'
           description: template not found
@@ -3337,6 +3592,65 @@ components:
       - status
       title: template_add_fields_response
       type: object
+    template_delete_response:
+      additionalProperties: false
+      example:
+        latest_version: latest_version
+        versions:
+        - "{}"
+        - "{}"
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        errors:
+          items:
+            type: string
+          type: array
+        latest_version:
+          nullable: true
+          type: string
+        versions:
+          items:
+            additionalProperties: false
+            type: object
+          type: array
+      required:
+      - status
+      title: template_delete_response
+      type: object
+    template_publish_version_response:
+      additionalProperties: false
+      example:
+        result: "{}"
+        errors:
+        - errors
+        - errors
+        status: success
+      properties:
+        status:
+          enum:
+          - success
+          - error
+          type: string
+        result:
+          additionalProperties: false
+          type: object
+        errors:
+          items:
+            type: string
+          type: array
+      required:
+      - result
+      - status
+      title: template_publish_version_response
+      type: object
     upload_presign_response:
       additionalProperties: false
       example:
@@ -3392,6 +3706,7 @@ components:
           - slack_webhook
           - email
           - aws_s3_upload
+          nullable: true
           type: string
         action_category:
           enum:
@@ -3656,6 +3971,7 @@ components:
         submissions:
         - preview_generated_at: preview_generated_at
           metadata: "{}"
+          template_version: template_version
           json_schema_errors:
           - json_schema_errors
           - json_schema_errors
@@ -3672,6 +3988,7 @@ components:
           download_url: download_url
           processed_at: processed_at
           template_id: template_id
+          template_type: pdf
           id: id
           state: pending
           truncated_text: "{}"
@@ -3737,6 +4054,7 @@ components:
             order: 5
         - preview_generated_at: preview_generated_at
           metadata: "{}"
+          template_version: template_version
           json_schema_errors:
           - json_schema_errors
           - json_schema_errors
@@ -3753,6 +4071,7 @@ components:
           download_url: download_url
           processed_at: processed_at
           template_id: template_id
+          template_type: pdf
           id: id
           state: pending
           truncated_text: "{}"
@@ -3899,6 +4218,7 @@ components:
           - discord
           - telegram
           - whatsapp
+          nullable: true
           type: string
         message_recipient:
           nullable: true
@@ -4216,6 +4536,7 @@ components:
       example:
         preview_generated_at: preview_generated_at
         metadata: "{}"
+        template_version: template_version
         json_schema_errors:
         - json_schema_errors
         - json_schema_errors
@@ -4232,6 +4553,7 @@ components:
         download_url: download_url
         processed_at: processed_at
         template_id: template_id
+        template_type: pdf
         id: id
         state: pending
         truncated_text: "{}"
@@ -4345,6 +4667,14 @@ components:
         template_id:
           nullable: true
           type: string
+        template_type:
+          enum:
+          - pdf
+          - html
+          type: string
+        template_version:
+          nullable: true
+          type: string
         test:
           type: boolean
         truncated_text:
@@ -4393,6 +4723,8 @@ components:
       - processed_at
       - state
       - template_id
+      - template_type
+      - template_version
       - test
       - truncated_text
       title: submission_preview
@@ -4400,43 +4732,25 @@ components:
     submission:
       additionalProperties: false
       example:
-        preview_generated_at: preview_generated_at
         metadata: "{}"
+        template_version: template_version
         json_schema_errors:
         - json_schema_errors
         - json_schema_errors
-        test: true
         data: "{}"
         batch_id: batch_id
-        editable: true
-        permanent_download_url: permanent_download_url
         preview_download_url: preview_download_url
-        audit_trail_download_url: audit_trail_download_url
         source: api
-        referrer: referrer
         password: password
         expired: true
         expires_at: expires_at
         pdf_hash: pdf_hash
         download_url: download_url
         processed_at: processed_at
-        template_id: template_id
+        template_type: pdf
         id: id
         state: pending
         truncated_text: "{}"
-        actions:
-        - integration_id: integration_id
-          action_category: notification
-          action_type: webhook
-          result_data: "{}"
-          id: id
-          state: pending
-        - integration_id: integration_id
-          action_category: notification
-          action_type: webhook
-          result_data: "{}"
-          id: id
-          state: pending
         data_requests:
         - metadata: "{}"
           auth_type: none
@@ -4484,6 +4798,26 @@ components:
           auth_provider: auth_provider
           user_agent: user_agent
           order: 5
+        preview_generated_at: preview_generated_at
+        test: true
+        editable: true
+        permanent_download_url: permanent_download_url
+        audit_trail_download_url: audit_trail_download_url
+        referrer: referrer
+        template_id: template_id
+        actions:
+        - integration_id: integration_id
+          action_category: notification
+          action_type: webhook
+          result_data: "{}"
+          id: id
+          state: pending
+        - integration_id: integration_id
+          action_category: notification
+          action_type: webhook
+          result_data: "{}"
+          id: id
+          state: pending
       properties:
         batch_id:
           nullable: true
@@ -4534,6 +4868,14 @@ components:
         template_id:
           nullable: true
           type: string
+        template_type:
+          enum:
+          - pdf
+          - html
+          type: string
+        template_version:
+          nullable: true
+          type: string
         test:
           type: boolean
         truncated_text:
@@ -4599,6 +4941,8 @@ components:
       - source
       - state
       - template_id
+      - template_type
+      - template_version
       - test
       - truncated_text
       title: submission
@@ -4617,8 +4961,11 @@ components:
         external_predefined_fields_template_name: external_predefined_fields_template_name
         path: path
         public_web_form: true
+        last_changed_by_type: user
         updated_at: updated_at
+        latest_version: latest_version
         permanent_document_url: permanent_document_url
+        version_published_at: version_published_at
         template_type: pdf
         id: id
         page_dimensions:
@@ -4636,8 +4983,11 @@ components:
         allow_additional_properties: true
         encrypt_pdfs_password: encrypt_pdfs_password
         public_submissions: true
+        version: version
         add_data_request_submission_id_footers: true
         document_md5: document_md5
+        last_changed_at: last_changed_at
+        last_changed_by_id: last_changed_by_id
         first_template: true
         editable_submissions: true
         expire_submissions: true
@@ -4747,11 +5097,32 @@ components:
         updated_at:
           nullable: true
           type: string
+        version_published_at:
+          nullable: true
+          type: string
+        version:
+          nullable: true
+          type: string
         webhook_url:
           nullable: true
           type: string
         demo:
           type: boolean
+        latest_version:
+          nullable: true
+          type: string
+        last_changed_at:
+          nullable: true
+          type: string
+        last_changed_by_type:
+          enum:
+          - user
+          - api
+          nullable: true
+          type: string
+        last_changed_by_id:
+          nullable: true
+          type: string
       required:
       - add_data_request_submission_id_footers
       - allow_additional_properties
@@ -4774,6 +5145,10 @@ components:
       - external_predefined_fields_template_name
       - first_template
       - id
+      - last_changed_at
+      - last_changed_by_id
+      - last_changed_by_type
+      - latest_version
       - locked
       - merge_audit_trail_pdf
       - name
@@ -4788,32 +5163,22 @@ components:
       - slack_webhook_url
       - template_type
       - updated_at
+      - version
+      - version_published_at
       - webhook_url
       title: template_preview
       type: object
     template:
       additionalProperties: false
       example:
-        document_processed: true
         expiration_interval: expiration_interval
         scss: scss
-        document_state: pending
         expire_after: 0
-        description: description
         external_predefined_fields_template_id: external_predefined_fields_template_id
-        slack_webhook_url: slack_webhook_url
-        demo: true
         external_predefined_fields_template_name: external_predefined_fields_template_name
         path: path
         header_html: header_html
-        public_web_form: true
-        field_order:
-        - - 5.962133916683182
-          - 5.962133916683182
-        - - 5.962133916683182
-          - 5.962133916683182
-        updated_at: updated_at
-        permanent_document_url: permanent_document_url
+        version_published_at: version_published_at
         template_type: pdf
         html: html
         id: id
@@ -4826,30 +5191,51 @@ components:
         page_count: 6
         encrypt_pdfs: true
         merge_audit_trail_pdf: true
-        html_engine_options: "{}"
-        webhook_url: webhook_url
-        embed_domains: embed_domains
         parent_folder_id: parent_folder_id
-        allow_additional_properties: true
         encrypt_pdfs_password: encrypt_pdfs_password
         predefined_fields:
         - "{}"
         - "{}"
         public_submissions: true
+        version: version
         add_data_request_submission_id_footers: true
-        document_md5: document_md5
+        last_changed_at: last_changed_at
         shared_field_data: "{}"
-        first_template: true
         defaults: "{}"
-        editable_submissions: true
-        expire_submissions: true
+        versions:
+        - "{}"
+        - "{}"
         name: name
-        document_parse_error: true
         footer_html: footer_html
         fields: "{}"
+        redirect_url: redirect_url
+        document_processed: true
+        document_state: pending
+        description: description
+        slack_webhook_url: slack_webhook_url
+        demo: true
+        public_web_form: true
+        last_changed_by_type: user
+        field_order:
+        - - 5.962133916683182
+          - 5.962133916683182
+        - - 5.962133916683182
+          - 5.962133916683182
+        updated_at: updated_at
+        latest_version: latest_version
+        permanent_document_url: permanent_document_url
+        html_engine_options: "{}"
+        webhook_url: webhook_url
+        embed_domains: embed_domains
+        allow_additional_properties: true
+        document_md5: document_md5
+        last_changed_by_id: last_changed_by_id
+        first_template: true
+        editable_submissions: true
+        expire_submissions: true
+        document_parse_error: true
         document_filename: document_filename
         document_url: document_url
-        redirect_url: redirect_url
       properties:
         add_data_request_submission_id_footers:
           type: boolean
@@ -4951,11 +5337,32 @@ components:
         updated_at:
           nullable: true
           type: string
+        version_published_at:
+          nullable: true
+          type: string
+        version:
+          nullable: true
+          type: string
         webhook_url:
           nullable: true
           type: string
         demo:
           type: boolean
+        latest_version:
+          nullable: true
+          type: string
+        last_changed_at:
+          nullable: true
+          type: string
+        last_changed_by_type:
+          enum:
+          - user
+          - api
+          nullable: true
+          type: string
+        last_changed_by_id:
+          nullable: true
+          type: string
         defaults:
           additionalProperties: false
           title: template_defaults
@@ -4996,6 +5403,11 @@ components:
           properties: {}
           title: template_shared_field_data
           type: object
+        versions:
+          items:
+            additionalProperties: false
+            type: object
+          type: array
       required:
       - add_data_request_submission_id_footers
       - allow_additional_properties
@@ -5025,6 +5437,10 @@ components:
       - html
       - html_engine_options
       - id
+      - last_changed_at
+      - last_changed_by_id
+      - last_changed_by_type
+      - latest_version
       - locked
       - merge_audit_trail_pdf
       - name
@@ -5042,6 +5458,9 @@ components:
       - slack_webhook_url
       - template_type
       - updated_at
+      - version
+      - version_published_at
+      - versions
       - webhook_url
       title: template
       type: object
@@ -5135,6 +5554,9 @@ components:
         source_pdfs:
         - type: submission
           id: sub_1234567890abcdef01
+        - type: template
+          id: tpl_1234567890abcdef01
+          template_version: 1.0.0
         - type: template
           id: tpl_1234567890abcdef01
         - type: submission
@@ -5427,12 +5849,14 @@ components:
         submissions:
         - test: false
           template_id: tpl_1234567890abcdef01
+          template_version: draft
           data:
             first_name: Johnny
             last_name: Smith
           metadata:
             submission_number: 1
         - template_id: tpl_1234567890abcdef01
+          template_version: latest
           data:
             first_name: Jane
             last_name: Doe
@@ -5503,43 +5927,25 @@ components:
       example:
         next_cursor: next_cursor
         submissions:
-        - preview_generated_at: preview_generated_at
-          metadata: "{}"
+        - metadata: "{}"
+          template_version: template_version
           json_schema_errors:
           - json_schema_errors
           - json_schema_errors
-          test: true
           data: "{}"
           batch_id: batch_id
-          editable: true
-          permanent_download_url: permanent_download_url
           preview_download_url: preview_download_url
-          audit_trail_download_url: audit_trail_download_url
           source: api
-          referrer: referrer
           password: password
           expired: true
           expires_at: expires_at
           pdf_hash: pdf_hash
           download_url: download_url
           processed_at: processed_at
-          template_id: template_id
+          template_type: pdf
           id: id
           state: pending
           truncated_text: "{}"
-          actions:
-          - integration_id: integration_id
-            action_category: notification
-            action_type: webhook
-            result_data: "{}"
-            id: id
-            state: pending
-          - integration_id: integration_id
-            action_category: notification
-            action_type: webhook
-            result_data: "{}"
-            id: id
-            state: pending
           data_requests:
           - metadata: "{}"
             auth_type: none
@@ -5587,30 +5993,13 @@ components:
             auth_provider: auth_provider
             user_agent: user_agent
             order: 5
-        - preview_generated_at: preview_generated_at
-          metadata: "{}"
-          json_schema_errors:
-          - json_schema_errors
-          - json_schema_errors
+          preview_generated_at: preview_generated_at
           test: true
-          data: "{}"
-          batch_id: batch_id
           editable: true
           permanent_download_url: permanent_download_url
-          preview_download_url: preview_download_url
           audit_trail_download_url: audit_trail_download_url
-          source: api
           referrer: referrer
-          password: password
-          expired: true
-          expires_at: expires_at
-          pdf_hash: pdf_hash
-          download_url: download_url
-          processed_at: processed_at
           template_id: template_id
-          id: id
-          state: pending
-          truncated_text: "{}"
           actions:
           - integration_id: integration_id
             action_category: notification
@@ -5624,6 +6013,25 @@ components:
             result_data: "{}"
             id: id
             state: pending
+        - metadata: "{}"
+          template_version: template_version
+          json_schema_errors:
+          - json_schema_errors
+          - json_schema_errors
+          data: "{}"
+          batch_id: batch_id
+          preview_download_url: preview_download_url
+          source: api
+          password: password
+          expired: true
+          expires_at: expires_at
+          pdf_hash: pdf_hash
+          download_url: download_url
+          processed_at: processed_at
+          template_type: pdf
+          id: id
+          state: pending
+          truncated_text: "{}"
           data_requests:
           - metadata: "{}"
             auth_type: none
@@ -5671,6 +6079,26 @@ components:
             auth_provider: auth_provider
             user_agent: user_agent
             order: 5
+          preview_generated_at: preview_generated_at
+          test: true
+          editable: true
+          permanent_download_url: permanent_download_url
+          audit_trail_download_url: audit_trail_download_url
+          referrer: referrer
+          template_id: template_id
+          actions:
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
+          - integration_id: integration_id
+            action_category: notification
+            action_type: webhook
+            result_data: "{}"
+            id: id
+            state: pending
         limit: 0.8008281904610115
       properties:
         submissions:
@@ -5724,6 +6152,7 @@ components:
     create_pdf_submission_data:
       additionalProperties: false
       example:
+        version: draft
         data:
           first_name: John
           last_name: Smith
@@ -5757,6 +6186,8 @@ components:
           type: string
         test:
           type: boolean
+        version:
+          type: string
       required:
       - data
       title: create_pdf_submission_data
@@ -5767,6 +6198,7 @@ components:
         submission:
           preview_generated_at: preview_generated_at
           metadata: "{}"
+          template_version: template_version
           json_schema_errors:
           - json_schema_errors
           - json_schema_errors
@@ -5783,6 +6215,7 @@ components:
           download_url: download_url
           processed_at: processed_at
           template_id: template_id
+          template_type: pdf
           id: id
           state: pending
           truncated_text: "{}"
@@ -5902,6 +6335,8 @@ components:
           type: string
         test:
           type: boolean
+        version:
+          type: string
       title: create_html_submission_data
       type: object
     createPDFTemplate_request:
@@ -5983,6 +6418,31 @@ components:
       - template
       title: update_html_template
       type: object
+    publish_version_data:
+      additionalProperties: false
+      example:
+        version_type: minor
+        description: Added new fields
+      properties:
+        description:
+          type: string
+        version_type:
+          type: string
+      required:
+      - version_type
+      title: publish_version_data
+      type: object
+    restore_version_data:
+      additionalProperties: false
+      example:
+        version: 1.0.0
+      properties:
+        version:
+          type: string
+      required:
+      - version
+      title: restore_version_data
+      type: object
     add_fields_data:
       additionalProperties: false
       example:
diff --git a/build.gradle b/build.gradle
index 8325638..631106b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,7 +3,7 @@ apply plugin: 'eclipse'
 apply plugin: 'com.diffplug.spotless'
 
 group = 'com.docspring'
-version = '2.0.0'
+version = '2.1.0'
 
 buildscript {
     repositories {
diff --git a/build.sbt b/build.sbt
index 90735bc..6125aff 100644
--- a/build.sbt
+++ b/build.sbt
@@ -2,7 +2,7 @@ lazy val root = (project in file(".")).
   settings(
     organization := "com.docspring",
     name := "DocSpring",
-    version := "2.0.0",
+    version := "2.1.0",
     scalaVersion := "2.11.4",
     scalacOptions ++= Seq("-feature"),
     Compile / javacOptions ++= Seq("-Xlint:deprecation"),
diff --git a/docs/CreateHtmlSubmissionData.md b/docs/CreateHtmlSubmissionData.md
index 2f2962a..b1204ce 100644
--- a/docs/CreateHtmlSubmissionData.md
+++ b/docs/CreateHtmlSubmissionData.md
@@ -16,6 +16,7 @@
 |**metadata** | **Object** |  |  [optional] |
 |**password** | **String** |  |  [optional] |
 |**test** | **Boolean** |  |  [optional] |
+|**version** | **String** |  |  [optional] |
 
 
 
diff --git a/docs/CreatePdfSubmissionData.md b/docs/CreatePdfSubmissionData.md
index a494cd8..497d88d 100644
--- a/docs/CreatePdfSubmissionData.md
+++ b/docs/CreatePdfSubmissionData.md
@@ -15,6 +15,7 @@
 |**metadata** | **Object** |  |  [optional] |
 |**password** | **String** |  |  [optional] |
 |**test** | **Boolean** |  |  [optional] |
+|**version** | **String** |  |  [optional] |
 
 
 
diff --git a/docs/PdfApi.md b/docs/PdfApi.md
index 707ee20..c628f28 100644
--- a/docs/PdfApi.md
+++ b/docs/PdfApi.md
@@ -25,7 +25,7 @@ All URIs are relative to *https://sync.api.docspring.com/api/v1*
 | [**generatePreview**](PdfApi.md#generatePreview) | **POST** /submissions/{submission_id}/generate_preview | Generated a preview PDF for partially completed data requests |
 | [**getCombinedSubmission**](PdfApi.md#getCombinedSubmission) | **GET** /combined_submissions/{combined_submission_id} | Check the status of a combined submission (merged PDFs) |
 | [**getDataRequest**](PdfApi.md#getDataRequest) | **GET** /data_requests/{data_request_id} | Look up a submission data request |
-| [**getFullTemplate**](PdfApi.md#getFullTemplate) | **GET** /templates/{template_id}?full&#x3D;true | Fetch the full template attributes |
+| [**getFullTemplate**](PdfApi.md#getFullTemplate) | **GET** /templates/{template_id}?full&#x3D;true | Fetch the full attributes for a PDF template |
 | [**getPresignUrl**](PdfApi.md#getPresignUrl) | **GET** /uploads/presign | Get a presigned URL so that you can upload a file to our AWS S3 bucket |
 | [**getSubmission**](PdfApi.md#getSubmission) | **GET** /submissions/{submission_id} | Check the status of a PDF |
 | [**getSubmissionBatch**](PdfApi.md#getSubmissionBatch) | **GET** /submissions/batches/{submission_batch_id} | Check the status of a submission batch job |
@@ -38,7 +38,9 @@ All URIs are relative to *https://sync.api.docspring.com/api/v1*
 | [**listTemplates**](PdfApi.md#listTemplates) | **GET** /templates | Get a list of all templates |
 | [**moveFolderToFolder**](PdfApi.md#moveFolderToFolder) | **POST** /folders/{folder_id}/move | Move a folder |
 | [**moveTemplateToFolder**](PdfApi.md#moveTemplateToFolder) | **POST** /templates/{template_id}/move | Move Template to folder |
+| [**publishTemplateVersion**](PdfApi.md#publishTemplateVersion) | **POST** /templates/{template_id}/publish_version | Publish a template version |
 | [**renameFolder**](PdfApi.md#renameFolder) | **POST** /folders/{folder_id}/rename | Rename a folder |
+| [**restoreTemplateVersion**](PdfApi.md#restoreTemplateVersion) | **POST** /templates/{template_id}/restore_version | Restore a template version |
 | [**testAuthentication**](PdfApi.md#testAuthentication) | **GET** /authentication | Test Authentication |
 | [**updateDataRequest**](PdfApi.md#updateDataRequest) | **PUT** /data_requests/{data_request_id} | Update a submission data request |
 | [**updateTemplate**](PdfApi.md#updateTemplate) | **PUT** /templates/{template_id} | Update a Template |
@@ -991,7 +993,7 @@ public class Example {
 
 ## deleteTemplate
 
-> SuccessMultipleErrorsResponse deleteTemplate(templateId)
+> TemplateDeleteResponse deleteTemplate(templateId, version)
 
 Delete a template
 
@@ -1018,8 +1020,9 @@ public class Example {
 
         PdfApi apiInstance = new PdfApi(defaultClient);
         String templateId = "tpl_1234567890abcdef01"; // String | 
+        String version = "0.1.0"; // String | 
         try {
-            SuccessMultipleErrorsResponse result = apiInstance.deleteTemplate(templateId);
+            TemplateDeleteResponse result = apiInstance.deleteTemplate(templateId, version);
             System.out.println(result);
         } catch (ApiException e) {
             System.err.println("Exception when calling PdfApi#deleteTemplate");
@@ -1038,10 +1041,11 @@ public class Example {
 | Name | Type | Description  | Notes |
 |------------- | ------------- | ------------- | -------------|
 | **templateId** | **String**|  | |
+| **version** | **String**|  | [optional] |
 
 ### Return type
 
-[**SuccessMultipleErrorsResponse**](SuccessMultipleErrorsResponse.md)
+[**TemplateDeleteResponse**](TemplateDeleteResponse.md)
 
 ### Authorization
 
@@ -1055,7 +1059,7 @@ public class Example {
 ### HTTP response details
 | Status code | Description | Response headers |
 |-------------|-------------|------------------|
-| **200** | template deleted |  -  |
+| **200** | template version deleted successfully |  -  |
 | **404** | template not found |  -  |
 | **401** | authentication failed |  -  |
 
@@ -1569,7 +1573,7 @@ public class Example {
 
 > Template getFullTemplate(templateId)
 
-Fetch the full template attributes
+Fetch the full attributes for a PDF template
 
 ### Example
 
@@ -2519,6 +2523,80 @@ public class Example {
 | **404** | folder not found |  -  |
 
 
+## publishTemplateVersion
+
+> TemplatePublishVersionResponse publishTemplateVersion(templateId, data)
+
+Publish a template version
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        PublishVersionData data = new PublishVersionData(); // PublishVersionData | 
+        try {
+            TemplatePublishVersionResponse result = apiInstance.publishTemplateVersion(templateId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#publishTemplateVersion");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **data** | [**PublishVersionData**](PublishVersionData.md)|  | |
+
+### Return type
+
+[**TemplatePublishVersionResponse**](TemplatePublishVersionResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | version published successfully |  -  |
+| **422** | invalid version type |  -  |
+| **404** | template not found |  -  |
+| **401** | authentication failed |  -  |
+
+
 ## renameFolder
 
 > Folder renameFolder(folderId, data)
@@ -2593,6 +2671,80 @@ public class Example {
 | **401** | authentication failed |  -  |
 
 
+## restoreTemplateVersion
+
+> SuccessErrorResponse restoreTemplateVersion(templateId, data)
+
+Restore a template version
+
+### Example
+
+```java
+// Import classes:
+import com.docspring.ApiClient;
+import com.docspring.ApiException;
+import com.docspring.Configuration;
+import com.docspring.auth.*;
+import com.docspring.model.*;
+import com.docspring.PdfApi;
+
+public class Example {
+    public static void main(String[] args) {
+        ApiClient defaultClient = Configuration.getDefaultApiClient();
+        defaultClient.setBasePath("https://sync.api.docspring.com/api/v1");
+        
+        // Configure HTTP basic authorization: api_token_basic
+        HttpBasicAuth api_token_basic = (HttpBasicAuth) defaultClient.getAuthentication("api_token_basic");
+        api_token_basic.setUsername("YOUR USERNAME");
+        api_token_basic.setPassword("YOUR PASSWORD");
+
+        PdfApi apiInstance = new PdfApi(defaultClient);
+        String templateId = "tpl_1234567890abcdef01"; // String | 
+        RestoreVersionData data = new RestoreVersionData(); // RestoreVersionData | 
+        try {
+            SuccessErrorResponse result = apiInstance.restoreTemplateVersion(templateId, data);
+            System.out.println(result);
+        } catch (ApiException e) {
+            System.err.println("Exception when calling PdfApi#restoreTemplateVersion");
+            System.err.println("Status code: " + e.getCode());
+            System.err.println("Reason: " + e.getResponseBody());
+            System.err.println("Response headers: " + e.getResponseHeaders());
+            e.printStackTrace();
+        }
+    }
+}
+```
+
+### Parameters
+
+
+| Name | Type | Description  | Notes |
+|------------- | ------------- | ------------- | -------------|
+| **templateId** | **String**|  | |
+| **data** | [**RestoreVersionData**](RestoreVersionData.md)|  | |
+
+### Return type
+
+[**SuccessErrorResponse**](SuccessErrorResponse.md)
+
+### Authorization
+
+[api_token_basic](../README.md#api_token_basic)
+
+### HTTP request headers
+
+- **Content-Type**: application/json
+- **Accept**: application/json
+
+### HTTP response details
+| Status code | Description | Response headers |
+|-------------|-------------|------------------|
+| **200** | version restored successfully |  -  |
+| **422** | draft version not allowed |  -  |
+| **404** | template version not found |  -  |
+| **401** | authentication failed |  -  |
+
+
 ## testAuthentication
 
 > SuccessErrorResponse testAuthentication()
diff --git a/docs/PublishVersionData.md b/docs/PublishVersionData.md
new file mode 100644
index 0000000..6cc118c
--- /dev/null
+++ b/docs/PublishVersionData.md
@@ -0,0 +1,14 @@
+
+
+# PublishVersionData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**description** | **String** |  |  [optional] |
+|**versionType** | **String** |  |  |
+
+
+
diff --git a/docs/RestoreVersionData.md b/docs/RestoreVersionData.md
new file mode 100644
index 0000000..ec6b67b
--- /dev/null
+++ b/docs/RestoreVersionData.md
@@ -0,0 +1,13 @@
+
+
+# RestoreVersionData
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**version** | **String** |  |  |
+
+
+
diff --git a/docs/Submission.md b/docs/Submission.md
index 8a726e8..5dd885c 100644
--- a/docs/Submission.md
+++ b/docs/Submission.md
@@ -19,6 +19,8 @@
 |**processedAt** | **String** |  |  |
 |**state** | [**StateEnum**](#StateEnum) |  |  |
 |**templateId** | **String** |  |  |
+|**templateType** | [**TemplateTypeEnum**](#TemplateTypeEnum) |  |  |
+|**templateVersion** | **String** |  |  |
 |**test** | **Boolean** |  |  |
 |**truncatedText** | **Object** |  |  |
 |**pdfHash** | **String** |  |  |
@@ -52,6 +54,15 @@
 
 
 
+## Enum: TemplateTypeEnum
+
+| Name | Value |
+|---- | -----|
+| PDF | &quot;pdf&quot; |
+| HTML | &quot;html&quot; |
+
+
+
 ## Enum: SourceEnum
 
 | Name | Value |
diff --git a/docs/SubmissionPreview.md b/docs/SubmissionPreview.md
index 9a2a554..1cdc84d 100644
--- a/docs/SubmissionPreview.md
+++ b/docs/SubmissionPreview.md
@@ -19,6 +19,8 @@
 |**processedAt** | **String** |  |  |
 |**state** | [**StateEnum**](#StateEnum) |  |  |
 |**templateId** | **String** |  |  |
+|**templateType** | [**TemplateTypeEnum**](#TemplateTypeEnum) |  |  |
+|**templateVersion** | **String** |  |  |
 |**test** | **Boolean** |  |  |
 |**truncatedText** | **Object** |  |  |
 |**pdfHash** | **String** |  |  |
@@ -49,3 +51,12 @@
 
 
 
+## Enum: TemplateTypeEnum
+
+| Name | Value |
+|---- | -----|
+| PDF | &quot;pdf&quot; |
+| HTML | &quot;html&quot; |
+
+
+
diff --git a/docs/Template.md b/docs/Template.md
index dec9b8e..dd5d211 100644
--- a/docs/Template.md
+++ b/docs/Template.md
@@ -41,8 +41,14 @@
 |**slackWebhookUrl** | **String** |  |  |
 |**templateType** | [**TemplateTypeEnum**](#TemplateTypeEnum) |  |  |
 |**updatedAt** | **String** |  |  |
+|**versionPublishedAt** | **String** |  |  |
+|**version** | **String** |  |  |
 |**webhookUrl** | **String** |  |  |
 |**demo** | **Boolean** |  |  |
+|**latestVersion** | **String** |  |  |
+|**lastChangedAt** | **String** |  |  |
+|**lastChangedByType** | [**LastChangedByTypeEnum**](#LastChangedByTypeEnum) |  |  |
+|**lastChangedById** | **String** |  |  |
 |**defaults** | **Object** |  |  |
 |**fieldOrder** | **List&lt;List&lt;BigDecimal&gt;&gt;** |  |  |
 |**fields** | **Object** |  |  |
@@ -53,6 +59,7 @@
 |**predefinedFields** | **List&lt;Object&gt;** |  |  |
 |**scss** | **String** |  |  |
 |**sharedFieldData** | **Object** |  |  |
+|**versions** | **List&lt;Object&gt;** |  |  |
 
 
 
@@ -77,3 +84,12 @@
 
 
 
+## Enum: LastChangedByTypeEnum
+
+| Name | Value |
+|---- | -----|
+| USER | &quot;user&quot; |
+| API | &quot;api&quot; |
+
+
+
diff --git a/docs/TemplateDeleteResponse.md b/docs/TemplateDeleteResponse.md
new file mode 100644
index 0000000..dea6a18
--- /dev/null
+++ b/docs/TemplateDeleteResponse.md
@@ -0,0 +1,25 @@
+
+
+# TemplateDeleteResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+|**latestVersion** | **String** |  |  [optional] |
+|**versions** | **List&lt;Object&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/docs/TemplatePreview.md b/docs/TemplatePreview.md
index db9d10f..a9ed759 100644
--- a/docs/TemplatePreview.md
+++ b/docs/TemplatePreview.md
@@ -41,8 +41,14 @@
 |**slackWebhookUrl** | **String** |  |  |
 |**templateType** | [**TemplateTypeEnum**](#TemplateTypeEnum) |  |  |
 |**updatedAt** | **String** |  |  |
+|**versionPublishedAt** | **String** |  |  |
+|**version** | **String** |  |  |
 |**webhookUrl** | **String** |  |  |
 |**demo** | **Boolean** |  |  |
+|**latestVersion** | **String** |  |  |
+|**lastChangedAt** | **String** |  |  |
+|**lastChangedByType** | [**LastChangedByTypeEnum**](#LastChangedByTypeEnum) |  |  |
+|**lastChangedById** | **String** |  |  |
 
 
 
@@ -67,3 +73,12 @@
 
 
 
+## Enum: LastChangedByTypeEnum
+
+| Name | Value |
+|---- | -----|
+| USER | &quot;user&quot; |
+| API | &quot;api&quot; |
+
+
+
diff --git a/docs/TemplatePublishVersionResponse.md b/docs/TemplatePublishVersionResponse.md
new file mode 100644
index 0000000..32eef48
--- /dev/null
+++ b/docs/TemplatePublishVersionResponse.md
@@ -0,0 +1,24 @@
+
+
+# TemplatePublishVersionResponse
+
+
+## Properties
+
+| Name | Type | Description | Notes |
+|------------ | ------------- | ------------- | -------------|
+|**status** | [**StatusEnum**](#StatusEnum) |  |  |
+|**result** | **Object** |  |  |
+|**errors** | **List&lt;String&gt;** |  |  [optional] |
+
+
+
+## Enum: StatusEnum
+
+| Name | Value |
+|---- | -----|
+| SUCCESS | &quot;success&quot; |
+| ERROR | &quot;error&quot; |
+
+
+
diff --git a/pom.xml b/pom.xml
index a3c77dc..96c8ca9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
     <artifactId>DocSpring</artifactId>
     <packaging>jar</packaging>
     <name>DocSpring</name>
-    <version>2.0.0</version>
+    <version>2.1.0</version>
     <url>https://github.com/DocSpring/docspring-java</url>
     <description>Java API client for the DocSpring PDF generation service</description>
     <scm>
diff --git a/src/main/java/com/docspring/ApiClient.java b/src/main/java/com/docspring/ApiClient.java
index ffcde76..e4ce070 100644
--- a/src/main/java/com/docspring/ApiClient.java
+++ b/src/main/java/com/docspring/ApiClient.java
@@ -138,7 +138,7 @@ public ApiClient(Map<String, Authentication> authMap) {
     this.dateFormat = new RFC3339DateFormat();
 
     // Set default User-Agent.
-    setUserAgent("docspring-java-2.0.0");
+    setUserAgent("docspring-java-2.1.0");
 
     // Setup authentications (key: authentication name, value: authentication).
     authentications = new HashMap<>();
diff --git a/src/main/java/com/docspring/CombinedSubmissionAction.java b/src/main/java/com/docspring/CombinedSubmissionAction.java
index 261c9a1..a9bf0ab 100644
--- a/src/main/java/com/docspring/CombinedSubmissionAction.java
+++ b/src/main/java/com/docspring/CombinedSubmissionAction.java
@@ -126,12 +126,12 @@ public static ActionTypeEnum fromValue(String value) {
           return b;
         }
       }
-      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+      return null;
     }
   }
 
   public static final String JSON_PROPERTY_ACTION_TYPE = "action_type";
-  @javax.annotation.Nonnull
+  @javax.annotation.Nullable
   private ActionTypeEnum actionType;
 
   /**
@@ -255,7 +255,7 @@ public void setState(@javax.annotation.Nonnull StateEnum state) {
   }
 
 
-  public CombinedSubmissionAction actionType(@javax.annotation.Nonnull ActionTypeEnum actionType) {
+  public CombinedSubmissionAction actionType(@javax.annotation.Nullable ActionTypeEnum actionType) {
     this.actionType = actionType;
     return this;
   }
@@ -264,7 +264,7 @@ public CombinedSubmissionAction actionType(@javax.annotation.Nonnull ActionTypeE
    * Get actionType
    * @return actionType
    */
-  @javax.annotation.Nonnull
+  @javax.annotation.Nullable
   @JsonProperty(JSON_PROPERTY_ACTION_TYPE)
   @JsonInclude(value = JsonInclude.Include.ALWAYS)
 
@@ -275,7 +275,7 @@ public ActionTypeEnum getActionType() {
 
   @JsonProperty(JSON_PROPERTY_ACTION_TYPE)
   @JsonInclude(value = JsonInclude.Include.ALWAYS)
-  public void setActionType(@javax.annotation.Nonnull ActionTypeEnum actionType) {
+  public void setActionType(@javax.annotation.Nullable ActionTypeEnum actionType) {
     this.actionType = actionType;
   }
 
diff --git a/src/main/java/com/docspring/Configuration.java b/src/main/java/com/docspring/Configuration.java
index 5df7efe..91d6aee 100644
--- a/src/main/java/com/docspring/Configuration.java
+++ b/src/main/java/com/docspring/Configuration.java
@@ -15,7 +15,7 @@
 
 @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
 public class Configuration {
-    public static final String VERSION = "2.0.0";
+    public static final String VERSION = "2.1.0";
 
     private static ApiClient defaultApiClient = new ApiClient();
 
diff --git a/src/main/java/com/docspring/CreateHtmlSubmissionData.java b/src/main/java/com/docspring/CreateHtmlSubmissionData.java
index 2acacc3..d513c7c 100644
--- a/src/main/java/com/docspring/CreateHtmlSubmissionData.java
+++ b/src/main/java/com/docspring/CreateHtmlSubmissionData.java
@@ -38,7 +38,8 @@
   CreateHtmlSubmissionData.JSON_PROPERTY_HTML,
   CreateHtmlSubmissionData.JSON_PROPERTY_METADATA,
   CreateHtmlSubmissionData.JSON_PROPERTY_PASSWORD,
-  CreateHtmlSubmissionData.JSON_PROPERTY_TEST
+  CreateHtmlSubmissionData.JSON_PROPERTY_TEST,
+  CreateHtmlSubmissionData.JSON_PROPERTY_VERSION
 })
 @JsonTypeName("create_html_submission_data")
 @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
@@ -79,6 +80,10 @@ public class CreateHtmlSubmissionData {
   @javax.annotation.Nullable
   private Boolean test;
 
+  public static final String JSON_PROPERTY_VERSION = "version";
+  @javax.annotation.Nullable
+  private String version;
+
   public CreateHtmlSubmissionData() { 
   }
 
@@ -307,6 +312,31 @@ public void setTest(@javax.annotation.Nullable Boolean test) {
   }
 
 
+  public CreateHtmlSubmissionData version(@javax.annotation.Nullable String version) {
+    this.version = version;
+    return this;
+  }
+
+  /**
+   * Get version
+   * @return version
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getVersion() {
+    return version;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setVersion(@javax.annotation.Nullable String version) {
+    this.version = version;
+  }
+
+
   /**
    * Return true if this create_html_submission_data object is equal to o.
    */
@@ -327,12 +357,13 @@ public boolean equals(Object o) {
         Objects.equals(this.html, createHtmlSubmissionData.html) &&
         Objects.equals(this.metadata, createHtmlSubmissionData.metadata) &&
         Objects.equals(this.password, createHtmlSubmissionData.password) &&
-        Objects.equals(this.test, createHtmlSubmissionData.test);
+        Objects.equals(this.test, createHtmlSubmissionData.test) &&
+        Objects.equals(this.version, createHtmlSubmissionData.version);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(css, data, editable, expiresIn, fieldOverrides, html, metadata, password, test);
+    return Objects.hash(css, data, editable, expiresIn, fieldOverrides, html, metadata, password, test, version);
   }
 
   @Override
@@ -348,6 +379,7 @@ public String toString() {
     sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
     sb.append("    password: ").append(toIndentedString(password)).append("\n");
     sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("    version: ").append(toIndentedString(version)).append("\n");
     sb.append("}");
     return sb.toString();
   }
diff --git a/src/main/java/com/docspring/CreatePdfSubmissionData.java b/src/main/java/com/docspring/CreatePdfSubmissionData.java
index 432f107..78fd4c6 100644
--- a/src/main/java/com/docspring/CreatePdfSubmissionData.java
+++ b/src/main/java/com/docspring/CreatePdfSubmissionData.java
@@ -40,7 +40,8 @@
   CreatePdfSubmissionData.JSON_PROPERTY_FIELD_OVERRIDES,
   CreatePdfSubmissionData.JSON_PROPERTY_METADATA,
   CreatePdfSubmissionData.JSON_PROPERTY_PASSWORD,
-  CreatePdfSubmissionData.JSON_PROPERTY_TEST
+  CreatePdfSubmissionData.JSON_PROPERTY_TEST,
+  CreatePdfSubmissionData.JSON_PROPERTY_VERSION
 })
 @JsonTypeName("create_pdf_submission_data")
 @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
@@ -77,6 +78,10 @@ public class CreatePdfSubmissionData {
   @javax.annotation.Nullable
   private Boolean test;
 
+  public static final String JSON_PROPERTY_VERSION = "version";
+  @javax.annotation.Nullable
+  private String version;
+
   public CreatePdfSubmissionData() { 
   }
 
@@ -288,6 +293,31 @@ public void setTest(@javax.annotation.Nullable Boolean test) {
   }
 
 
+  public CreatePdfSubmissionData version(@javax.annotation.Nullable String version) {
+    this.version = version;
+    return this;
+  }
+
+  /**
+   * Get version
+   * @return version
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getVersion() {
+    return version;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setVersion(@javax.annotation.Nullable String version) {
+    this.version = version;
+  }
+
+
   /**
    * Return true if this create_pdf_submission_data object is equal to o.
    */
@@ -307,12 +337,13 @@ public boolean equals(Object o) {
         Objects.equals(this.fieldOverrides, createPdfSubmissionData.fieldOverrides) &&
         Objects.equals(this.metadata, createPdfSubmissionData.metadata) &&
         Objects.equals(this.password, createPdfSubmissionData.password) &&
-        Objects.equals(this.test, createPdfSubmissionData.test);
+        Objects.equals(this.test, createPdfSubmissionData.test) &&
+        Objects.equals(this.version, createPdfSubmissionData.version);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(data, dataRequests, editable, expiresIn, fieldOverrides, metadata, password, test);
+    return Objects.hash(data, dataRequests, editable, expiresIn, fieldOverrides, metadata, password, test, version);
   }
 
   @Override
@@ -327,6 +358,7 @@ public String toString() {
     sb.append("    metadata: ").append(toIndentedString(metadata)).append("\n");
     sb.append("    password: ").append(toIndentedString(password)).append("\n");
     sb.append("    test: ").append(toIndentedString(test)).append("\n");
+    sb.append("    version: ").append(toIndentedString(version)).append("\n");
     sb.append("}");
     return sb.toString();
   }
diff --git a/src/main/java/com/docspring/PdfApi.java b/src/main/java/com/docspring/PdfApi.java
index f52d1ce..f0e3e24 100644
--- a/src/main/java/com/docspring/PdfApi.java
+++ b/src/main/java/com/docspring/PdfApi.java
@@ -36,7 +36,9 @@
 import com.docspring.MoveFolderData;
 import com.docspring.MoveTemplateData;
 import com.docspring.MultipleErrorsResponse;
+import com.docspring.PublishVersionData;
 import com.docspring.RenameFolderData;
+import com.docspring.RestoreVersionData;
 import com.docspring.Submission;
 import com.docspring.SubmissionBatchData;
 import com.docspring.SubmissionBatchWithSubmissions;
@@ -46,7 +48,9 @@
 import com.docspring.SuccessMultipleErrorsResponse;
 import com.docspring.Template;
 import com.docspring.TemplateAddFieldsResponse;
+import com.docspring.TemplateDeleteResponse;
 import com.docspring.TemplatePreview;
+import com.docspring.TemplatePublishVersionResponse;
 import com.docspring.UpdateHtmlTemplate;
 import com.docspring.UpdateSubmissionDataRequestData;
 import com.docspring.UploadPresignResponse;
@@ -795,37 +799,39 @@ public ApiResponse<Folder> deleteFolderWithHttpInfo(String folderId) throws ApiE
    * Delete a template
    * 
    * @param templateId  (required)
-   * @return SuccessMultipleErrorsResponse
+   * @param version  (optional)
+   * @return TemplateDeleteResponse
    * @throws ApiException if fails to make API call
    * @http.response.details
      <table border="1">
        <caption>Response Details</caption>
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
-       <tr><td> 200 </td><td> template deleted </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> template version deleted successfully </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
        <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
      </table>
    */
-  public SuccessMultipleErrorsResponse deleteTemplate(String templateId) throws ApiException {
-    return deleteTemplateWithHttpInfo(templateId).getData();
+  public TemplateDeleteResponse deleteTemplate(String templateId, String version) throws ApiException {
+    return deleteTemplateWithHttpInfo(templateId, version).getData();
   }
 
   /**
    * Delete a template
    * 
    * @param templateId  (required)
-   * @return ApiResponse&lt;SuccessMultipleErrorsResponse&gt;
+   * @param version  (optional)
+   * @return ApiResponse&lt;TemplateDeleteResponse&gt;
    * @throws ApiException if fails to make API call
    * @http.response.details
      <table border="1">
        <caption>Response Details</caption>
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
-       <tr><td> 200 </td><td> template deleted </td><td>  -  </td></tr>
+       <tr><td> 200 </td><td> template version deleted successfully </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
        <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
      </table>
    */
-  public ApiResponse<SuccessMultipleErrorsResponse> deleteTemplateWithHttpInfo(String templateId) throws ApiException {
+  public ApiResponse<TemplateDeleteResponse> deleteTemplateWithHttpInfo(String templateId, String version) throws ApiException {
     // Check required parameters
     if (templateId == null) {
       throw new ApiException(400, "Missing the required parameter 'templateId' when calling deleteTemplate");
@@ -835,11 +841,16 @@ public ApiResponse<SuccessMultipleErrorsResponse> deleteTemplateWithHttpInfo(Str
     String localVarPath = "/templates/{template_id}"
             .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
 
+    // Query parameters
+    List<Pair> localVarQueryParams = new ArrayList<>(
+            apiClient.parameterToPairs("", "version", version)
+    );
+
     String localVarAccept = apiClient.selectHeaderAccept("application/json");
     String localVarContentType = apiClient.selectHeaderContentType();
     String[] localVarAuthNames = new String[] {"api_token_basic"};
-    GenericType<SuccessMultipleErrorsResponse> localVarReturnType = new GenericType<SuccessMultipleErrorsResponse>() {};
-    return apiClient.invokeAPI("PdfApi.deleteTemplate", localVarPath, "DELETE", new ArrayList<>(), null,
+    GenericType<TemplateDeleteResponse> localVarReturnType = new GenericType<TemplateDeleteResponse>() {};
+    return apiClient.invokeAPI("PdfApi.deleteTemplate", localVarPath, "DELETE", localVarQueryParams, null,
                                new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
                                localVarAuthNames, localVarReturnType, false);
   }
@@ -1232,7 +1243,7 @@ public ApiResponse<SubmissionDataRequestShow> getDataRequestWithHttpInfo(String
                                localVarAuthNames, localVarReturnType, false);
   }
   /**
-   * Fetch the full template attributes
+   * Fetch the full attributes for a PDF template
    * 
    * @param templateId  (required)
    * @return Template
@@ -1251,7 +1262,7 @@ public Template getFullTemplate(String templateId) throws ApiException {
   }
 
   /**
-   * Fetch the full template attributes
+   * Fetch the full attributes for a PDF template
    * 
    * @param templateId  (required)
    * @return ApiResponse&lt;Template&gt;
@@ -1943,6 +1954,65 @@ public ApiResponse<TemplatePreview> moveTemplateToFolderWithHttpInfo(String temp
                                new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
                                localVarAuthNames, localVarReturnType, false);
   }
+  /**
+   * Publish a template version
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return TemplatePublishVersionResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> version published successfully </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid version type </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public TemplatePublishVersionResponse publishTemplateVersion(String templateId, PublishVersionData data) throws ApiException {
+    return publishTemplateVersionWithHttpInfo(templateId, data).getData();
+  }
+
+  /**
+   * Publish a template version
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return ApiResponse&lt;TemplatePublishVersionResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> version published successfully </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> invalid version type </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<TemplatePublishVersionResponse> publishTemplateVersionWithHttpInfo(String templateId, PublishVersionData data) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling publishTemplateVersion");
+    }
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling publishTemplateVersion");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/publish_version"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<TemplatePublishVersionResponse> localVarReturnType = new GenericType<TemplatePublishVersionResponse>() {};
+    return apiClient.invokeAPI("PdfApi.publishTemplateVersion", localVarPath, "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
   /**
    * Rename a folder
    * 
@@ -2002,6 +2072,65 @@ public ApiResponse<Folder> renameFolderWithHttpInfo(String folderId, RenameFolde
                                new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
                                localVarAuthNames, localVarReturnType, false);
   }
+  /**
+   * Restore a template version
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return SuccessErrorResponse
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> version restored successfully </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> draft version not allowed </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template version not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public SuccessErrorResponse restoreTemplateVersion(String templateId, RestoreVersionData data) throws ApiException {
+    return restoreTemplateVersionWithHttpInfo(templateId, data).getData();
+  }
+
+  /**
+   * Restore a template version
+   * 
+   * @param templateId  (required)
+   * @param data  (required)
+   * @return ApiResponse&lt;SuccessErrorResponse&gt;
+   * @throws ApiException if fails to make API call
+   * @http.response.details
+     <table border="1">
+       <caption>Response Details</caption>
+       <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
+       <tr><td> 200 </td><td> version restored successfully </td><td>  -  </td></tr>
+       <tr><td> 422 </td><td> draft version not allowed </td><td>  -  </td></tr>
+       <tr><td> 404 </td><td> template version not found </td><td>  -  </td></tr>
+       <tr><td> 401 </td><td> authentication failed </td><td>  -  </td></tr>
+     </table>
+   */
+  public ApiResponse<SuccessErrorResponse> restoreTemplateVersionWithHttpInfo(String templateId, RestoreVersionData data) throws ApiException {
+    // Check required parameters
+    if (templateId == null) {
+      throw new ApiException(400, "Missing the required parameter 'templateId' when calling restoreTemplateVersion");
+    }
+    if (data == null) {
+      throw new ApiException(400, "Missing the required parameter 'data' when calling restoreTemplateVersion");
+    }
+
+    // Path parameters
+    String localVarPath = "/templates/{template_id}/restore_version"
+            .replaceAll("\\{template_id}", apiClient.escapeString(templateId.toString()));
+
+    String localVarAccept = apiClient.selectHeaderAccept("application/json");
+    String localVarContentType = apiClient.selectHeaderContentType("application/json");
+    String[] localVarAuthNames = new String[] {"api_token_basic"};
+    GenericType<SuccessErrorResponse> localVarReturnType = new GenericType<SuccessErrorResponse>() {};
+    return apiClient.invokeAPI("PdfApi.restoreTemplateVersion", localVarPath, "POST", new ArrayList<>(), data,
+                               new LinkedHashMap<>(), new LinkedHashMap<>(), new LinkedHashMap<>(), localVarAccept, localVarContentType,
+                               localVarAuthNames, localVarReturnType, false);
+  }
   /**
    * Test Authentication
    * 
diff --git a/src/main/java/com/docspring/PublishVersionData.java b/src/main/java/com/docspring/PublishVersionData.java
new file mode 100644
index 0000000..856785d
--- /dev/null
+++ b/src/main/java/com/docspring/PublishVersionData.java
@@ -0,0 +1,143 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * PublishVersionData
+ */
+@JsonPropertyOrder({
+  PublishVersionData.JSON_PROPERTY_DESCRIPTION,
+  PublishVersionData.JSON_PROPERTY_VERSION_TYPE
+})
+@JsonTypeName("publish_version_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class PublishVersionData {
+  public static final String JSON_PROPERTY_DESCRIPTION = "description";
+  @javax.annotation.Nullable
+  private String description;
+
+  public static final String JSON_PROPERTY_VERSION_TYPE = "version_type";
+  @javax.annotation.Nonnull
+  private String versionType;
+
+  public PublishVersionData() { 
+  }
+
+  public PublishVersionData description(@javax.annotation.Nullable String description) {
+    this.description = description;
+    return this;
+  }
+
+  /**
+   * Get description
+   * @return description
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public String getDescription() {
+    return description;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_DESCRIPTION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setDescription(@javax.annotation.Nullable String description) {
+    this.description = description;
+  }
+
+
+  public PublishVersionData versionType(@javax.annotation.Nonnull String versionType) {
+    this.versionType = versionType;
+    return this;
+  }
+
+  /**
+   * Get versionType
+   * @return versionType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_VERSION_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getVersionType() {
+    return versionType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSION_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setVersionType(@javax.annotation.Nonnull String versionType) {
+    this.versionType = versionType;
+  }
+
+
+  /**
+   * Return true if this publish_version_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    PublishVersionData publishVersionData = (PublishVersionData) o;
+    return Objects.equals(this.description, publishVersionData.description) &&
+        Objects.equals(this.versionType, publishVersionData.versionType);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(description, versionType);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class PublishVersionData {\n");
+    sb.append("    description: ").append(toIndentedString(description)).append("\n");
+    sb.append("    versionType: ").append(toIndentedString(versionType)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/RestoreVersionData.java b/src/main/java/com/docspring/RestoreVersionData.java
new file mode 100644
index 0000000..d696cb2
--- /dev/null
+++ b/src/main/java/com/docspring/RestoreVersionData.java
@@ -0,0 +1,111 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * RestoreVersionData
+ */
+@JsonPropertyOrder({
+  RestoreVersionData.JSON_PROPERTY_VERSION
+})
+@JsonTypeName("restore_version_data")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class RestoreVersionData {
+  public static final String JSON_PROPERTY_VERSION = "version";
+  @javax.annotation.Nonnull
+  private String version;
+
+  public RestoreVersionData() { 
+  }
+
+  public RestoreVersionData version(@javax.annotation.Nonnull String version) {
+    this.version = version;
+    return this;
+  }
+
+  /**
+   * Get version
+   * @return version
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getVersion() {
+    return version;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setVersion(@javax.annotation.Nonnull String version) {
+    this.version = version;
+  }
+
+
+  /**
+   * Return true if this restore_version_data object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    RestoreVersionData restoreVersionData = (RestoreVersionData) o;
+    return Objects.equals(this.version, restoreVersionData.version);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(version);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class RestoreVersionData {\n");
+    sb.append("    version: ").append(toIndentedString(version)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/Submission.java b/src/main/java/com/docspring/Submission.java
index 26f83cb..62dcc73 100644
--- a/src/main/java/com/docspring/Submission.java
+++ b/src/main/java/com/docspring/Submission.java
@@ -46,6 +46,8 @@
   Submission.JSON_PROPERTY_PROCESSED_AT,
   Submission.JSON_PROPERTY_STATE,
   Submission.JSON_PROPERTY_TEMPLATE_ID,
+  Submission.JSON_PROPERTY_TEMPLATE_TYPE,
+  Submission.JSON_PROPERTY_TEMPLATE_VERSION,
   Submission.JSON_PROPERTY_TEST,
   Submission.JSON_PROPERTY_TRUNCATED_TEXT,
   Submission.JSON_PROPERTY_PDF_HASH,
@@ -163,6 +165,49 @@ public static StateEnum fromValue(String value) {
   @javax.annotation.Nullable
   private String templateId;
 
+  /**
+   * Gets or Sets templateType
+   */
+  public enum TemplateTypeEnum {
+    PDF(String.valueOf("pdf")),
+    
+    HTML(String.valueOf("html"));
+
+    private String value;
+
+    TemplateTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static TemplateTypeEnum fromValue(String value) {
+      for (TemplateTypeEnum b : TemplateTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_TEMPLATE_TYPE = "template_type";
+  @javax.annotation.Nonnull
+  private TemplateTypeEnum templateType;
+
+  public static final String JSON_PROPERTY_TEMPLATE_VERSION = "template_version";
+  @javax.annotation.Nullable
+  private String templateVersion;
+
   public static final String JSON_PROPERTY_TEST = "test";
   @javax.annotation.Nonnull
   private Boolean test;
@@ -569,6 +614,56 @@ public void setTemplateId(@javax.annotation.Nullable String templateId) {
   }
 
 
+  public Submission templateType(@javax.annotation.Nonnull TemplateTypeEnum templateType) {
+    this.templateType = templateType;
+    return this;
+  }
+
+  /**
+   * Get templateType
+   * @return templateType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public TemplateTypeEnum getTemplateType() {
+    return templateType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplateType(@javax.annotation.Nonnull TemplateTypeEnum templateType) {
+    this.templateType = templateType;
+  }
+
+
+  public Submission templateVersion(@javax.annotation.Nullable String templateVersion) {
+    this.templateVersion = templateVersion;
+    return this;
+  }
+
+  /**
+   * Get templateVersion
+   * @return templateVersion
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getTemplateVersion() {
+    return templateVersion;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplateVersion(@javax.annotation.Nullable String templateVersion) {
+    this.templateVersion = templateVersion;
+  }
+
+
   public Submission test(@javax.annotation.Nonnull Boolean test) {
     this.test = test;
     return this;
@@ -901,6 +996,8 @@ public boolean equals(Object o) {
         Objects.equals(this.processedAt, submission.processedAt) &&
         Objects.equals(this.state, submission.state) &&
         Objects.equals(this.templateId, submission.templateId) &&
+        Objects.equals(this.templateType, submission.templateType) &&
+        Objects.equals(this.templateVersion, submission.templateVersion) &&
         Objects.equals(this.test, submission.test) &&
         Objects.equals(this.truncatedText, submission.truncatedText) &&
         Objects.equals(this.pdfHash, submission.pdfHash) &&
@@ -917,7 +1014,7 @@ public boolean equals(Object o) {
 
   @Override
   public int hashCode() {
-    return Objects.hash(batchId, dataRequests, editable, expired, expiresAt, id, jsonSchemaErrors, metadata, password, processedAt, state, templateId, test, truncatedText, pdfHash, downloadUrl, permanentDownloadUrl, previewDownloadUrl, previewGeneratedAt, auditTrailDownloadUrl, actions, source, referrer, data);
+    return Objects.hash(batchId, dataRequests, editable, expired, expiresAt, id, jsonSchemaErrors, metadata, password, processedAt, state, templateId, templateType, templateVersion, test, truncatedText, pdfHash, downloadUrl, permanentDownloadUrl, previewDownloadUrl, previewGeneratedAt, auditTrailDownloadUrl, actions, source, referrer, data);
   }
 
   @Override
@@ -936,6 +1033,8 @@ public String toString() {
     sb.append("    processedAt: ").append(toIndentedString(processedAt)).append("\n");
     sb.append("    state: ").append(toIndentedString(state)).append("\n");
     sb.append("    templateId: ").append(toIndentedString(templateId)).append("\n");
+    sb.append("    templateType: ").append(toIndentedString(templateType)).append("\n");
+    sb.append("    templateVersion: ").append(toIndentedString(templateVersion)).append("\n");
     sb.append("    test: ").append(toIndentedString(test)).append("\n");
     sb.append("    truncatedText: ").append(toIndentedString(truncatedText)).append("\n");
     sb.append("    pdfHash: ").append(toIndentedString(pdfHash)).append("\n");
diff --git a/src/main/java/com/docspring/SubmissionDataRequestEvent.java b/src/main/java/com/docspring/SubmissionDataRequestEvent.java
index ca28bb1..0990728 100644
--- a/src/main/java/com/docspring/SubmissionDataRequestEvent.java
+++ b/src/main/java/com/docspring/SubmissionDataRequestEvent.java
@@ -145,12 +145,12 @@ public static MessageTypeEnum fromValue(String value) {
           return b;
         }
       }
-      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+      return null;
     }
   }
 
   public static final String JSON_PROPERTY_MESSAGE_TYPE = "message_type";
-  @javax.annotation.Nonnull
+  @javax.annotation.Nullable
   private MessageTypeEnum messageType;
 
   public static final String JSON_PROPERTY_MESSAGE_RECIPIENT = "message_recipient";
@@ -264,7 +264,7 @@ public void setEventType(@javax.annotation.Nonnull EventTypeEnum eventType) {
   }
 
 
-  public SubmissionDataRequestEvent messageType(@javax.annotation.Nonnull MessageTypeEnum messageType) {
+  public SubmissionDataRequestEvent messageType(@javax.annotation.Nullable MessageTypeEnum messageType) {
     this.messageType = messageType;
     return this;
   }
@@ -273,7 +273,7 @@ public SubmissionDataRequestEvent messageType(@javax.annotation.Nonnull MessageT
    * Get messageType
    * @return messageType
    */
-  @javax.annotation.Nonnull
+  @javax.annotation.Nullable
   @JsonProperty(JSON_PROPERTY_MESSAGE_TYPE)
   @JsonInclude(value = JsonInclude.Include.ALWAYS)
 
@@ -284,7 +284,7 @@ public MessageTypeEnum getMessageType() {
 
   @JsonProperty(JSON_PROPERTY_MESSAGE_TYPE)
   @JsonInclude(value = JsonInclude.Include.ALWAYS)
-  public void setMessageType(@javax.annotation.Nonnull MessageTypeEnum messageType) {
+  public void setMessageType(@javax.annotation.Nullable MessageTypeEnum messageType) {
     this.messageType = messageType;
   }
 
diff --git a/src/main/java/com/docspring/SubmissionPreview.java b/src/main/java/com/docspring/SubmissionPreview.java
index 8094bd4..7106ed2 100644
--- a/src/main/java/com/docspring/SubmissionPreview.java
+++ b/src/main/java/com/docspring/SubmissionPreview.java
@@ -46,6 +46,8 @@
   SubmissionPreview.JSON_PROPERTY_PROCESSED_AT,
   SubmissionPreview.JSON_PROPERTY_STATE,
   SubmissionPreview.JSON_PROPERTY_TEMPLATE_ID,
+  SubmissionPreview.JSON_PROPERTY_TEMPLATE_TYPE,
+  SubmissionPreview.JSON_PROPERTY_TEMPLATE_VERSION,
   SubmissionPreview.JSON_PROPERTY_TEST,
   SubmissionPreview.JSON_PROPERTY_TRUNCATED_TEXT,
   SubmissionPreview.JSON_PROPERTY_PDF_HASH,
@@ -160,6 +162,49 @@ public static StateEnum fromValue(String value) {
   @javax.annotation.Nullable
   private String templateId;
 
+  /**
+   * Gets or Sets templateType
+   */
+  public enum TemplateTypeEnum {
+    PDF(String.valueOf("pdf")),
+    
+    HTML(String.valueOf("html"));
+
+    private String value;
+
+    TemplateTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static TemplateTypeEnum fromValue(String value) {
+      for (TemplateTypeEnum b : TemplateTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_TEMPLATE_TYPE = "template_type";
+  @javax.annotation.Nonnull
+  private TemplateTypeEnum templateType;
+
+  public static final String JSON_PROPERTY_TEMPLATE_VERSION = "template_version";
+  @javax.annotation.Nullable
+  private String templateVersion;
+
   public static final String JSON_PROPERTY_TEST = "test";
   @javax.annotation.Nonnull
   private Boolean test;
@@ -515,6 +560,56 @@ public void setTemplateId(@javax.annotation.Nullable String templateId) {
   }
 
 
+  public SubmissionPreview templateType(@javax.annotation.Nonnull TemplateTypeEnum templateType) {
+    this.templateType = templateType;
+    return this;
+  }
+
+  /**
+   * Get templateType
+   * @return templateType
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public TemplateTypeEnum getTemplateType() {
+    return templateType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplateType(@javax.annotation.Nonnull TemplateTypeEnum templateType) {
+    this.templateType = templateType;
+  }
+
+
+  public SubmissionPreview templateVersion(@javax.annotation.Nullable String templateVersion) {
+    this.templateVersion = templateVersion;
+    return this;
+  }
+
+  /**
+   * Get templateVersion
+   * @return templateVersion
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getTemplateVersion() {
+    return templateVersion;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_TEMPLATE_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setTemplateVersion(@javax.annotation.Nullable String templateVersion) {
+    this.templateVersion = templateVersion;
+  }
+
+
   public SubmissionPreview test(@javax.annotation.Nonnull Boolean test) {
     this.test = test;
     return this;
@@ -772,6 +867,8 @@ public boolean equals(Object o) {
         Objects.equals(this.processedAt, submissionPreview.processedAt) &&
         Objects.equals(this.state, submissionPreview.state) &&
         Objects.equals(this.templateId, submissionPreview.templateId) &&
+        Objects.equals(this.templateType, submissionPreview.templateType) &&
+        Objects.equals(this.templateVersion, submissionPreview.templateVersion) &&
         Objects.equals(this.test, submissionPreview.test) &&
         Objects.equals(this.truncatedText, submissionPreview.truncatedText) &&
         Objects.equals(this.pdfHash, submissionPreview.pdfHash) &&
@@ -785,7 +882,7 @@ public boolean equals(Object o) {
 
   @Override
   public int hashCode() {
-    return Objects.hash(batchId, dataRequests, editable, expired, expiresAt, id, jsonSchemaErrors, metadata, password, processedAt, state, templateId, test, truncatedText, pdfHash, downloadUrl, permanentDownloadUrl, previewDownloadUrl, previewGeneratedAt, auditTrailDownloadUrl, actions);
+    return Objects.hash(batchId, dataRequests, editable, expired, expiresAt, id, jsonSchemaErrors, metadata, password, processedAt, state, templateId, templateType, templateVersion, test, truncatedText, pdfHash, downloadUrl, permanentDownloadUrl, previewDownloadUrl, previewGeneratedAt, auditTrailDownloadUrl, actions);
   }
 
   @Override
@@ -804,6 +901,8 @@ public String toString() {
     sb.append("    processedAt: ").append(toIndentedString(processedAt)).append("\n");
     sb.append("    state: ").append(toIndentedString(state)).append("\n");
     sb.append("    templateId: ").append(toIndentedString(templateId)).append("\n");
+    sb.append("    templateType: ").append(toIndentedString(templateType)).append("\n");
+    sb.append("    templateVersion: ").append(toIndentedString(templateVersion)).append("\n");
     sb.append("    test: ").append(toIndentedString(test)).append("\n");
     sb.append("    truncatedText: ").append(toIndentedString(truncatedText)).append("\n");
     sb.append("    pdfHash: ").append(toIndentedString(pdfHash)).append("\n");
diff --git a/src/main/java/com/docspring/Template.java b/src/main/java/com/docspring/Template.java
index cb294a6..5857110 100644
--- a/src/main/java/com/docspring/Template.java
+++ b/src/main/java/com/docspring/Template.java
@@ -67,8 +67,14 @@
   Template.JSON_PROPERTY_SLACK_WEBHOOK_URL,
   Template.JSON_PROPERTY_TEMPLATE_TYPE,
   Template.JSON_PROPERTY_UPDATED_AT,
+  Template.JSON_PROPERTY_VERSION_PUBLISHED_AT,
+  Template.JSON_PROPERTY_VERSION,
   Template.JSON_PROPERTY_WEBHOOK_URL,
   Template.JSON_PROPERTY_DEMO,
+  Template.JSON_PROPERTY_LATEST_VERSION,
+  Template.JSON_PROPERTY_LAST_CHANGED_AT,
+  Template.JSON_PROPERTY_LAST_CHANGED_BY_TYPE,
+  Template.JSON_PROPERTY_LAST_CHANGED_BY_ID,
   Template.JSON_PROPERTY_DEFAULTS,
   Template.JSON_PROPERTY_FIELD_ORDER,
   Template.JSON_PROPERTY_FIELDS,
@@ -78,7 +84,8 @@
   Template.JSON_PROPERTY_HTML,
   Template.JSON_PROPERTY_PREDEFINED_FIELDS,
   Template.JSON_PROPERTY_SCSS,
-  Template.JSON_PROPERTY_SHARED_FIELD_DATA
+  Template.JSON_PROPERTY_SHARED_FIELD_DATA,
+  Template.JSON_PROPERTY_VERSIONS
 })
 @JsonTypeName("template")
 @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
@@ -295,6 +302,14 @@ public static TemplateTypeEnum fromValue(String value) {
   @javax.annotation.Nullable
   private String updatedAt;
 
+  public static final String JSON_PROPERTY_VERSION_PUBLISHED_AT = "version_published_at";
+  @javax.annotation.Nullable
+  private String versionPublishedAt;
+
+  public static final String JSON_PROPERTY_VERSION = "version";
+  @javax.annotation.Nullable
+  private String version;
+
   public static final String JSON_PROPERTY_WEBHOOK_URL = "webhook_url";
   @javax.annotation.Nullable
   private String webhookUrl;
@@ -303,6 +318,57 @@ public static TemplateTypeEnum fromValue(String value) {
   @javax.annotation.Nonnull
   private Boolean demo;
 
+  public static final String JSON_PROPERTY_LATEST_VERSION = "latest_version";
+  @javax.annotation.Nullable
+  private String latestVersion;
+
+  public static final String JSON_PROPERTY_LAST_CHANGED_AT = "last_changed_at";
+  @javax.annotation.Nullable
+  private String lastChangedAt;
+
+  /**
+   * Gets or Sets lastChangedByType
+   */
+  public enum LastChangedByTypeEnum {
+    USER(String.valueOf("user")),
+    
+    API(String.valueOf("api"));
+
+    private String value;
+
+    LastChangedByTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static LastChangedByTypeEnum fromValue(String value) {
+      for (LastChangedByTypeEnum b : LastChangedByTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      return null;
+    }
+  }
+
+  public static final String JSON_PROPERTY_LAST_CHANGED_BY_TYPE = "last_changed_by_type";
+  @javax.annotation.Nullable
+  private LastChangedByTypeEnum lastChangedByType;
+
+  public static final String JSON_PROPERTY_LAST_CHANGED_BY_ID = "last_changed_by_id";
+  @javax.annotation.Nullable
+  private String lastChangedById;
+
   public static final String JSON_PROPERTY_DEFAULTS = "defaults";
   @javax.annotation.Nonnull
   private Object defaults;
@@ -343,6 +409,10 @@ public static TemplateTypeEnum fromValue(String value) {
   @javax.annotation.Nonnull
   private Object sharedFieldData;
 
+  public static final String JSON_PROPERTY_VERSIONS = "versions";
+  @javax.annotation.Nonnull
+  private List<Object> versions = new ArrayList<>();
+
   public Template() { 
   }
 
@@ -1204,6 +1274,56 @@ public void setUpdatedAt(@javax.annotation.Nullable String updatedAt) {
   }
 
 
+  public Template versionPublishedAt(@javax.annotation.Nullable String versionPublishedAt) {
+    this.versionPublishedAt = versionPublishedAt;
+    return this;
+  }
+
+  /**
+   * Get versionPublishedAt
+   * @return versionPublishedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VERSION_PUBLISHED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getVersionPublishedAt() {
+    return versionPublishedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSION_PUBLISHED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setVersionPublishedAt(@javax.annotation.Nullable String versionPublishedAt) {
+    this.versionPublishedAt = versionPublishedAt;
+  }
+
+
+  public Template version(@javax.annotation.Nullable String version) {
+    this.version = version;
+    return this;
+  }
+
+  /**
+   * Get version
+   * @return version
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getVersion() {
+    return version;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setVersion(@javax.annotation.Nullable String version) {
+    this.version = version;
+  }
+
+
   public Template webhookUrl(@javax.annotation.Nullable String webhookUrl) {
     this.webhookUrl = webhookUrl;
     return this;
@@ -1254,6 +1374,106 @@ public void setDemo(@javax.annotation.Nonnull Boolean demo) {
   }
 
 
+  public Template latestVersion(@javax.annotation.Nullable String latestVersion) {
+    this.latestVersion = latestVersion;
+    return this;
+  }
+
+  /**
+   * Get latestVersion
+   * @return latestVersion
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_LATEST_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getLatestVersion() {
+    return latestVersion;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LATEST_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLatestVersion(@javax.annotation.Nullable String latestVersion) {
+    this.latestVersion = latestVersion;
+  }
+
+
+  public Template lastChangedAt(@javax.annotation.Nullable String lastChangedAt) {
+    this.lastChangedAt = lastChangedAt;
+    return this;
+  }
+
+  /**
+   * Get lastChangedAt
+   * @return lastChangedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getLastChangedAt() {
+    return lastChangedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLastChangedAt(@javax.annotation.Nullable String lastChangedAt) {
+    this.lastChangedAt = lastChangedAt;
+  }
+
+
+  public Template lastChangedByType(@javax.annotation.Nullable LastChangedByTypeEnum lastChangedByType) {
+    this.lastChangedByType = lastChangedByType;
+    return this;
+  }
+
+  /**
+   * Get lastChangedByType
+   * @return lastChangedByType
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_BY_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public LastChangedByTypeEnum getLastChangedByType() {
+    return lastChangedByType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_BY_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLastChangedByType(@javax.annotation.Nullable LastChangedByTypeEnum lastChangedByType) {
+    this.lastChangedByType = lastChangedByType;
+  }
+
+
+  public Template lastChangedById(@javax.annotation.Nullable String lastChangedById) {
+    this.lastChangedById = lastChangedById;
+    return this;
+  }
+
+  /**
+   * Get lastChangedById
+   * @return lastChangedById
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_BY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getLastChangedById() {
+    return lastChangedById;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_BY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLastChangedById(@javax.annotation.Nullable String lastChangedById) {
+    this.lastChangedById = lastChangedById;
+  }
+
+
   public Template defaults(@javax.annotation.Nonnull Object defaults) {
     this.defaults = defaults;
     return this;
@@ -1520,6 +1740,39 @@ public void setSharedFieldData(@javax.annotation.Nonnull Object sharedFieldData)
   }
 
 
+  public Template versions(@javax.annotation.Nonnull List<Object> versions) {
+    this.versions = versions;
+    return this;
+  }
+
+  public Template addVersionsItem(Object versionsItem) {
+    if (this.versions == null) {
+      this.versions = new ArrayList<>();
+    }
+    this.versions.add(versionsItem);
+    return this;
+  }
+
+  /**
+   * Get versions
+   * @return versions
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_VERSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public List<Object> getVersions() {
+    return versions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSIONS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setVersions(@javax.annotation.Nonnull List<Object> versions) {
+    this.versions = versions;
+  }
+
+
   /**
    * Return true if this template object is equal to o.
    */
@@ -1566,8 +1819,14 @@ public boolean equals(Object o) {
         Objects.equals(this.slackWebhookUrl, template.slackWebhookUrl) &&
         Objects.equals(this.templateType, template.templateType) &&
         Objects.equals(this.updatedAt, template.updatedAt) &&
+        Objects.equals(this.versionPublishedAt, template.versionPublishedAt) &&
+        Objects.equals(this.version, template.version) &&
         Objects.equals(this.webhookUrl, template.webhookUrl) &&
         Objects.equals(this.demo, template.demo) &&
+        Objects.equals(this.latestVersion, template.latestVersion) &&
+        Objects.equals(this.lastChangedAt, template.lastChangedAt) &&
+        Objects.equals(this.lastChangedByType, template.lastChangedByType) &&
+        Objects.equals(this.lastChangedById, template.lastChangedById) &&
         Objects.equals(this.defaults, template.defaults) &&
         Objects.equals(this.fieldOrder, template.fieldOrder) &&
         Objects.equals(this.fields, template.fields) &&
@@ -1577,12 +1836,13 @@ public boolean equals(Object o) {
         Objects.equals(this.html, template.html) &&
         Objects.equals(this.predefinedFields, template.predefinedFields) &&
         Objects.equals(this.scss, template.scss) &&
-        Objects.equals(this.sharedFieldData, template.sharedFieldData);
+        Objects.equals(this.sharedFieldData, template.sharedFieldData) &&
+        Objects.equals(this.versions, template.versions);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(addDataRequestSubmissionIdFooters, allowAdditionalProperties, description, documentFilename, documentMd5, documentParseError, documentProcessed, documentState, documentUrl, editableSubmissions, embedDomains, encryptPdfsPassword, encryptPdfs, expirationInterval, expireAfter, expireSubmissions, externalPredefinedFieldsTemplateId, externalPredefinedFieldsTemplateName, firstTemplate, id, locked, mergeAuditTrailPdf, name, pageCount, pageDimensions, parentFolderId, path, permanentDocumentUrl, publicSubmissions, publicWebForm, redirectUrl, slackWebhookUrl, templateType, updatedAt, webhookUrl, demo, defaults, fieldOrder, fields, footerHtml, headerHtml, htmlEngineOptions, html, predefinedFields, scss, sharedFieldData);
+    return Objects.hash(addDataRequestSubmissionIdFooters, allowAdditionalProperties, description, documentFilename, documentMd5, documentParseError, documentProcessed, documentState, documentUrl, editableSubmissions, embedDomains, encryptPdfsPassword, encryptPdfs, expirationInterval, expireAfter, expireSubmissions, externalPredefinedFieldsTemplateId, externalPredefinedFieldsTemplateName, firstTemplate, id, locked, mergeAuditTrailPdf, name, pageCount, pageDimensions, parentFolderId, path, permanentDocumentUrl, publicSubmissions, publicWebForm, redirectUrl, slackWebhookUrl, templateType, updatedAt, versionPublishedAt, version, webhookUrl, demo, latestVersion, lastChangedAt, lastChangedByType, lastChangedById, defaults, fieldOrder, fields, footerHtml, headerHtml, htmlEngineOptions, html, predefinedFields, scss, sharedFieldData, versions);
   }
 
   @Override
@@ -1623,8 +1883,14 @@ public String toString() {
     sb.append("    slackWebhookUrl: ").append(toIndentedString(slackWebhookUrl)).append("\n");
     sb.append("    templateType: ").append(toIndentedString(templateType)).append("\n");
     sb.append("    updatedAt: ").append(toIndentedString(updatedAt)).append("\n");
+    sb.append("    versionPublishedAt: ").append(toIndentedString(versionPublishedAt)).append("\n");
+    sb.append("    version: ").append(toIndentedString(version)).append("\n");
     sb.append("    webhookUrl: ").append(toIndentedString(webhookUrl)).append("\n");
     sb.append("    demo: ").append(toIndentedString(demo)).append("\n");
+    sb.append("    latestVersion: ").append(toIndentedString(latestVersion)).append("\n");
+    sb.append("    lastChangedAt: ").append(toIndentedString(lastChangedAt)).append("\n");
+    sb.append("    lastChangedByType: ").append(toIndentedString(lastChangedByType)).append("\n");
+    sb.append("    lastChangedById: ").append(toIndentedString(lastChangedById)).append("\n");
     sb.append("    defaults: ").append(toIndentedString(defaults)).append("\n");
     sb.append("    fieldOrder: ").append(toIndentedString(fieldOrder)).append("\n");
     sb.append("    fields: ").append(toIndentedString(fields)).append("\n");
@@ -1635,6 +1901,7 @@ public String toString() {
     sb.append("    predefinedFields: ").append(toIndentedString(predefinedFields)).append("\n");
     sb.append("    scss: ").append(toIndentedString(scss)).append("\n");
     sb.append("    sharedFieldData: ").append(toIndentedString(sharedFieldData)).append("\n");
+    sb.append("    versions: ").append(toIndentedString(versions)).append("\n");
     sb.append("}");
     return sb.toString();
   }
diff --git a/src/main/java/com/docspring/TemplateDeleteResponse.java b/src/main/java/com/docspring/TemplateDeleteResponse.java
new file mode 100644
index 0000000..a474ec4
--- /dev/null
+++ b/src/main/java/com/docspring/TemplateDeleteResponse.java
@@ -0,0 +1,282 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.util.NoSuchElementException;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * TemplateDeleteResponse
+ */
+@JsonPropertyOrder({
+  TemplateDeleteResponse.JSON_PROPERTY_STATUS,
+  TemplateDeleteResponse.JSON_PROPERTY_ERRORS,
+  TemplateDeleteResponse.JSON_PROPERTY_LATEST_VERSION,
+  TemplateDeleteResponse.JSON_PROPERTY_VERSIONS
+})
+@JsonTypeName("template_delete_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class TemplateDeleteResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public static final String JSON_PROPERTY_LATEST_VERSION = "latest_version";
+  private JsonNullable<String> latestVersion = JsonNullable.<String>undefined();
+
+  public static final String JSON_PROPERTY_VERSIONS = "versions";
+  @javax.annotation.Nullable
+  private List<Object> versions = new ArrayList<>();
+
+  public TemplateDeleteResponse() { 
+  }
+
+  public TemplateDeleteResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public TemplateDeleteResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public TemplateDeleteResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  public TemplateDeleteResponse latestVersion(@javax.annotation.Nullable String latestVersion) {
+    this.latestVersion = JsonNullable.<String>of(latestVersion);
+    return this;
+  }
+
+  /**
+   * Get latestVersion
+   * @return latestVersion
+   */
+  @javax.annotation.Nullable
+  @JsonIgnore
+
+  public String getLatestVersion() {
+        return latestVersion.orElse(null);
+  }
+
+  @JsonProperty(JSON_PROPERTY_LATEST_VERSION)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public JsonNullable<String> getLatestVersion_JsonNullable() {
+    return latestVersion;
+  }
+  
+  @JsonProperty(JSON_PROPERTY_LATEST_VERSION)
+  public void setLatestVersion_JsonNullable(JsonNullable<String> latestVersion) {
+    this.latestVersion = latestVersion;
+  }
+
+  public void setLatestVersion(@javax.annotation.Nullable String latestVersion) {
+    this.latestVersion = JsonNullable.<String>of(latestVersion);
+  }
+
+
+  public TemplateDeleteResponse versions(@javax.annotation.Nullable List<Object> versions) {
+    this.versions = versions;
+    return this;
+  }
+
+  public TemplateDeleteResponse addVersionsItem(Object versionsItem) {
+    if (this.versions == null) {
+      this.versions = new ArrayList<>();
+    }
+    this.versions.add(versionsItem);
+    return this;
+  }
+
+  /**
+   * Get versions
+   * @return versions
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VERSIONS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<Object> getVersions() {
+    return versions;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSIONS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setVersions(@javax.annotation.Nullable List<Object> versions) {
+    this.versions = versions;
+  }
+
+
+  /**
+   * Return true if this template_delete_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TemplateDeleteResponse templateDeleteResponse = (TemplateDeleteResponse) o;
+    return Objects.equals(this.status, templateDeleteResponse.status) &&
+        Objects.equals(this.errors, templateDeleteResponse.errors) &&
+        equalsNullable(this.latestVersion, templateDeleteResponse.latestVersion) &&
+        Objects.equals(this.versions, templateDeleteResponse.versions);
+  }
+
+  private static <T> boolean equalsNullable(JsonNullable<T> a, JsonNullable<T> b) {
+    return a == b || (a != null && b != null && a.isPresent() && b.isPresent() && Objects.deepEquals(a.get(), b.get()));
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, errors, hashCodeNullable(latestVersion), versions);
+  }
+
+  private static <T> int hashCodeNullable(JsonNullable<T> a) {
+    if (a == null) {
+      return 1;
+    }
+    return a.isPresent() ? Arrays.deepHashCode(new Object[]{a.get()}) : 31;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TemplateDeleteResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("    latestVersion: ").append(toIndentedString(latestVersion)).append("\n");
+    sb.append("    versions: ").append(toIndentedString(versions)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/main/java/com/docspring/TemplatePreview.java b/src/main/java/com/docspring/TemplatePreview.java
index 23cff09..d6c2a7a 100644
--- a/src/main/java/com/docspring/TemplatePreview.java
+++ b/src/main/java/com/docspring/TemplatePreview.java
@@ -67,8 +67,14 @@
   TemplatePreview.JSON_PROPERTY_SLACK_WEBHOOK_URL,
   TemplatePreview.JSON_PROPERTY_TEMPLATE_TYPE,
   TemplatePreview.JSON_PROPERTY_UPDATED_AT,
+  TemplatePreview.JSON_PROPERTY_VERSION_PUBLISHED_AT,
+  TemplatePreview.JSON_PROPERTY_VERSION,
   TemplatePreview.JSON_PROPERTY_WEBHOOK_URL,
-  TemplatePreview.JSON_PROPERTY_DEMO
+  TemplatePreview.JSON_PROPERTY_DEMO,
+  TemplatePreview.JSON_PROPERTY_LATEST_VERSION,
+  TemplatePreview.JSON_PROPERTY_LAST_CHANGED_AT,
+  TemplatePreview.JSON_PROPERTY_LAST_CHANGED_BY_TYPE,
+  TemplatePreview.JSON_PROPERTY_LAST_CHANGED_BY_ID
 })
 @JsonTypeName("template_preview")
 @javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
@@ -285,6 +291,14 @@ public static TemplateTypeEnum fromValue(String value) {
   @javax.annotation.Nullable
   private String updatedAt;
 
+  public static final String JSON_PROPERTY_VERSION_PUBLISHED_AT = "version_published_at";
+  @javax.annotation.Nullable
+  private String versionPublishedAt;
+
+  public static final String JSON_PROPERTY_VERSION = "version";
+  @javax.annotation.Nullable
+  private String version;
+
   public static final String JSON_PROPERTY_WEBHOOK_URL = "webhook_url";
   @javax.annotation.Nullable
   private String webhookUrl;
@@ -293,6 +307,57 @@ public static TemplateTypeEnum fromValue(String value) {
   @javax.annotation.Nonnull
   private Boolean demo;
 
+  public static final String JSON_PROPERTY_LATEST_VERSION = "latest_version";
+  @javax.annotation.Nullable
+  private String latestVersion;
+
+  public static final String JSON_PROPERTY_LAST_CHANGED_AT = "last_changed_at";
+  @javax.annotation.Nullable
+  private String lastChangedAt;
+
+  /**
+   * Gets or Sets lastChangedByType
+   */
+  public enum LastChangedByTypeEnum {
+    USER(String.valueOf("user")),
+    
+    API(String.valueOf("api"));
+
+    private String value;
+
+    LastChangedByTypeEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static LastChangedByTypeEnum fromValue(String value) {
+      for (LastChangedByTypeEnum b : LastChangedByTypeEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      return null;
+    }
+  }
+
+  public static final String JSON_PROPERTY_LAST_CHANGED_BY_TYPE = "last_changed_by_type";
+  @javax.annotation.Nullable
+  private LastChangedByTypeEnum lastChangedByType;
+
+  public static final String JSON_PROPERTY_LAST_CHANGED_BY_ID = "last_changed_by_id";
+  @javax.annotation.Nullable
+  private String lastChangedById;
+
   public TemplatePreview() { 
   }
 
@@ -1154,6 +1219,56 @@ public void setUpdatedAt(@javax.annotation.Nullable String updatedAt) {
   }
 
 
+  public TemplatePreview versionPublishedAt(@javax.annotation.Nullable String versionPublishedAt) {
+    this.versionPublishedAt = versionPublishedAt;
+    return this;
+  }
+
+  /**
+   * Get versionPublishedAt
+   * @return versionPublishedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VERSION_PUBLISHED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getVersionPublishedAt() {
+    return versionPublishedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSION_PUBLISHED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setVersionPublishedAt(@javax.annotation.Nullable String versionPublishedAt) {
+    this.versionPublishedAt = versionPublishedAt;
+  }
+
+
+  public TemplatePreview version(@javax.annotation.Nullable String version) {
+    this.version = version;
+    return this;
+  }
+
+  /**
+   * Get version
+   * @return version
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getVersion() {
+    return version;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setVersion(@javax.annotation.Nullable String version) {
+    this.version = version;
+  }
+
+
   public TemplatePreview webhookUrl(@javax.annotation.Nullable String webhookUrl) {
     this.webhookUrl = webhookUrl;
     return this;
@@ -1204,6 +1319,106 @@ public void setDemo(@javax.annotation.Nonnull Boolean demo) {
   }
 
 
+  public TemplatePreview latestVersion(@javax.annotation.Nullable String latestVersion) {
+    this.latestVersion = latestVersion;
+    return this;
+  }
+
+  /**
+   * Get latestVersion
+   * @return latestVersion
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_LATEST_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getLatestVersion() {
+    return latestVersion;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LATEST_VERSION)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLatestVersion(@javax.annotation.Nullable String latestVersion) {
+    this.latestVersion = latestVersion;
+  }
+
+
+  public TemplatePreview lastChangedAt(@javax.annotation.Nullable String lastChangedAt) {
+    this.lastChangedAt = lastChangedAt;
+    return this;
+  }
+
+  /**
+   * Get lastChangedAt
+   * @return lastChangedAt
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getLastChangedAt() {
+    return lastChangedAt;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_AT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLastChangedAt(@javax.annotation.Nullable String lastChangedAt) {
+    this.lastChangedAt = lastChangedAt;
+  }
+
+
+  public TemplatePreview lastChangedByType(@javax.annotation.Nullable LastChangedByTypeEnum lastChangedByType) {
+    this.lastChangedByType = lastChangedByType;
+    return this;
+  }
+
+  /**
+   * Get lastChangedByType
+   * @return lastChangedByType
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_BY_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public LastChangedByTypeEnum getLastChangedByType() {
+    return lastChangedByType;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_BY_TYPE)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLastChangedByType(@javax.annotation.Nullable LastChangedByTypeEnum lastChangedByType) {
+    this.lastChangedByType = lastChangedByType;
+  }
+
+
+  public TemplatePreview lastChangedById(@javax.annotation.Nullable String lastChangedById) {
+    this.lastChangedById = lastChangedById;
+    return this;
+  }
+
+  /**
+   * Get lastChangedById
+   * @return lastChangedById
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_BY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public String getLastChangedById() {
+    return lastChangedById;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_LAST_CHANGED_BY_ID)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setLastChangedById(@javax.annotation.Nullable String lastChangedById) {
+    this.lastChangedById = lastChangedById;
+  }
+
+
   /**
    * Return true if this template_preview object is equal to o.
    */
@@ -1250,13 +1465,19 @@ public boolean equals(Object o) {
         Objects.equals(this.slackWebhookUrl, templatePreview.slackWebhookUrl) &&
         Objects.equals(this.templateType, templatePreview.templateType) &&
         Objects.equals(this.updatedAt, templatePreview.updatedAt) &&
+        Objects.equals(this.versionPublishedAt, templatePreview.versionPublishedAt) &&
+        Objects.equals(this.version, templatePreview.version) &&
         Objects.equals(this.webhookUrl, templatePreview.webhookUrl) &&
-        Objects.equals(this.demo, templatePreview.demo);
+        Objects.equals(this.demo, templatePreview.demo) &&
+        Objects.equals(this.latestVersion, templatePreview.latestVersion) &&
+        Objects.equals(this.lastChangedAt, templatePreview.lastChangedAt) &&
+        Objects.equals(this.lastChangedByType, templatePreview.lastChangedByType) &&
+        Objects.equals(this.lastChangedById, templatePreview.lastChangedById);
   }
 
   @Override
   public int hashCode() {
-    return Objects.hash(addDataRequestSubmissionIdFooters, allowAdditionalProperties, description, documentFilename, documentMd5, documentParseError, documentProcessed, documentState, documentUrl, editableSubmissions, embedDomains, encryptPdfsPassword, encryptPdfs, expirationInterval, expireAfter, expireSubmissions, externalPredefinedFieldsTemplateId, externalPredefinedFieldsTemplateName, firstTemplate, id, locked, mergeAuditTrailPdf, name, pageCount, pageDimensions, parentFolderId, path, permanentDocumentUrl, publicSubmissions, publicWebForm, redirectUrl, slackWebhookUrl, templateType, updatedAt, webhookUrl, demo);
+    return Objects.hash(addDataRequestSubmissionIdFooters, allowAdditionalProperties, description, documentFilename, documentMd5, documentParseError, documentProcessed, documentState, documentUrl, editableSubmissions, embedDomains, encryptPdfsPassword, encryptPdfs, expirationInterval, expireAfter, expireSubmissions, externalPredefinedFieldsTemplateId, externalPredefinedFieldsTemplateName, firstTemplate, id, locked, mergeAuditTrailPdf, name, pageCount, pageDimensions, parentFolderId, path, permanentDocumentUrl, publicSubmissions, publicWebForm, redirectUrl, slackWebhookUrl, templateType, updatedAt, versionPublishedAt, version, webhookUrl, demo, latestVersion, lastChangedAt, lastChangedByType, lastChangedById);
   }
 
   @Override
@@ -1297,8 +1518,14 @@ public String toString() {
     sb.append("    slackWebhookUrl: ").append(toIndentedString(slackWebhookUrl)).append("\n");
     sb.append("    templateType: ").append(toIndentedString(templateType)).append("\n");
     sb.append("    updatedAt: ").append(toIndentedString(updatedAt)).append("\n");
+    sb.append("    versionPublishedAt: ").append(toIndentedString(versionPublishedAt)).append("\n");
+    sb.append("    version: ").append(toIndentedString(version)).append("\n");
     sb.append("    webhookUrl: ").append(toIndentedString(webhookUrl)).append("\n");
     sb.append("    demo: ").append(toIndentedString(demo)).append("\n");
+    sb.append("    latestVersion: ").append(toIndentedString(latestVersion)).append("\n");
+    sb.append("    lastChangedAt: ").append(toIndentedString(lastChangedAt)).append("\n");
+    sb.append("    lastChangedByType: ").append(toIndentedString(lastChangedByType)).append("\n");
+    sb.append("    lastChangedById: ").append(toIndentedString(lastChangedById)).append("\n");
     sb.append("}");
     return sb.toString();
   }
diff --git a/src/main/java/com/docspring/TemplatePublishVersionResponse.java b/src/main/java/com/docspring/TemplatePublishVersionResponse.java
new file mode 100644
index 0000000..7977654
--- /dev/null
+++ b/src/main/java/com/docspring/TemplatePublishVersionResponse.java
@@ -0,0 +1,220 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import java.util.Objects;
+import java.util.Map;
+import java.util.HashMap;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import com.docspring.JSON;
+
+
+/**
+ * TemplatePublishVersionResponse
+ */
+@JsonPropertyOrder({
+  TemplatePublishVersionResponse.JSON_PROPERTY_STATUS,
+  TemplatePublishVersionResponse.JSON_PROPERTY_RESULT,
+  TemplatePublishVersionResponse.JSON_PROPERTY_ERRORS
+})
+@JsonTypeName("template_publish_version_response")
+@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.11.0")
+public class TemplatePublishVersionResponse {
+  /**
+   * Gets or Sets status
+   */
+  public enum StatusEnum {
+    SUCCESS(String.valueOf("success")),
+    
+    ERROR(String.valueOf("error"));
+
+    private String value;
+
+    StatusEnum(String value) {
+      this.value = value;
+    }
+
+    @JsonValue
+    public String getValue() {
+      return value;
+    }
+
+    @Override
+    public String toString() {
+      return String.valueOf(value);
+    }
+
+    @JsonCreator
+    public static StatusEnum fromValue(String value) {
+      for (StatusEnum b : StatusEnum.values()) {
+        if (b.value.equalsIgnoreCase(value)) {
+          return b;
+        }
+      }
+      throw new IllegalArgumentException("Unexpected value '" + value + "'");
+    }
+  }
+
+  public static final String JSON_PROPERTY_STATUS = "status";
+  @javax.annotation.Nonnull
+  private StatusEnum status;
+
+  public static final String JSON_PROPERTY_RESULT = "result";
+  @javax.annotation.Nonnull
+  private Object result;
+
+  public static final String JSON_PROPERTY_ERRORS = "errors";
+  @javax.annotation.Nullable
+  private List<String> errors = new ArrayList<>();
+
+  public TemplatePublishVersionResponse() { 
+  }
+
+  public TemplatePublishVersionResponse status(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+    return this;
+  }
+
+  /**
+   * Get status
+   * @return status
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public StatusEnum getStatus() {
+    return status;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_STATUS)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setStatus(@javax.annotation.Nonnull StatusEnum status) {
+    this.status = status;
+  }
+
+
+  public TemplatePublishVersionResponse result(@javax.annotation.Nonnull Object result) {
+    this.result = result;
+    return this;
+  }
+
+  /**
+   * Get result
+   * @return result
+   */
+  @javax.annotation.Nonnull
+  @JsonProperty(JSON_PROPERTY_RESULT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+
+  public Object getResult() {
+    return result;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_RESULT)
+  @JsonInclude(value = JsonInclude.Include.ALWAYS)
+  public void setResult(@javax.annotation.Nonnull Object result) {
+    this.result = result;
+  }
+
+
+  public TemplatePublishVersionResponse errors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+    return this;
+  }
+
+  public TemplatePublishVersionResponse addErrorsItem(String errorsItem) {
+    if (this.errors == null) {
+      this.errors = new ArrayList<>();
+    }
+    this.errors.add(errorsItem);
+    return this;
+  }
+
+  /**
+   * Get errors
+   * @return errors
+   */
+  @javax.annotation.Nullable
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+
+  public List<String> getErrors() {
+    return errors;
+  }
+
+
+  @JsonProperty(JSON_PROPERTY_ERRORS)
+  @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
+  public void setErrors(@javax.annotation.Nullable List<String> errors) {
+    this.errors = errors;
+  }
+
+
+  /**
+   * Return true if this template_publish_version_response object is equal to o.
+   */
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (o == null || getClass() != o.getClass()) {
+      return false;
+    }
+    TemplatePublishVersionResponse templatePublishVersionResponse = (TemplatePublishVersionResponse) o;
+    return Objects.equals(this.status, templatePublishVersionResponse.status) &&
+        Objects.equals(this.result, templatePublishVersionResponse.result) &&
+        Objects.equals(this.errors, templatePublishVersionResponse.errors);
+  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(status, result, errors);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder();
+    sb.append("class TemplatePublishVersionResponse {\n");
+    sb.append("    status: ").append(toIndentedString(status)).append("\n");
+    sb.append("    result: ").append(toIndentedString(result)).append("\n");
+    sb.append("    errors: ").append(toIndentedString(errors)).append("\n");
+    sb.append("}");
+    return sb.toString();
+  }
+
+  /**
+   * Convert the given object to string with each line indented by 4 spaces
+   * (except the first line).
+   */
+  private String toIndentedString(Object o) {
+    if (o == null) {
+      return "null";
+    }
+    return o.toString().replace("\n", "\n    ");
+  }
+
+}
+
diff --git a/src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java b/src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java
index 86a6b4a..067dd90 100644
--- a/src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java
+++ b/src/test/java/com/docspring/CreateHtmlSubmissionDataTest.java
@@ -110,4 +110,12 @@ public void testTest() {
         // TODO: test test
     }
 
+    /**
+     * Test the property 'version'
+     */
+    @Test
+    public void versionTest() {
+        // TODO: test version
+    }
+
 }
diff --git a/src/test/java/com/docspring/CreatePdfSubmissionDataTest.java b/src/test/java/com/docspring/CreatePdfSubmissionDataTest.java
index 6b8e50e..6005f72 100644
--- a/src/test/java/com/docspring/CreatePdfSubmissionDataTest.java
+++ b/src/test/java/com/docspring/CreatePdfSubmissionDataTest.java
@@ -105,4 +105,12 @@ public void testTest() {
         // TODO: test test
     }
 
+    /**
+     * Test the property 'version'
+     */
+    @Test
+    public void versionTest() {
+        // TODO: test version
+    }
+
 }
diff --git a/src/test/java/com/docspring/PdfApiTest.java.original b/src/test/java/com/docspring/PdfApiTest.java.original
index 392aebb..4d75196 100644
--- a/src/test/java/com/docspring/PdfApiTest.java.original
+++ b/src/test/java/com/docspring/PdfApiTest.java.original
@@ -43,7 +43,9 @@ import com.docspring.ListSubmissionsResponse;
 import com.docspring.MoveFolderData;
 import com.docspring.MoveTemplateData;
 import com.docspring.MultipleErrorsResponse;
+import com.docspring.PublishVersionData;
 import com.docspring.RenameFolderData;
+import com.docspring.RestoreVersionData;
 import com.docspring.Submission;
 import com.docspring.SubmissionBatchData;
 import com.docspring.SubmissionBatchWithSubmissions;
@@ -53,7 +55,9 @@ import com.docspring.SuccessErrorResponse;
 import com.docspring.SuccessMultipleErrorsResponse;
 import com.docspring.Template;
 import com.docspring.TemplateAddFieldsResponse;
+import com.docspring.TemplateDeleteResponse;
 import com.docspring.TemplatePreview;
+import com.docspring.TemplatePublishVersionResponse;
 import com.docspring.UpdateHtmlTemplate;
 import com.docspring.UpdateSubmissionDataRequestData;
 import com.docspring.UploadPresignResponse;
@@ -248,7 +252,8 @@ public class PdfApiTest {
     @Test
     public void deleteTemplateTest() throws ApiException {
         //String templateId = null;
-        //SuccessMultipleErrorsResponse response = api.deleteTemplate(templateId);
+        //String version = null;
+        //TemplateDeleteResponse response = api.deleteTemplate(templateId, version);
         // TODO: test validations
     }
 
@@ -341,7 +346,7 @@ public class PdfApiTest {
     }
 
     /**
-     * Fetch the full template attributes
+     * Fetch the full attributes for a PDF template
      *
      * @throws ApiException if the Api call fails
      */
@@ -514,6 +519,19 @@ public class PdfApiTest {
         // TODO: test validations
     }
 
+    /**
+     * Publish a template version
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void publishTemplateVersionTest() throws ApiException {
+        //String templateId = null;
+        //PublishVersionData data = null;
+        //TemplatePublishVersionResponse response = api.publishTemplateVersion(templateId, data);
+        // TODO: test validations
+    }
+
     /**
      * Rename a folder
      *
@@ -527,6 +545,19 @@ public class PdfApiTest {
         // TODO: test validations
     }
 
+    /**
+     * Restore a template version
+     *
+     * @throws ApiException if the Api call fails
+     */
+    @Test
+    public void restoreTemplateVersionTest() throws ApiException {
+        //String templateId = null;
+        //RestoreVersionData data = null;
+        //SuccessErrorResponse response = api.restoreTemplateVersion(templateId, data);
+        // TODO: test validations
+    }
+
     /**
      * Test Authentication
      *
diff --git a/src/test/java/com/docspring/PublishVersionDataTest.java b/src/test/java/com/docspring/PublishVersionDataTest.java
new file mode 100644
index 0000000..856be8b
--- /dev/null
+++ b/src/test/java/com/docspring/PublishVersionDataTest.java
@@ -0,0 +1,57 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for PublishVersionData
+ */
+public class PublishVersionDataTest {
+    private final PublishVersionData model = new PublishVersionData();
+
+    /**
+     * Model tests for PublishVersionData
+     */
+    @Test
+    public void testPublishVersionData() {
+        // TODO: test PublishVersionData
+    }
+
+    /**
+     * Test the property 'description'
+     */
+    @Test
+    public void descriptionTest() {
+        // TODO: test description
+    }
+
+    /**
+     * Test the property 'versionType'
+     */
+    @Test
+    public void versionTypeTest() {
+        // TODO: test versionType
+    }
+
+}
diff --git a/src/test/java/com/docspring/RestoreVersionDataTest.java b/src/test/java/com/docspring/RestoreVersionDataTest.java
new file mode 100644
index 0000000..5e2bb30
--- /dev/null
+++ b/src/test/java/com/docspring/RestoreVersionDataTest.java
@@ -0,0 +1,49 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.Arrays;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for RestoreVersionData
+ */
+public class RestoreVersionDataTest {
+    private final RestoreVersionData model = new RestoreVersionData();
+
+    /**
+     * Model tests for RestoreVersionData
+     */
+    @Test
+    public void testRestoreVersionData() {
+        // TODO: test RestoreVersionData
+    }
+
+    /**
+     * Test the property 'version'
+     */
+    @Test
+    public void versionTest() {
+        // TODO: test version
+    }
+
+}
diff --git a/src/test/java/com/docspring/SubmissionPreviewTest.java b/src/test/java/com/docspring/SubmissionPreviewTest.java
index 9a1b04b..d18a998 100644
--- a/src/test/java/com/docspring/SubmissionPreviewTest.java
+++ b/src/test/java/com/docspring/SubmissionPreviewTest.java
@@ -138,6 +138,22 @@ public void templateIdTest() {
         // TODO: test templateId
     }
 
+    /**
+     * Test the property 'templateType'
+     */
+    @Test
+    public void templateTypeTest() {
+        // TODO: test templateType
+    }
+
+    /**
+     * Test the property 'templateVersion'
+     */
+    @Test
+    public void templateVersionTest() {
+        // TODO: test templateVersion
+    }
+
     /**
      * Test the property 'test'
      */
diff --git a/src/test/java/com/docspring/SubmissionTest.java b/src/test/java/com/docspring/SubmissionTest.java
index e3273d0..d753b94 100644
--- a/src/test/java/com/docspring/SubmissionTest.java
+++ b/src/test/java/com/docspring/SubmissionTest.java
@@ -138,6 +138,22 @@ public void templateIdTest() {
         // TODO: test templateId
     }
 
+    /**
+     * Test the property 'templateType'
+     */
+    @Test
+    public void templateTypeTest() {
+        // TODO: test templateType
+    }
+
+    /**
+     * Test the property 'templateVersion'
+     */
+    @Test
+    public void templateVersionTest() {
+        // TODO: test templateVersion
+    }
+
     /**
      * Test the property 'test'
      */
diff --git a/src/test/java/com/docspring/TemplateDeleteResponseTest.java b/src/test/java/com/docspring/TemplateDeleteResponseTest.java
new file mode 100644
index 0000000..0af2c86
--- /dev/null
+++ b/src/test/java/com/docspring/TemplateDeleteResponseTest.java
@@ -0,0 +1,79 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import org.openapitools.jackson.nullable.JsonNullable;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.openapitools.jackson.nullable.JsonNullable;
+import java.util.NoSuchElementException;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for TemplateDeleteResponse
+ */
+public class TemplateDeleteResponseTest {
+    private final TemplateDeleteResponse model = new TemplateDeleteResponse();
+
+    /**
+     * Model tests for TemplateDeleteResponse
+     */
+    @Test
+    public void testTemplateDeleteResponse() {
+        // TODO: test TemplateDeleteResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+    /**
+     * Test the property 'latestVersion'
+     */
+    @Test
+    public void latestVersionTest() {
+        // TODO: test latestVersion
+    }
+
+    /**
+     * Test the property 'versions'
+     */
+    @Test
+    public void versionsTest() {
+        // TODO: test versions
+    }
+
+}
diff --git a/src/test/java/com/docspring/TemplatePreviewTest.java b/src/test/java/com/docspring/TemplatePreviewTest.java
index ae0575f..d9677bc 100644
--- a/src/test/java/com/docspring/TemplatePreviewTest.java
+++ b/src/test/java/com/docspring/TemplatePreviewTest.java
@@ -313,6 +313,22 @@ public void updatedAtTest() {
         // TODO: test updatedAt
     }
 
+    /**
+     * Test the property 'versionPublishedAt'
+     */
+    @Test
+    public void versionPublishedAtTest() {
+        // TODO: test versionPublishedAt
+    }
+
+    /**
+     * Test the property 'version'
+     */
+    @Test
+    public void versionTest() {
+        // TODO: test version
+    }
+
     /**
      * Test the property 'webhookUrl'
      */
@@ -329,4 +345,36 @@ public void demoTest() {
         // TODO: test demo
     }
 
+    /**
+     * Test the property 'latestVersion'
+     */
+    @Test
+    public void latestVersionTest() {
+        // TODO: test latestVersion
+    }
+
+    /**
+     * Test the property 'lastChangedAt'
+     */
+    @Test
+    public void lastChangedAtTest() {
+        // TODO: test lastChangedAt
+    }
+
+    /**
+     * Test the property 'lastChangedByType'
+     */
+    @Test
+    public void lastChangedByTypeTest() {
+        // TODO: test lastChangedByType
+    }
+
+    /**
+     * Test the property 'lastChangedById'
+     */
+    @Test
+    public void lastChangedByIdTest() {
+        // TODO: test lastChangedById
+    }
+
 }
diff --git a/src/test/java/com/docspring/TemplatePublishVersionResponseTest.java b/src/test/java/com/docspring/TemplatePublishVersionResponseTest.java
new file mode 100644
index 0000000..eecc0fe
--- /dev/null
+++ b/src/test/java/com/docspring/TemplatePublishVersionResponseTest.java
@@ -0,0 +1,67 @@
+/*
+ * DocSpring API
+ * DocSpring provides an API that helps you fill out and sign PDF templates.
+ *
+ * The version of the OpenAPI document: v1
+ * 
+ *
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+
+
+package com.docspring;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonTypeName;
+import com.fasterxml.jackson.annotation.JsonValue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+/**
+ * Model tests for TemplatePublishVersionResponse
+ */
+public class TemplatePublishVersionResponseTest {
+    private final TemplatePublishVersionResponse model = new TemplatePublishVersionResponse();
+
+    /**
+     * Model tests for TemplatePublishVersionResponse
+     */
+    @Test
+    public void testTemplatePublishVersionResponse() {
+        // TODO: test TemplatePublishVersionResponse
+    }
+
+    /**
+     * Test the property 'status'
+     */
+    @Test
+    public void statusTest() {
+        // TODO: test status
+    }
+
+    /**
+     * Test the property 'result'
+     */
+    @Test
+    public void resultTest() {
+        // TODO: test result
+    }
+
+    /**
+     * Test the property 'errors'
+     */
+    @Test
+    public void errorsTest() {
+        // TODO: test errors
+    }
+
+}
diff --git a/src/test/java/com/docspring/TemplateTest.java b/src/test/java/com/docspring/TemplateTest.java
index 9d4c14c..d5d397f 100644
--- a/src/test/java/com/docspring/TemplateTest.java
+++ b/src/test/java/com/docspring/TemplateTest.java
@@ -313,6 +313,22 @@ public void updatedAtTest() {
         // TODO: test updatedAt
     }
 
+    /**
+     * Test the property 'versionPublishedAt'
+     */
+    @Test
+    public void versionPublishedAtTest() {
+        // TODO: test versionPublishedAt
+    }
+
+    /**
+     * Test the property 'version'
+     */
+    @Test
+    public void versionTest() {
+        // TODO: test version
+    }
+
     /**
      * Test the property 'webhookUrl'
      */
@@ -329,6 +345,38 @@ public void demoTest() {
         // TODO: test demo
     }
 
+    /**
+     * Test the property 'latestVersion'
+     */
+    @Test
+    public void latestVersionTest() {
+        // TODO: test latestVersion
+    }
+
+    /**
+     * Test the property 'lastChangedAt'
+     */
+    @Test
+    public void lastChangedAtTest() {
+        // TODO: test lastChangedAt
+    }
+
+    /**
+     * Test the property 'lastChangedByType'
+     */
+    @Test
+    public void lastChangedByTypeTest() {
+        // TODO: test lastChangedByType
+    }
+
+    /**
+     * Test the property 'lastChangedById'
+     */
+    @Test
+    public void lastChangedByIdTest() {
+        // TODO: test lastChangedById
+    }
+
     /**
      * Test the property 'defaults'
      */
@@ -409,4 +457,12 @@ public void sharedFieldDataTest() {
         // TODO: test sharedFieldData
     }
 
+    /**
+     * Test the property 'versions'
+     */
+    @Test
+    public void versionsTest() {
+        // TODO: test versions
+    }
+
 }
