DocSpring Python SDK
The official Python client for the DocSpring API. DocSpring fills PDF forms with your data, generates PDFs and Word documents from HTML and Word templates, combines PDFs and collects e-signatures.
Documentation · API reference · PyPI · Changelog
The code in this repository is generated from DocSpring's OpenAPI spec (About this SDK). Issues and pull requests are welcome.
Version 4.4.0. Requires Python >=3.10.
Install and configure
Install the package:
pip install --upgrade docspring
Configure authentication via environment variables:
export DOCSPRING_TOKEN_ID="API_TOKEN_ID"
export DOCSPRING_TOKEN_SECRET="API_TOKEN_SECRET"
You can also configure the region or host. The host takes priority over the region:
export DOCSPRING_REGION="US" # US or EU (defaults to US)
export DOCSPRING_HOST="docspring.yourcompany.com" # For on-premise deployments
Import and initialize the DocSpring client:
from docspring import Client
client = Client()
Or provide credentials directly:
from docspring import Client
client = Client(api_token_id='API_TOKEN_ID', api_token_secret='API_TOKEN_SECRET')
Generate a PDF
Fill a template with data (use your template's ID in place of tpl_1234567890abcdef01):
template_id = "tpl_1234567890abcdef01"
body = {
"data": {
"first_name": "John",
"last_name": "Smith",
"phone_number": "+11234567890",
},
"metadata": {"user_id": 42},
"test": True,
}
response = client.create_submission(template_id, body)
print(response)
By default the call waits for the PDF, for up to 95 seconds, and the submission in the response has a link to
download it (files.pdf.download_url). Set wait to false to get a pending submission straight away.
Sync vs. async processing covers the time limit, status
checks and webhooks.
Methods
docs/Client.md has each method's parameters and return type, and docs/ has the models. The API reference has Python code for every method.
| Method | Description |
|---|---|
add_template_fields |
Add fields to a template |
copy_template |
Copy a template |
create_account_email_action |
Create an account email action |
create_combined_pdf |
Combine PDFs |
create_custom_file_from_upload |
Create a custom file from an upload |
create_email_action |
Create an email action |
create_email_domain |
Add an email domain |
create_folder |
Create a folder |
create_signature_request_event |
Record a signature request event |
create_signature_request_token |
Create a signature request token |
create_submission |
Generate a PDF |
create_submission_batch |
Generate PDFs in a batch |
create_template |
Create a template |
create_template_preview |
Preview a template with data |
create_webhook |
Create a webhook |
delete_account_email_action |
Delete an account email action |
delete_custom_file |
Delete a custom file |
delete_email_action |
Delete an email action |
delete_email_action_customization |
Reset an account email action's customization |
delete_email_domain |
Remove an email domain |
delete_folder |
Delete a folder |
delete_template |
Delete a template |
delete_webhook |
Delete a webhook |
expire_combined_pdf |
Expire a combined PDF |
expire_submission |
Expire a submission |
generate_submission_files |
Generate more files |
generate_submission_preview |
Generate a preview PDF |
get_account_email_action |
Get an account email action |
get_combined_pdf |
Get a combined PDF |
get_custom_file |
Get a custom file |
get_email_action |
Get an email action |
get_email_domain |
Get an email domain |
get_folder |
Get a folder |
get_presign_url |
Get a presigned URL to upload a file |
get_signature_request |
Get a signature request |
get_submission |
Get a submission |
get_submission_batch |
Get a batch |
get_template |
Get a template |
get_template_diff |
Compare a version of a template with the one before it |
get_template_model_code |
Generate typed code for a template's submission data |
get_template_page_images |
Get images of a template's pages |
get_template_preview |
Get a template preview |
get_template_schema |
Get the JSON Schema of a template's submission data |
get_webhook |
Get a webhook |
list_account_email_actions |
List account email actions |
list_combined_pdfs |
List combined PDFs |
list_custom_files |
List custom files |
list_email_actions |
List email actions |
list_email_domains |
List email domains |
list_folders |
List folders |
list_submissions |
List submissions |
list_template_fields |
List a template's fields |
list_template_submissions |
List a template's submissions |
list_templates |
List templates |
list_webhooks |
List webhooks |
move_folder |
Move a folder |
move_template |
Move a template to a folder |
publish_template_version |
Publish a template version |
remove_template_fields |
Remove fields from a template |
rename_folder |
Rename a folder |
reorder_template_fields |
Reorder a template's fields |
restore_template_version |
Restore a template version |
send_account_email_action_test_email |
Send a test email for an account email action |
send_email_action_test_email |
Send a test email |
test_authentication |
Test authentication |
update_account_email_action |
Update an account email action |
update_email_action |
Update an email action |
update_email_action_customization |
Customize an account email action for a template |
update_signature_request |
Update a signature request |
update_template |
Update a template |
update_template_document |
Replace a template's document |
update_template_fields |
Update a template's fields |
update_webhook |
Update a webhook |
upload_template |
Create a template from an uploaded PDF or Word document |
upload_template_document |
Replace a template's document with an uploaded file |
validate_submission |
Check a submission without creating it |
verify_email_domain |
Verify an email domain |
Errors
Methods raise docspring.ApiException for an error response (or a subclass from docspring.exceptions, such as NotFoundException), with the HTTP status in status and the body in body.
The client checks each request against the API's request schemas before sending it. A request the API would reject raises docspring.RequestValidationError (a ValueError), whose details are dicts with code, message and a pointer into the body (or a parameter). Turn the check off with client.api_client.configuration.client_side_validation = False.
The details are the ones the API's 422 response would have, so you get them without a round trip.
API changes
DocSpring adds fields and enum values to API v2 without releasing a new API version. Changes that would break existing code, such as removing or renaming a field, go in a new API version (API changes). So this SDK keeps working with responses that are newer than it is:
- The model keeps a response field added to the API after this release in its
additional_propertiesdict. The objects defined inside a model, such as a template'sdocument, leave it out. - An enum value added to the API after this release comes back as the API sent it: handle values you don't recognize.
Upgrade the SDK to read new fields and enum values. The changelog lists what each release adds.
About this SDK
This SDK is generated from DocSpring's OpenAPI spec with DocSpring's fork of OpenAPI Generator 7.26.0. The fork changes the Python generator:
- An enum value added to the API after this release becomes a member of its own, which compares and serializes as the value, instead of raising
ValueError. Iterating an enum type gives the values this release knows. - A union (
CombinedPdfSourceInput) takes a dict or one of its models, picked by the dict'stypeoroperator. Stock OpenAPI Generator ignores a dict's keys and sendsnull.
On top of the generated code, we add:
- A client constructor that reads your credentials, region and host from the environment.
docspring.verify_webhook_signature(payload, signature_header, secret)checks a webhook request'sX-DocSpring-Signatureheader, withtoleranceandnowkeyword arguments.
Each release regenerates every file, so a change made only here would be lost in the next one. Issues and pull requests are welcome all the same: open an issue or a pull request, or email support@docspring.com, and we'll make the fix in the generator so that every release keeps it. AGENTS.md is a guide for AI coding agents that integrate this SDK.
License
MIT. See LICENSE.
Metadata
Release files for docspring 4.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| docspring-4.4.0-py3-none-any.whl | Python 3 | none | any | Details for docspring-4.4.0-py3-none-any.whl |
Release files / docspring-4.4.0-py3-none-any.whl
| Download URL | docspring-4.4.0-py3-none-any.whl |
|---|---|
| Size | 437.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
84b51668caeb2c02786d1093f0cdca1d73efb2b5e356727b619167464f8fdab8
|
|
BLAKE2b-256 checksum How to use checksums |
3f9cfdc2babb79e2718f2966f389e9c6439ba08578d539bf7f1a1e960299d9d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.
Transparency logSecurity for docspring 4.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
1 file in this release has been uploaded with provenance metadata.
Attestation for docspring-4.4.0-py3-none-any.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 1, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.