Skip to content

Commit 14345ba

Browse files
committed
Update to version 4.4.0 on 2026-11-01
- New: list_email_actions, create_email_action, get_email_action, update_email_action and delete_email_action manage a template's email actions (`EmailAction`), which email each processed submission's files as attachments or a download link. `to`, `cc` and `bcc` take addresses, and tags for an address in the submission's fields (`{{ data.client_email }}`) or metadata (`{{ metadata.agent_email }}`). `send_when` sends only for the submissions that meet its conditions. `file_name` names the attached files, and `file_formats` chooses them: a Word template's Word document (`docx`), OpenDocument file (`odt`) or PDF (`pdf`), or every file the submission made (`all`). Attached files over `max_attachment_mb` together (7 MB unless you raise it, up to 25) go as a link instead. send_email_action_test_email sends one to you to check how it looks (`EmailActionTestEmail`). Without a paid plan (Starter or higher), email actions only email your team: test emails, and test submissions' emails. - New: list_account_email_actions, create_account_email_action, get_account_email_action, update_account_email_action and delete_account_email_action manage your account's email actions, which send for every template, or for the templates and folders they list (`template_ids`, `folder_ids`). send_account_email_action_test_email sends one to you for one of its templates. - New: list_email_actions also lists your account's email actions that send for the template, with the template's changes in `customization` (`EmailActionCustomization`). update_email_action_customization changes one for that template only, or turns it off there (`enabled`), and delete_email_action_customization removes the template's changes. - New: list_email_domains, create_email_domain, get_email_domain, verify_email_domain and delete_email_domain manage the domains your email actions send from (`EmailDomain`), with the DNS records to add to each one (`EmailDomainDnsRecord`). - A submission's `actions` include the emails its email actions sent (its template's and your account's), with each recipient and what happened to their email, and a new `email_action_id`. - New: a field's `string_condition_type` can be `not_equals`, `not_contains`, `not_starts_with`, `not_ends_with`, `not_regex`, `blank` or `not_blank`, and a `regex` condition uses RE2 syntax (no lookarounds or backreferences). - create_submission: DocSpring now emails the signers of a submission's `signature_requests` a link to sign, any reminders, and the signed PDF once everyone has signed. Set `send_email` to false, for the submission or for one signature request, when you send the links yourself or show the signing form in your app. A signature request that DocSpring emails needs an `email`, and its `auth_type` is optional (`email_link`). Before anyone is emailed, the request can be refused with a 402 (`insufficient_credits_to_send`), a 403 or a 429 (`daily_email_limit_reached`), and nothing is saved. - New create_submission properties for these emails: `signing_order` (`SigningOrder`) with each signature request's `signing_step`, `email_subject`, `email_message`, `cc`, `reply_to`, `notification_emails`, `notify_when_signed` and `reminders` (`SignatureRequestReminders`). - A signature request has `send_email`, `signing_step`, `sent_at` and `email_status` (`SignatureRequestEmailStatus`), and a submission has `signing_order`. - Templates have new settings for these emails: `signature_request_from_name`, `signature_request_from_address`, `signature_request_signing_url`, `signature_request_include_signing_token`, `signature_request_reply_to`, `signature_request_notification_emails` and `signature_request_email_attachments` (`SignatureRequestEmailAttachments`). - New webhook event types: `signature_request.sent` and `signature_request.email_bounced`. - New: page designs (`template_type` `page_designer`), PDFs designed in the Page Designer from a JSON layout, with no document to start from. create_template makes one from its `layout`, or with an empty page when `layout` is left out, and update_template replaces its layout. DocSpring adds a field for each value the layout reads. A template's `layout` is in the [Page Designer layout format](https://docspring.com/docs/page-designer/layout-format/) (its [JSON Schema](https://docspring.com/schemas/page-designer/layout.v1.json)), and is null for other templates. - New: every method that creates, changes or deletes something takes an `Idempotency-Key` header, as its last argument, `idempotency_key`. Send the same key when you send a request again after a timeout or a network error: within 24 hours, DocSpring returns the first response instead of running the request twice. Arguments you already pass keep their places. - Changed: the request validator checks what API v2 now refuses: an ID, a query value or a template name that's blank or only whitespace, an update with nothing to change, a version with a leading zero (`01`), a `filename` with a slash, a signer `email` that isn't an email address, and an HTML template's `scale` outside 0.1 to 2. - New: get_template_model_code takes `rust` as its `lang`, for Rust structs that serde reads and writes.
1 parent e83ebda commit 14345ba

171 files changed

Lines changed: 18468 additions & 4401 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/python.yml‎

Lines changed: 0 additions & 34 deletions
This file was deleted.

‎.github/workflows/release.yml‎

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Written by DocSpring/docspring's api_clients/scripts/generate from api_clients/github_workflows/python/release.yml:
2+
# change it there.
3+
#
4+
# Builds the package on every push and pull request. A v* tag (pushed by the monorepo's api_clients/scripts/release)
5+
# also publishes it to PyPI with trusted publishing, in the release environment, and waits until PyPI serves it.
6+
# OpenAPI Generator's python.yml runs the package's tests.
7+
name: Release
8+
9+
on:
10+
push:
11+
branches: ['**']
12+
tags: ['v*']
13+
pull_request:
14+
15+
permissions:
16+
contents: read
17+
18+
jobs:
19+
build:
20+
runs-on: ubuntu-latest
21+
steps:
22+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
23+
with:
24+
persist-credentials: false
25+
- uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
26+
- name: Check the tag matches the package version
27+
if: github.ref_type == 'tag'
28+
run: |
29+
VERSION="$(python3 -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
30+
if [ "v$VERSION" != "$GITHUB_REF_NAME" ]; then
31+
echo "::error::The tag is $GITHUB_REF_NAME, but the package version is $VERSION"
32+
exit 1
33+
fi
34+
- run: uv build --wheel
35+
- run: uvx twine check --strict dist/*
36+
- if: github.ref_type == 'tag'
37+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
38+
with:
39+
name: package
40+
path: dist/
41+
if-no-files-found: error
42+
43+
publish:
44+
needs: build
45+
if: github.ref_type == 'tag'
46+
runs-on: ubuntu-latest
47+
environment: release
48+
permissions:
49+
contents: read
50+
id-token: write
51+
steps:
52+
- uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
53+
with:
54+
name: package
55+
path: dist/
56+
- uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
57+
58+
verify:
59+
needs: publish
60+
runs-on: ubuntu-latest
61+
timeout-minutes: 15
62+
steps:
63+
- name: Wait until PyPI serves the version
64+
run: |
65+
VERSION="${GITHUB_REF_NAME#v}"
66+
for _ in $(seq 60); do
67+
if curl -fsS -o /dev/null "https://pypi.org/pypi/docspring/$VERSION/json"; then
68+
echo "PyPI serves docspring $VERSION"
69+
exit 0
70+
fi
71+
sleep 10
72+
done
73+
echo "::error::PyPI doesn't serve docspring $VERSION after 10 minutes"
74+
exit 1

‎.gitlab-ci.yml‎

Lines changed: 0 additions & 31 deletions
This file was deleted.

‎.openapi-generator/FILES‎

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@ docs/CombinedPdfSourcePdf.md
1919
docs/CombinedPdfSourceType.md
2020
docs/CombinedPdfState.md
2121
docs/CopyTemplateRequest.md
22+
docs/CreateAccountEmailActionRequest.md
2223
docs/CreateCombinedPdfRequest.md
2324
docs/CreateCustomFileFromUploadRequest.md
25+
docs/CreateEmailActionRequest.md
26+
docs/CreateEmailDomainRequest.md
2427
docs/CreateFolderRequest.md
2528
docs/CreateSignatureRequestEventRequest.md
2629
docs/CreateSignatureRequestTokenRequest.md
@@ -32,6 +35,23 @@ docs/CreateWebhookRequest.md
3235
docs/CustomFile.md
3336
docs/CustomFileList.md
3437
docs/CustomFileSourcePdf.md
38+
docs/DnsRecordType.md
39+
docs/EmailAction.md
40+
docs/EmailActionConditions.md
41+
docs/EmailActionConditionsInput.md
42+
docs/EmailActionCustomization.md
43+
docs/EmailActionDelivery.md
44+
docs/EmailActionFileFormats.md
45+
docs/EmailActionList.md
46+
docs/EmailActionSetting.md
47+
docs/EmailActionSubmissionType.md
48+
docs/EmailActionTestEmail.md
49+
docs/EmailDomain.md
50+
docs/EmailDomainDnsRecord.md
51+
docs/EmailDomainDnsRecordPurpose.md
52+
docs/EmailDomainList.md
53+
docs/EmailDomainRecordState.md
54+
docs/EmailDomainState.md
3555
docs/ErrorCode.md
3656
docs/ErrorDetail.md
3757
docs/ErrorInfo.md
@@ -84,17 +104,22 @@ docs/RemoveTemplateFieldsRequest.md
84104
docs/RenameFolderRequest.md
85105
docs/ReorderTemplateFieldsRequest.md
86106
docs/RestoreTemplateVersionRequest.md
107+
docs/SendAccountEmailActionTestEmailRequest.md
87108
docs/ShapeType.md
88109
docs/SignatureRequest.md
89110
docs/SignatureRequestAuthSecondFactorType.md
90111
docs/SignatureRequestAuthType.md
112+
docs/SignatureRequestEmailAttachments.md
113+
docs/SignatureRequestEmailStatus.md
91114
docs/SignatureRequestEvent.md
92115
docs/SignatureRequestEventType.md
93116
docs/SignatureRequestInput.md
94117
docs/SignatureRequestMessageType.md
118+
docs/SignatureRequestReminders.md
95119
docs/SignatureRequestState.md
96120
docs/SignatureRequestToken.md
97121
docs/SignatureRequestTokenType.md
122+
docs/SigningOrder.md
98123
docs/StringConditionType.md
99124
docs/Submission.md
100125
docs/SubmissionAction.md
@@ -152,6 +177,9 @@ docs/TextAlignment.md
152177
docs/TextOverflow.md
153178
docs/TextVerticalAlignment.md
154179
docs/Typeface.md
180+
docs/UpdateAccountEmailActionRequest.md
181+
docs/UpdateEmailActionCustomizationRequest.md
182+
docs/UpdateEmailActionRequest.md
155183
docs/UpdateSignatureRequestRequest.md
156184
docs/UpdateTemplateDocumentRequest.md
157185
docs/UpdateTemplateFieldsRequest.md
@@ -188,8 +216,11 @@ docspring/models/combined_pdf_source_pdf.py
188216
docspring/models/combined_pdf_source_type.py
189217
docspring/models/combined_pdf_state.py
190218
docspring/models/copy_template_request.py
219+
docspring/models/create_account_email_action_request.py
191220
docspring/models/create_combined_pdf_request.py
192221
docspring/models/create_custom_file_from_upload_request.py
222+
docspring/models/create_email_action_request.py
223+
docspring/models/create_email_domain_request.py
193224
docspring/models/create_folder_request.py
194225
docspring/models/create_signature_request_event_request.py
195226
docspring/models/create_signature_request_token_request.py
@@ -201,6 +232,23 @@ docspring/models/create_webhook_request.py
201232
docspring/models/custom_file.py
202233
docspring/models/custom_file_list.py
203234
docspring/models/custom_file_source_pdf.py
235+
docspring/models/dns_record_type.py
236+
docspring/models/email_action.py
237+
docspring/models/email_action_conditions.py
238+
docspring/models/email_action_conditions_input.py
239+
docspring/models/email_action_customization.py
240+
docspring/models/email_action_delivery.py
241+
docspring/models/email_action_file_formats.py
242+
docspring/models/email_action_list.py
243+
docspring/models/email_action_setting.py
244+
docspring/models/email_action_submission_type.py
245+
docspring/models/email_action_test_email.py
246+
docspring/models/email_domain.py
247+
docspring/models/email_domain_dns_record.py
248+
docspring/models/email_domain_dns_record_purpose.py
249+
docspring/models/email_domain_list.py
250+
docspring/models/email_domain_record_state.py
251+
docspring/models/email_domain_state.py
204252
docspring/models/error_code.py
205253
docspring/models/error_detail.py
206254
docspring/models/error_info.py
@@ -253,17 +301,22 @@ docspring/models/remove_template_fields_request.py
253301
docspring/models/rename_folder_request.py
254302
docspring/models/reorder_template_fields_request.py
255303
docspring/models/restore_template_version_request.py
304+
docspring/models/send_account_email_action_test_email_request.py
256305
docspring/models/shape_type.py
257306
docspring/models/signature_request.py
258307
docspring/models/signature_request_auth_second_factor_type.py
259308
docspring/models/signature_request_auth_type.py
309+
docspring/models/signature_request_email_attachments.py
310+
docspring/models/signature_request_email_status.py
260311
docspring/models/signature_request_event.py
261312
docspring/models/signature_request_event_type.py
262313
docspring/models/signature_request_input.py
263314
docspring/models/signature_request_message_type.py
315+
docspring/models/signature_request_reminders.py
264316
docspring/models/signature_request_state.py
265317
docspring/models/signature_request_token.py
266318
docspring/models/signature_request_token_type.py
319+
docspring/models/signing_order.py
267320
docspring/models/string_condition_type.py
268321
docspring/models/submission.py
269322
docspring/models/submission_action.py
@@ -321,6 +374,9 @@ docspring/models/text_alignment.py
321374
docspring/models/text_overflow.py
322375
docspring/models/text_vertical_alignment.py
323376
docspring/models/typeface.py
377+
docspring/models/update_account_email_action_request.py
378+
docspring/models/update_email_action_customization_request.py
379+
docspring/models/update_email_action_request.py
324380
docspring/models/update_signature_request_request.py
325381
docspring/models/update_template_document_request.py
326382
docspring/models/update_template_fields_request.py
@@ -359,8 +415,11 @@ test/test_combined_pdf_source_pdf.py
359415
test/test_combined_pdf_source_type.py
360416
test/test_combined_pdf_state.py
361417
test/test_copy_template_request.py
418+
test/test_create_account_email_action_request.py
362419
test/test_create_combined_pdf_request.py
363420
test/test_create_custom_file_from_upload_request.py
421+
test/test_create_email_action_request.py
422+
test/test_create_email_domain_request.py
364423
test/test_create_folder_request.py
365424
test/test_create_signature_request_event_request.py
366425
test/test_create_signature_request_token_request.py
@@ -372,6 +431,23 @@ test/test_create_webhook_request.py
372431
test/test_custom_file.py
373432
test/test_custom_file_list.py
374433
test/test_custom_file_source_pdf.py
434+
test/test_dns_record_type.py
435+
test/test_email_action.py
436+
test/test_email_action_conditions.py
437+
test/test_email_action_conditions_input.py
438+
test/test_email_action_customization.py
439+
test/test_email_action_delivery.py
440+
test/test_email_action_file_formats.py
441+
test/test_email_action_list.py
442+
test/test_email_action_setting.py
443+
test/test_email_action_submission_type.py
444+
test/test_email_action_test_email.py
445+
test/test_email_domain.py
446+
test/test_email_domain_dns_record.py
447+
test/test_email_domain_dns_record_purpose.py
448+
test/test_email_domain_list.py
449+
test/test_email_domain_record_state.py
450+
test/test_email_domain_state.py
375451
test/test_error_code.py
376452
test/test_error_detail.py
377453
test/test_error_info.py
@@ -424,17 +500,22 @@ test/test_remove_template_fields_request.py
424500
test/test_rename_folder_request.py
425501
test/test_reorder_template_fields_request.py
426502
test/test_restore_template_version_request.py
503+
test/test_send_account_email_action_test_email_request.py
427504
test/test_shape_type.py
428505
test/test_signature_request.py
429506
test/test_signature_request_auth_second_factor_type.py
430507
test/test_signature_request_auth_type.py
508+
test/test_signature_request_email_attachments.py
509+
test/test_signature_request_email_status.py
431510
test/test_signature_request_event.py
432511
test/test_signature_request_event_type.py
433512
test/test_signature_request_input.py
434513
test/test_signature_request_message_type.py
514+
test/test_signature_request_reminders.py
435515
test/test_signature_request_state.py
436516
test/test_signature_request_token.py
437517
test/test_signature_request_token_type.py
518+
test/test_signing_order.py
438519
test/test_string_condition_type.py
439520
test/test_submission.py
440521
test/test_submission_action.py
@@ -492,6 +573,9 @@ test/test_text_alignment.py
492573
test/test_text_overflow.py
493574
test/test_text_vertical_alignment.py
494575
test/test_typeface.py
576+
test/test_update_account_email_action_request.py
577+
test/test_update_email_action_customization_request.py
578+
test/test_update_email_action_request.py
495579
test/test_update_signature_request_request.py
496580
test/test_update_template_document_request.py
497581
test/test_update_template_fields_request.py

‎.travis.yml‎

Lines changed: 0 additions & 17 deletions
This file was deleted.

0 commit comments

Comments
 (0)