DocSpring fills templates with data, generates PDFs and Word documents, and collects e-signatures.
- A template is a PDF, HTML or Word document, or a page design (a layout of text, images and tables), with
fields. Use get_template to see its fields and get_template_schema for the data a submission takes. Edits change
the template's draft. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees.
The template's own settings are the exception: they apply to every version as soon as they're saved. They include expire_submissions, public_web_form, public_submissions, redirect_url, encrypt_pdfs, embed_domains, locked and a Word template's output_format. Check a change with preview_template, which shows the draft's pages filled in with
data and makes no submission, before you ask.
- generate_pdf makes a submission and waits for its PDF (or a Word template's Word document). test is required: test
documents are free and watermarked, live ones use the account's credits.
- Tools that change or remove what exists (edits, renames, moves, deletes) are marked destructive, so clients may ask
the user before each call. Deleting and expiring are separate tools, so the user can approve each one.
- DocSpring's agent skills (https://github.com/DocSpring/skills) give step-by-step workflows for PDF, HTML and Word
templates, page designs, app code and signature requests.
- A new account has no templates. When list_templates finds none, offer to create one: an HTML template designed from
the user's description of the document, or a template from their PDF.
Discoverability
2 pass · 1 partial2 passed · 1 partial42/100
Client listings and public setup information.
mcp.json or server-card.json
Either mcp.json or an MCP Server Card declaring this endpoint passes.
The MCP Server Card declares this server's exact endpoint.
Declared output schemas have a valid basic structure
8 output schema issue(s) found
How to fix: Fix the declared JSON Schema structure (for example, every required name must exist in properties). An outputSchema may describe any JSON value, including an array; returned structuredContent must match it at runtime.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Adds a domain for email actions to send from, and returns the DNS records to add at the domain's DNS host. DocSpring checks for them every few minutes. Needs a paid monthly plan.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Input documentation gives an agent enough context to populate the arguments.
domain
The domain name, such as example.com or mail.example.com.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Adds fields to a template's draft: on a PDF template they're placed on its pages, and on an HTML or Word template they define the data it uses (a Word template already has a field for each value its tags use). Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. A field with the name of another field shares its type, required, default and other shared settings: leave them out when you add a copy, since a different value is refused (update_fields changes them for every field with the name). Returns the fields it added, with their IDs.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
fields
The fields to add (up to 1000), each with a name and a type (string, number, boolean, date, address, country, email, url, image, signature, initials, barcode or combined). A / in a name nests the value: customer/name is {"customer": {"name": ...}} in the data. In a list, a number names one item on a PDF template (items/0/price) and ~ every item on an HTML or Word template (line_items/~/description). On a PDF template, also a page (from 1) and a position: x, y, width and height, in units where every page is 2480 wide, from the page's top left corner (get_template_pages shows the pages, at 2.5 units a pixel). An HTML or Word template's fields only define its data: they need no page or position. Other settings, such as required, title, default, font_size, alignment and option_list, are optional: get_fields shows them on an existing field. Fields with the same name share one value.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "add_fields",
"description": "Adds fields to a template's draft: on a PDF template they're placed on its pages, and on an HTML or Word template they define the data it uses (a Word template already has a field for each value its tags use). Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. A field with the name of another field shares its type, required, default and other shared settings: leave them out when you add a copy, since a different value is refused (update_fields changes them for every field with the name). Returns the fields it added, with their IDs.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"fields"
],
"properties": {
"fields": {
"type": [
"null",
"array"
],
"items": {
"type": "object"
},
"description": "The fields to add (up to 1000), each with a name and a type (string, number, boolean, date, address, country, email, url, image, signature, initials, barcode or combined). A / in a name nests the value: customer/name is {\"customer\": {\"name\": ...}} in the data. In a list, a number names one item on a PDF template (items/0/price) and ~ every item on an HTML or Word template (line_items/~/description). On a PDF template, also a page (from 1) and a position: x, y, width and height, in units where every page is 2480 wide, from the page's top left corner (get_template_pages shows the pages, at 2.5 units a pixel). An HTML or Word template's fields only define its data: they need no page or position. Other settings, such as required, title, default, font_size, alignment and option_list, are optional: get_fields shows them on an existing field. Fields with the same name share one value."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"template_id",
"fields",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "What changed."
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"type": "integer"
},
"bold": {
"type": "boolean"
},
"comb": {
"type": "boolean"
},
"name": {
"type": [
"string",
"null"
]
},
"page": {
"type": "integer"
},
"type": {
"type": "string"
},
"color": {
"type": [
"string",
"null"
]
},
"title": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"hidden": {
"type": "boolean"
},
"static": {
"type": "boolean"
},
"default": {
"type": [
"string",
"null"
]
},
"integer": {
"type": "boolean"
},
"maximum": {
"type": [
"number",
"null"
]
},
"minimum": {
"type": [
"number",
"null"
]
},
"opacity": {
"type": "number"
},
"currency": {
"type": "boolean"
},
"editable": {
"type": "boolean"
},
"metadata": {
"type": "string"
},
"overflow": {
"type": "string"
},
"required": {
"type": "boolean"
},
"rotation": {
"type": "number"
},
"typeface": {
"type": [
"string",
"null"
]
},
"alignment": {
"type": "string"
},
"condition": {
"type": [
"string",
"null"
]
},
"filled_by": {
"type": "string",
"description": "DocSpring, for a field DocSpring fills in (its name starts with @@)."
},
"font_size": {
"type": [
"integer",
"null"
]
},
"multiline": {
"type": "boolean"
},
"true_text": {
"type": [
"string",
"null"
]
},
"uppercase": {
"type": "boolean"
},
"false_text": {
"type": [
"string",
"null"
]
},
"max_length": {
"type": [
"integer",
"null"
]
},
"min_length": {
"type": "number"
},
"shape_type": {
"type": "string"
},
"check_color": {
"type": [
"string",
"null"
]
},
"description": {
"type": "string"
},
"option_list": {
"type": [
"string",
"null"
]
},
"placeholder": {
"type": "string"
},
"shape_sides": {
"type": "integer"
},
"v_alignment": {
"type": "string"
},
"dependencies": {
"type": [
"object",
"null"
],
"properties": {
"match": {
"type": "string"
},
"action": {
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"field": {
"type": "string"
},
"value": true,
"operator": {
"type": "string"
},
"range_max": {
"type": [
"number",
"string",
"null"
]
}
}
}
}
}
},
"display_type": {
"type": "string"
},
"include_time": {
"type": [
"boolean",
"null"
]
},
"qrcode_color": {
"type": [
"string",
"null"
]
},
"acroform_name": {
"type": [
"string",
"null"
]
},
"image_gravity": {
"type": "string"
},
"strikethrough": {
"type": "boolean"
},
"decimal_places": {
"type": [
"integer",
"null"
]
},
"check_character": {
"type": "string"
},
"multiline_lines": {
"type": [
"integer",
"null"
]
},
"background_color": {
"type": [
"string",
"null"
]
},
"color_field_name": {
"type": [
"string",
"null"
]
},
"date_time_format": {
"type": [
"string",
"null"
]
},
"image_scale_type": {
"type": "string"
},
"shape_fill_color": {
"type": [
"string",
"null"
]
},
"barcode_symbology": {
"type": "string"
},
"character_spacing": {
"type": "number"
},
"comb_value_offset": {
"type": "integer"
},
"exclusive_maximum": {
"type": "boolean"
},
"exclusive_minimum": {
"type": "boolean"
},
"shape_border_color": {
"type": "string"
},
"shape_border_width": {
"type": "integer"
},
"combined_field_type": {
"type": "string"
},
"keep_leading_spaces": {
"type": "boolean"
},
"color_field_required": {
"type": "boolean"
},
"comb_number_of_cells": {
"type": "integer"
},
"combined_field_names": {
"type": "string"
},
"signature_allow_draw": {
"type": "boolean"
},
"signature_allow_type": {
"type": "boolean"
},
"combined_field_format": {
"type": "string"
},
"number_condition_type": {
"type": "string"
},
"string_condition_type": {
"type": "string"
},
"check_color_field_name": {
"type": [
"string",
"null"
]
},
"qrcode_color_field_name": {
"type": [
"string",
"null"
]
},
"combined_field_separator": {
"type": "string"
},
"invert_boolean_condition": {
"type": "boolean"
},
"auto_calculate_max_length": {
"type": "boolean"
},
"check_color_field_required": {
"type": "boolean"
},
"number_condition_range_max": {
"type": [
"number",
"null"
]
},
"number_condition_range_min": {
"type": [
"number",
"null"
]
},
"background_color_field_name": {
"type": [
"string",
"null"
]
},
"qrcode_color_field_required": {
"type": "boolean"
},
"shape_fill_color_field_name": {
"type": [
"string",
"null"
]
},
"shape_border_color_field_name": {
"type": [
"string",
"null"
]
},
"background_color_field_required": {
"type": "boolean"
},
"shape_fill_color_field_required": {
"type": "boolean"
},
"shape_border_color_field_required": {
"type": "boolean"
},
"number_condition_range_exclusive_max": {
"type": "boolean"
},
"number_condition_range_exclusive_min": {
"type": "boolean"
}
},
"description": "A field of a template: the name of a value in submission data, and how and where it prints. Fields with the same `name` share one value and the settings the descriptions say are shared. A PDF template's fields are placed on its pages: `x`, `y`, `width` and `height` are in units where every page is 2480 wide, measured from the top-left corner of the field's `page`. To convert from PDF points, multiply by 2480 and divide by the page's width in points (`document.page_dimensions` on the template). An HTML or Word template's fields are all on page 1, and their placement and style settings aren't used: its HTML or Word document places and styles each value."
},
"description": "Each field's summary and the settings sent."
},
"template_id": {
"type": "string",
"description": "The template's ID."
}
},
"description": "The fields added or changed."
},
"annotations": {
"title": "Add fields",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description77/100
Merges PDFs (submissions, templates, other combined PDFs or links) into one PDF, and waits for it. Its files.pdf.download_url works for 24 hours. A combined PDF always uses the account's credits, even when its PDFs are test PDFs.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
source_pdfs
The PDFs to merge, in order. Each is {"type": "submission", "id": "sub_..."}, {"type": "template", "id": "tpl_..."} (its blank PDF), {"type": "combined_pdf", "id": "com_..."}, {"type": "custom_file", "id": "cfi_..."} or {"type": "url", "url": "https://..."}.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
metadata
The user's own data about the combined PDF, such as an ID from their app.
Clear enough to supply this argument.
expires_in
Seconds after the PDF is made until it's deleted, up to 10 years (315360000).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
password
A password that the PDF needs to be opened with. DocSpring never shows it again, so make sure the user has it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Creates an email action, which emails each submission's files once it's processed: an account email action, or one on a template with template_id. Without a paid plan, it only emails the account's team (test emails, and test submissions). Returns the email action.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Explain the meaning of this value, not just its name.
template_id
Create it on this template. Default an account email action, which sends for every template, or for template_ids and folder_ids.
Clear enough to supply this argument.
name
A name for the email action, shown in DocSpring.
Clear enough to supply this argument.
to
Who gets each email: email addresses, and tags for each submission's address from a text or email field ({{ data.client_email }}) or its metadata ({{ metadata.agent_email }}). {{ signer.email }} sends each signer their own email (to only). An email needs an entry in to, cc or bcc.
Clear enough to supply this argument.
cc
Who is copied on each email, as in to.
Clear enough to supply this argument.
bcc
Who is blind-copied on each email, as in to.
Clear enough to supply this argument.
subject
The subject, a Liquid template with account.name, template.name, template.id, submission.id, data.<field name> and metadata.<key>, such as Your {{ template.name }}. Default the template's name followed by the file it sends, such as Lease PDF, or by files when it sends several.
Clear enough to supply this argument.
message
The email's text, a Liquid template with the same variables as subject. Default a short message that says the files are attached or ready to download.
Clear enough to supply this argument.
file_name
The attached files' name, a Liquid template with the same variables as subject; each file's extension (.pdf, .docx or .odt) is added. Default the submission's pdf_filename metadata, or the template's name.
Clear enough to supply this argument.
file_formats
Which of the submission's files it sends: all (its PDF, and a Word template's Word document and OpenDocument file when it made them), or only docx, odt or pdf. A submission that made none of them sends nothing. Only Word templates make docx and odt files. Default all.
Clear enough to supply this argument.
send_when › match
all sends when every condition is met, any when one of them is. Default all.
Clear enough to supply this argument.
send_when › conditions › items › field
The field's name.
Clear enough to supply this argument.
send_when › conditions › items › operator
present, blank, equals, not_equals, in (one of a list), gt, gte, lt, lte (number fields), or range (from value to range_max).
Explain the meaning of this value, not just its name.
send_when › conditions › items › value
The value to compare with: text, a number, true or false, or a list for in.
Clear enough to supply this argument.
send_when › conditions › items › range_max
The upper end of a range.
Clear enough to supply this argument.
delivery
attachment attaches the files (a download link when they're large), link sends a download link. Default attachment, or link for an account with a BAA.
Clear enough to supply this argument.
max_attachment_mb
With delivery attachment, files larger than this many MB in all (1,000,000 bytes) go as a download link instead, 1 to 25. Default 7: many company mail servers refuse emails over 10 MB, and emailing a file makes it about 38% larger.
Clear enough to supply this argument.
submission_type
Which submissions send emails. Test submissions only email the account's team members. Default live.
Clear enough to supply this argument.
from_name
The sender's name. Default the account's name.
Clear enough to supply this argument.
from_address
The sender's address, at one of the account's verified email domains (list_email_domains). Default DocSpring's shared address.
Clear enough to supply this argument.
reply_to
Where replies go: a team member's email address, or an address at a verified email domain.
Clear enough to supply this argument.
template_ids
For an account email action: only send for these templates.
Clear enough to supply this argument.
folder_ids
For an account email action: only send for templates in these folders, including their subfolders.
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"id",
"template_id",
"template_ids",
"folder_ids",
"name",
"enabled",
"to",
"cc",
"bcc",
"from_name",
"from_address",
"reply_to",
"subject",
"message",
"file_name",
"file_formats",
"delivery",
"max_attachment_mb",
"submission_type",
"send_when",
"failure_notifications_enabled",
"consecutive_failures",
"failing_since",
"last_failure_at",
"last_failure_message",
"disabled_at",
"disabled_reason",
"customization",
"created_at",
"updated_at"
],
"properties": {
"cc": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "string"
},
"to": {
"type": "array",
"items": {
"type": "string"
}
},
"bcc": {
"type": "array",
"items": {
"type": "string"
}
},
"name": {
"type": [
"string",
"null"
]
},
"enabled": {
"type": "boolean"
},
"message": {
"type": [
"string",
"null"
]
},
"subject": {
"type": [
"string",
"null"
]
},
"delivery": {
"type": "string"
},
"reply_to": {
"type": [
"string",
"null"
]
},
"file_name": {
"type": [
"string",
"null"
]
},
"from_name": {
"type": [
"string",
"null"
]
},
"send_when": {
"type": [
"object",
"null"
],
"required": [
"conditions"
],
"properties": {
"match": {
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator"
],
"properties": {
"field": {
"type": "string"
},
"value": true,
"operator": {
"type": "string"
},
"range_max": {
"type": [
"number",
"string",
"null"
]
}
}
}
}
}
},
"created_at": {
"type": "string"
},
"folder_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"updated_at": {
"type": "string"
},
"disabled_at": {
"type": [
"string",
"null"
]
},
"template_id": {
"type": [
"string",
"null"
]
},
"file_formats": {
"type": "string"
},
"from_address": {
"type": [
"string",
"null"
]
},
"template_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"customization": {
"type": [
"object",
"null"
],
"required": [
"enabled",
"customized",
"consecutive_failures",
"failing_since",
"last_failure_at",
"last_failure_message",
"disabled_at",
"disabled_reason",
"created_at",
"updated_at"
],
"properties": {
"enabled": {
"type": "boolean"
},
"created_at": {
"type": "string"
},
"customized": {
"type": "array",
"items": {
"type": "string"
}
},
"updated_at": {
"type": "string"
},
"disabled_at": {
"type": [
"string",
"null"
]
},
"failing_since": {
"type": [
"string",
"null"
]
},
"disabled_reason": {
"type": [
"string",
"null"
]
},
"last_failure_at": {
"type": [
"string",
"null"
]
},
"consecutive_failures": {
"type": "integer"
},
"last_failure_message": {
"type": [
"string",
"null"
]
}
}
},
"failing_since": {
"type": [
"string",
"null"
]
},
"disabled_reason": {
"type": [
"string",
"null"
]
},
"last_failure_at": {
"type": [
"string",
"null"
]
},
"submission_type": {
"type": "string"
},
"max_attachment_mb": {
"type": "integer"
},
"consecutive_failures": {
"type": "integer"
},
"last_failure_message": {
"type": [
"string",
"null"
]
},
"failure_notifications_enabled": {
"type": "boolean"
}
},
"description": "Emails each submission's files (its PDF, and a Word template's Word document and OpenDocument file) to people when the submission has been processed. An email action belongs to a template's draft, or to your account (an account email action, with no `template_id`), which sends for every template or for the templates and folders it lists. Each template can turn an account email action off or change its settings for that template only (`customization`). Email actions email anyone on a paid plan (Starter or higher); without one, they only email your team (test emails, and test submissions). They send from DocSpring's shared address or from one of your verified email domains."
}
Original tool metadata
{
"name": "create_email_action",
"description": "Creates an email action, which emails each submission's files once it's processed: an account email action, or one on a template with template_id. Without a paid plan, it only emails the account's team (test emails, and test submissions). Returns the email action.",
"inputSchema": {
"type": "object",
"properties": {
"cc": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "Who is copied on each email, as in to."
},
"to": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "Who gets each email: email addresses, and tags for each submission's address from a text or email field ({{ data.client_email }}) or its metadata ({{ metadata.agent_email }}). {{ signer.email }} sends each signer their own email (to only). An email needs an entry in to, cc or bcc."
},
"bcc": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "Who is blind-copied on each email, as in to."
},
"name": {
"type": "string",
"description": "A name for the email action, shown in DocSpring."
},
"message": {
"type": "string",
"description": "The email's text, a Liquid template with the same variables as subject. Default a short message that says the files are attached or ready to download."
},
"subject": {
"type": "string",
"description": "The subject, a Liquid template with account.name, template.name, template.id, submission.id, data.<field name> and metadata.<key>, such as Your {{ template.name }}. Default the template's name followed by the file it sends, such as Lease PDF, or by files when it sends several."
},
"delivery": {
"enum": [
"attachment",
"link"
],
"type": "string",
"description": "attachment attaches the files (a download link when they're large), link sends a download link. Default attachment, or link for an account with a BAA."
},
"reply_to": {
"type": "string",
"description": "Where replies go: a team member's email address, or an address at a verified email domain."
},
"file_name": {
"type": "string",
"description": "The attached files' name, a Liquid template with the same variables as subject; each file's extension (.pdf, .docx or .odt) is added. Default the submission's pdf_filename metadata, or the template's name."
},
"from_name": {
"type": "string",
"description": "The sender's name. Default the account's name."
},
"send_when": {
"type": [
"null",
"object"
],
"required": [
"conditions"
],
"properties": {
"match": {
"type": "string",
"description": "all sends when every condition is met, any when one of them is. Default all."
},
"conditions": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"field",
"operator"
],
"properties": {
"field": {
"type": "string",
"description": "The field's name."
},
"value": {
"description": "The value to compare with: text, a number, true or false, or a list for in."
},
"operator": {
"type": "string",
"description": "present, blank, equals, not_equals, in (one of a list), gt, gte, lt, lte (number fields), or range (from value to range_max)."
},
"range_max": {
"description": "The upper end of a range."
}
},
"additionalProperties": false
},
"description": "The conditions, each on one of the template's fields."
}
},
"description": "Send only when the submission's field values meet these conditions, which work as a conditional logic rule's do. Default every submission.",
"additionalProperties": false
},
"folder_ids": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "For an account email action: only send for templates in these folders, including their subfolders."
},
"template_id": {
"type": "string",
"description": "Create it on this template. Default an account email action, which sends for every template, or for template_ids and folder_ids."
},
"file_formats": {
"enum": [
"docx",
"odt",
"pdf",
"all"
],
"type": "string",
"description": "Which of the submission's files it sends: all (its PDF, and a Word template's Word document and OpenDocument file when it made them), or only docx, odt or pdf. A submission that made none of them sends nothing. Only Word templates make docx and odt files. Default all."
},
"from_address": {
"type": "string",
"description": "The sender's address, at one of the account's verified email domains (list_email_domains). Default DocSpring's shared address."
},
"template_ids": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "For an account email action: only send for these templates."
},
"submission_type": {
"enum": [
"live",
"test",
"all"
],
"type": "string",
"description": "Which submissions send emails. Test submissions only email the account's team members. Default live."
},
"max_attachment_mb": {
"type": "integer",
"description": "With delivery attachment, files larger than this many MB in all (1,000,000 bytes) go as a download link instead, 1 to 25. Default 7: many company mail servers refuse emails over 10 MB, and emailing a file makes it about 38% larger."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"id",
"template_id",
"template_ids",
"folder_ids",
"name",
"enabled",
"to",
"cc",
"bcc",
"from_name",
"from_address",
"reply_to",
"subject",
"message",
"file_name",
"file_formats",
"delivery",
"max_attachment_mb",
"submission_type",
"send_when",
"failure_notifications_enabled",
"consecutive_failures",
"failing_since",
"last_failure_at",
"last_failure_message",
"disabled_at",
"disabled_reason",
"customization",
"created_at",
"updated_at"
],
"properties": {
"cc": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "string"
},
"to": {
"type": "array",
"items": {
"type": "string"
}
},
"bcc": {
"type": "array",
"items": {
"type": "string"
}
},
"name": {
"type": [
"string",
"null"
]
},
"enabled": {
"type": "boolean"
},
"message": {
"type": [
"string",
"null"
]
},
"subject": {
"type": [
"string",
"null"
]
},
"delivery": {
"type": "string"
},
"reply_to": {
"type": [
"string",
"null"
]
},
"file_name": {
"type": [
"string",
"null"
]
},
"from_name": {
"type": [
"string",
"null"
]
},
"send_when": {
"type": [
"object",
"null"
],
"required": [
"conditions"
],
"properties": {
"match": {
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator"
],
"properties": {
"field": {
"type": "string"
},
"value": true,
"operator": {
"type": "string"
},
"range_max": {
"type": [
"number",
"string",
"null"
]
}
}
}
}
}
},
"created_at": {
"type": "string"
},
"folder_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"updated_at": {
"type": "string"
},
"disabled_at": {
"type": [
"string",
"null"
]
},
"template_id": {
"type": [
"string",
"null"
]
},
"file_formats": {
"type": "string"
},
"from_address": {
"type": [
"string",
"null"
]
},
"template_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"customization": {
"type": [
"object",
"null"
],
"required": [
"enabled",
"customized",
"consecutive_failures",
"failing_since",
"last_failure_at",
"last_failure_message",
"disabled_at",
"disabled_reason",
"created_at",
"updated_at"
],
"properties": {
"enabled": {
"type": "boolean"
},
"created_at": {
"type": "string"
},
"customized": {
"type": "array",
"items": {
"type": "string"
}
},
"updated_at": {
"type": "string"
},
"disabled_at": {
"type": [
"string",
"null"
]
},
"failing_since": {
"type": [
"string",
"null"
]
},
"disabled_reason": {
"type": [
"string",
"null"
]
},
"last_failure_at": {
"type": [
"string",
"null"
]
},
"consecutive_failures": {
"type": "integer"
},
"last_failure_message": {
"type": [
"string",
"null"
]
}
}
},
"failing_since": {
"type": [
"string",
"null"
]
},
"disabled_reason": {
"type": [
"string",
"null"
]
},
"last_failure_at": {
"type": [
"string",
"null"
]
},
"submission_type": {
"type": "string"
},
"max_attachment_mb": {
"type": "integer"
},
"consecutive_failures": {
"type": "integer"
},
"last_failure_message": {
"type": [
"string",
"null"
]
},
"failure_notifications_enabled": {
"type": "boolean"
}
},
"description": "Emails each submission's files (its PDF, and a Word template's Word document and OpenDocument file) to people when the submission has been processed. An email action belongs to a template's draft, or to your account (an account email action, with no `template_id`), which sends for every template or for the templates and folders it lists. Each template can turn an account email action off or change its settings for that template only (`customization`). Email actions email anyone on a paid plan (Starter or higher); without one, they only email your team (test emails, and test submissions). They send from DocSpring's shared address or from one of your verified email domains."
},
"annotations": {
"title": "Create an email action",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Creates a template folder, at the root or in another folder. Folders only organize templates: they don't change what a template does. Returns the folder, with its ID for parent_folder_id and move_template.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
The folder's name. It can't contain /, and is unique within its parent folder.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"name": "create_folder",
"description": "Creates a template folder, at the root or in another folder. Folders only organize templates: they don't change what a template does. Returns the folder, with its ID for parent_folder_id and move_template.",
"inputSchema": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The folder's name. It can't contain /, and is unique within its parent folder."
},
"parent_folder_id": {
"type": "string",
"description": "The folder to put it in. Default the root."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"path",
"parent_folder_id",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"path": {
"type": "string"
},
"created_at": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"parent_folder_id": {
"type": [
"string",
"null"
]
}
},
"description": "A folder of templates. Folders can contain other folders."
},
"annotations": {
"title": "Create a folder",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Creates an HTML template: DocSpring renders its HTML (a Liquid template) and SCSS as a PDF, with each submission's data. Set the page size and margins with html_engine_options: a CSS @page rule overrides the margins, leaving the header and footer no room. A new template HTML-escapes the values Liquid prints (its html_escape_data setting): write {{ notes | raw }} only for a value that holds HTML. Print amounts with the currency filter: {{ total | currency }} prints $1,234.50, and {{ total | currency: "€", ".", "," }} prints €1.234,50. In a submission, an unknown filter is skipped and an undefined variable prints nothing, without an error: preview_template reports both. Then add a field for each key of the data with add_fields (a name and a type, no position, with customer/name for a nested value and line_items/~/description for each item of a list): the fields are the template's data schema, which validate_data, get_model_code and forms use. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Returns a summary of the template.
The description explains the capability, when to use it, and what to expect.
Inputs83/100
Explain the meaning of this value, not just its name.
name
The template's name.
Explain the meaning of this value, not just its name.
html
The template's HTML, a Liquid template: {{ name }} prints the submission data's name.
Clear enough to supply this argument.
scss
The template's SCSS.
Explain the meaning of this value, not just its name.
header_html
HTML printed at the top of each page, inside its top margin.
Clear enough to supply this argument.
footer_html
HTML printed at the bottom of each page, inside its bottom margin.
Clear enough to supply this argument.
html_engine_options › format
The paper size. Default Letter. Custom uses width and height.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
html_engine_options › width
The page width for the Custom format, with a unit: 8.5in or 210mm.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
html_engine_options › height
The page height for the Custom format, with a unit.
Clear enough to supply this argument.
html_engine_options › landscape
Print pages in landscape orientation.
Clear enough to supply this argument.
html_engine_options › scale
How much to scale the page, such as 0.9. Default 1.
Clear enough to supply this argument.
html_engine_options › print_background
Print a background set on html or body. Elements' backgrounds print without it.
Clear enough to supply this argument.
html_engine_options › margin_top
The top margin, which holds header_html, with a unit: in, cm, mm or px. Default 1in.
Clear enough to supply this argument.
html_engine_options › margin_bottom
The bottom margin, which holds footer_html. Default 1in.
Clear enough to supply this argument.
html_engine_options › margin_left
The left margin. Default 1in.
Clear enough to supply this argument.
html_engine_options › margin_right
The right margin. Default 1in.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
parent_folder_id
The folder to put the template in. Default the root.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Create an HTML template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema70/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"id",
"name",
"template_type",
"ready",
"latest_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What to do next."
},
"ready": {
"type": "boolean"
},
"template_type": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"updated_settings": {
"type": "array",
"items": {
"type": "string",
"description": "A setting's name."
},
"description": "The settings the update sent."
},
"unpublished_changes": {
"type": "string",
"description": "Whether the draft has changes that submissions don't use yet."
}
},
"description": "A template that generates PDFs from submission data."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "create_html_template",
"description": "Creates an HTML template: DocSpring renders its HTML (a Liquid template) and SCSS as a PDF, with each submission's data. Set the page size and margins with html_engine_options: a CSS @page rule overrides the margins, leaving the header and footer no room. A new template HTML-escapes the values Liquid prints (its html_escape_data setting): write {{ notes | raw }} only for a value that holds HTML. Print amounts with the currency filter: {{ total | currency }} prints $1,234.50, and {{ total | currency: \"€\", \".\", \",\" }} prints €1.234,50. In a submission, an unknown filter is skipped and an undefined variable prints nothing, without an error: preview_template reports both. Then add a field for each key of the data with add_fields (a name and a type, no position, with customer/name for a nested value and line_items/~/description for each item of a list): the fields are the template's data schema, which validate_data, get_model_code and forms use. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Returns a summary of the template.",
"inputSchema": {
"type": "object",
"required": [
"name",
"html"
],
"properties": {
"html": {
"type": "string",
"description": "The template's HTML, a Liquid template: {{ name }} prints the submission data's name."
},
"name": {
"type": "string",
"description": "The template's name."
},
"scss": {
"type": "string",
"description": "The template's SCSS."
},
"footer_html": {
"type": "string",
"description": "HTML printed at the bottom of each page, inside its bottom margin."
},
"header_html": {
"type": "string",
"description": "HTML printed at the top of each page, inside its top margin."
},
"parent_folder_id": {
"type": "string",
"description": "The folder to put the template in. Default the root."
},
"html_engine_options": {
"type": [
"null",
"object"
],
"properties": {
"scale": {
"type": "number",
"description": "How much to scale the page, such as 0.9. Default 1."
},
"width": {
"type": "string",
"description": "The page width for the Custom format, with a unit: 8.5in or 210mm."
},
"format": {
"enum": [
"Letter",
"Legal",
"Tabloid",
"Ledger",
"CR80",
"A0",
"A1",
"A2",
"A3",
"A4",
"A5",
"A6",
"Custom"
],
"type": "string",
"description": "The paper size. Default Letter. Custom uses width and height."
},
"height": {
"type": "string",
"description": "The page height for the Custom format, with a unit."
},
"landscape": {
"type": "boolean",
"description": "Print pages in landscape orientation."
},
"margin_top": {
"type": "string",
"description": "The top margin, which holds header_html, with a unit: in, cm, mm or px. Default 1in."
},
"margin_left": {
"type": "string",
"description": "The left margin. Default 1in."
},
"margin_right": {
"type": "string",
"description": "The right margin. Default 1in."
},
"margin_bottom": {
"type": "string",
"description": "The bottom margin, which holds footer_html. Default 1in."
},
"print_background": {
"type": "boolean",
"description": "Print a background set on html or body. Elements' backgrounds print without it."
}
},
"description": "The page size and margins. Default Letter, portrait, with 1in margins.",
"additionalProperties": false
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"id",
"name",
"template_type",
"ready",
"latest_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What to do next."
},
"ready": {
"type": "boolean"
},
"template_type": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"updated_settings": {
"type": "array",
"items": {
"type": "string",
"description": "A setting's name."
},
"description": "The settings the update sent."
},
"unpublished_changes": {
"type": "string",
"description": "Whether the draft has changes that submissions don't use yet."
}
},
"description": "A template that generates PDFs from submission data."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "Create an HTML template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Creates a page design: a template whose PDFs DocSpring lays out from a JSON layout of sections and the elements in them (text with fields, images, tables, charts, checkboxes, fillable form fields, QR codes, barcodes, shapes, lines and HTML boxes), which the Page Designer in DocSpring edits. A section can repeat for each item of a list, and a table has a row for each one. DocSpring adds a field for each value the layout reads: get_template shows them, and update_fields sets their types and which are required. A layout with problems isn't saved, and the error lists each one by its JSON path, such as /sections/0/elements/2/width. Check how it prints with preview_template. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Returns a summary of the template.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
The template's name.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
layout
The page design's layout, in the Page Designer layout format (https://docspring.com/docs/page-designer/layout-format/): version 1, the page (size, orientation, margins, background, watermark), an optional header and footer, and the sections that flow down the page, each with its elements (text, image, shape, line, table, chart, checkbox, form_field, qr_code, barcode and html). Its JSON Schema is https://docspring.com/schemas/page-designer/layout.v1.json. Positions and sizes are in points (72 to the inch). A text's content is rich text whose field nodes print values from the data by their Liquid expression, such as customer.name or total | currency. Default an empty Letter page with 0.5in margins.
Clear enough to supply this argument.
parent_folder_id
The folder to put the template in. Default the root.
{
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"id",
"name",
"template_type",
"ready",
"latest_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What to do next."
},
"ready": {
"type": "boolean"
},
"template_type": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"updated_settings": {
"type": "array",
"items": {
"type": "string",
"description": "A setting's name."
},
"description": "The settings the update sent."
},
"unpublished_changes": {
"type": "string",
"description": "Whether the draft has changes that submissions don't use yet."
}
},
"description": "A template that generates PDFs from submission data."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "create_page_design",
"description": "Creates a page design: a template whose PDFs DocSpring lays out from a JSON layout of sections and the elements in them (text with fields, images, tables, charts, checkboxes, fillable form fields, QR codes, barcodes, shapes, lines and HTML boxes), which the Page Designer in DocSpring edits. A section can repeat for each item of a list, and a table has a row for each one. DocSpring adds a field for each value the layout reads: get_template shows them, and update_fields sets their types and which are required. A layout with problems isn't saved, and the error lists each one by its JSON path, such as /sections/0/elements/2/width. Check how it prints with preview_template. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Returns a summary of the template.",
"inputSchema": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "The template's name."
},
"layout": {
"type": "object",
"description": "The page design's layout, in the Page Designer layout format (https://docspring.com/docs/page-designer/layout-format/): version 1, the page (size, orientation, margins, background, watermark), an optional header and footer, and the sections that flow down the page, each with its elements (text, image, shape, line, table, chart, checkbox, form_field, qr_code, barcode and html). Its JSON Schema is https://docspring.com/schemas/page-designer/layout.v1.json. Positions and sizes are in points (72 to the inch). A text's content is rich text whose field nodes print values from the data by their Liquid expression, such as customer.name or total | currency. Default an empty Letter page with 0.5in margins."
},
"parent_folder_id": {
"type": "string",
"description": "The folder to put the template in. Default the root."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"id",
"name",
"template_type",
"ready",
"latest_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What to do next."
},
"ready": {
"type": "boolean"
},
"template_type": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"updated_settings": {
"type": "array",
"items": {
"type": "string",
"description": "A setting's name."
},
"description": "The settings the update sent."
},
"unpublished_changes": {
"type": "string",
"description": "Whether the draft has changes that submissions don't use yet."
}
},
"description": "A template that generates PDFs from submission data."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "Create a page design",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Creates a PDF template from a PDF, and waits until DocSpring has processed it. Give the PDF as a link, as base64, or (for a large local file) upload it with create_pdf_upload first. Then add fields with add_fields, or set detect_fields. Returns the template. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees.
The description explains the capability, when to use it, and what to expect.
Inputs91/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
The template's name. Default the PDF's file name.
Clear enough to supply this argument.
document_url
An https:// link to the PDF (up to 100 MB). DocSpring downloads it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document_base64
The PDF encoded as base64 (a data: URI works too), up to 7 MB before it's encoded. Only for a small PDF you can't upload: for a file on disk use cache_id from create_pdf_upload, or document_url for a PDF on the web.
Clear enough to supply this argument.
cache_id
The fields.key of a PDF uploaded with create_pdf_upload.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
filename
The PDF's file name, for document_base64 or cache_id.
Clear enough to supply this argument.
parent_folder_id
The folder to put the template in. Default the root.
Clear enough to supply this argument.
detect_fields
Set up the PDF's fields automatically: import a fillable PDF's form fields, or find the fields on a flat PDF, then name them and set up conditional logic with AI. AI naming uses the account's free AI pages for the month, then credits for each page. Default false: the template starts with the PDF's own form fields, their names converted to DocSpring's (snake_case, with / for each . in a name).
Clear enough to supply this argument.
field_source
With detect_fields, where the fields come from: auto (the default) imports a fillable PDF's form fields and finds the fields on a PDF without them, pdf_detection finds them from the page layout even on a fillable PDF, pdf_form_fields only imports the form fields.
Clear enough to supply this argument.
field_naming
With detect_fields, how the fields are named: ai (the default) names them and sets their types and settings with AI, preserve keeps the names of the PDF's form fields and AI only names the fields it found (needs field_source auto or pdf_form_fields).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
field_logic
With detect_fields, whether AI reads the whole form once the fields are named and sets up conditional logic and required fields (ai) or not (none). Default the account's template settings.
Clear enough to supply this argument.
include_office_use_fields
With detect_fields, whether AI keeps the fields that only the office receiving the form fills in, such as a 'For office use only' box (true), or leaves them out (false). Default the account's template settings (off unless the user turned it on). Keep them only for a template the receiving office fills in itself.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Create a PDF template",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
Align the title with the capability actually described by this tool.
Description70/100
Prepares an upload of a local PDF or Word document (.docx or .odt), for agents that can run commands: use it for any file on disk, since base64 in a tool call only suits a small file. Run the curl command it returns, with the path to the file, then pass its cache_id to create_pdf_template, create_word_template or replace_template_pdf.
Describe the concrete operation and its scope instead of restating the tool name.
Inputs100/100
This tool declares no inputs, so argument descriptions are not needed.
No input fields.
Annotations100/100
All four behavior hints are declared.
{
"title": "Prepare a PDF upload",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema85/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"required": [
"cache_id",
"command",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to run it."
},
"command": {
"type": "string",
"description": "The curl command that uploads the file."
},
"cache_id": {
"type": "string",
"description": "The upload's cache_id, for create_pdf_template, create_word_template or replace_template_pdf."
}
},
"description": "How to upload the file."
}
Original tool metadata
{
"name": "create_pdf_upload",
"description": "Prepares an upload of a local PDF or Word document (.docx or .odt), for agents that can run commands: use it for any file on disk, since base64 in a tool call only suits a small file. Run the curl command it returns, with the path to the file, then pass its cache_id to create_pdf_template, create_word_template or replace_template_pdf.",
"inputSchema": {
"type": "object",
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"cache_id",
"command",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to run it."
},
"command": {
"type": "string",
"description": "The curl command that uploads the file."
},
"cache_id": {
"type": "string",
"description": "The upload's cache_id, for create_pdf_template, create_word_template or replace_template_pdf."
}
},
"description": "How to upload the file."
},
"annotations": {
"title": "Prepare a PDF upload",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description92/100
Asks people to fill in and sign a template: creates a submission with a signature request for each signer. DocSpring emails each signer a link to sign, and everyone the completed document. For a signer with send_email false, it returns a link instead, for the user to send. The PDF is made once everyone has signed (get_submission shows it). Links expire: create_signing_link makes a new one. Returns the submission's ID and state, and each signer's signature request ID and link.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Remove repeated schema validation from descriptions; focus on meaning and usage context.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest: the latest published version, or the draft while none has been published.
Clear enough to supply this argument.
test
true makes a free test document with a watermark. false makes a live one, which uses the account's credits: only when the user wants a real document.
Clear enough to supply this argument.
data
Values of the template's other fields, by field name, filled in before anyone signs.
Clear enough to supply this argument.
signers › items › name
The person's name.
Clear enough to supply this argument.
signers › items › email
Their email address.
Clear enough to supply this argument.
signers › items › fields
The names of the fields this person fills in and signs, such as signature or date_signed. Each field can only be in one person's list.
Clear enough to supply this argument.
signers › items › role
Which of the template's signers they are: Signer 1, Signer 2 and so on. Either every signer has a role or none does.
Clear enough to supply this argument.
signers › items › metadata
The user's own data about this person's signature request, such as an ID from their app.
Clear enough to supply this argument.
signers › items › prefilled_values_editable
Let this person change the values that data fills in for their fields. Without it, a field that's both in their fields and in data is an error.
Clear enough to supply this argument.
signers › items › send_email
false: DocSpring doesn't email this person, and the result has a link for the user to send them or open in their app. Default the submission's send_email.
Clear enough to supply this argument.
signers › items › signing_step
With signing_order sequential, when this person signs: everyone in step 1 first, then step 2, and so on. People in the same step sign in any order. Either every signer has a step or none does; without them, each person is a step of their own, in the order of signers.
Clear enough to supply this argument.
link_type
For the signers DocSpring doesn't email: email (the default) gives links that work for 7 days, for the user to send by email. api gives links that work for 24 hours, to open straight away.
Clear enough to supply this argument.
metadata
The user's own data about the submission, such as an ID from their app. It isn't printed on the PDF.
Clear enough to supply this argument.
expires_in
Seconds after the signed PDF is made until the submission's data and PDF are deleted, up to 10 years (315360000). Default the template's setting.
Clear enough to supply this argument.
password
A password that the signed PDF needs to be opened with. DocSpring never shows it again, so make sure the user has it.
Clear enough to supply this argument.
field_overrides
Changes to field settings for this document only, by field name, such as {"notes": {"required": false}}. Settings that identify a field (its name and type) or that only the template sets (its description) can't be changed.
Clear enough to supply this argument.
send_email
Whether DocSpring emails the signers their links, any reminders, and the completed document. Default true. Each signer's send_email overrides it. A test submission only emails the user's DocSpring team: set send_email false for anyone else. DocSpring doesn't email the signers of a form library template: leave it out, and the result has their links.
Clear enough to supply this argument.
signing_order
parallel (the default): everyone can sign at once. sequential: people sign one step at a time (each signer's signing_step), and DocSpring emails each step when the one before it is done.
Clear enough to supply this argument.
email_subject
The subject of the emails that ask people to sign, up to 200 characters. It can use {{ signer.name }}, {{ signer.email }}, {{ document.name }}, {{ sender.name }} and {{ account.name }}. Default "<sender> sent you <document> to sign".
Clear enough to supply this argument.
email_message
A message for the people who sign, shown above the signing button, up to 2000 characters. It takes the same variables as email_subject. Links and web addresses are shown as plain text.
Clear enough to supply this argument.
cc
Up to 10 people who get a copy of the completed document. They don't sign.
Clear enough to supply this argument.
reply_to
Where replies to the emails go: a member of the user's DocSpring team, or an address at one of their verified email domains. Leave it out for the template's reply-to address (the account owner when it has none).
Clear enough to supply this argument.
notification_emails
Up to 10 addresses DocSpring tells when the document is completed or declined, or an email bounces or can't be sent: members of the user's DocSpring team or addresses at their verified email domains. Leave it out for the template's notification addresses (the account owner when it has none); an empty list means the account owner.
Clear enough to supply this argument.
notify_when_signed
Also email notification_emails each time someone signs.
{
"type": "object",
"required": [
"submission_id",
"state",
"signers",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "What happens next."
},
"state": {
"type": "string",
"description": "The submission's state: waiting_for_signatures until everyone has signed."
},
"signers": {
"type": "array",
"items": {
"type": "object",
"required": [
"signature_request_id",
"name",
"email",
"role"
],
"properties": {
"url": {
"type": "string",
"description": "The signer's signing link. Anyone with it can sign as them."
},
"name": {
"type": [
"string",
"null"
],
"description": "The signer's name."
},
"role": {
"type": [
"string",
"null"
],
"description": "The signer's role."
},
"email": {
"type": [
"string",
"null"
],
"description": "The signer's email address."
},
"expires_at": {
"type": "string",
"description": "When the link expires."
},
"link_error": {
"type": "string",
"description": "Why there's no link, and how to make one."
},
"signing_step": {
"type": "integer",
"description": "The signer's step, with signing_order sequential."
},
"emailed_by_docspring": {
"type": "boolean",
"description": "DocSpring emails the signer their link."
},
"signature_request_id": {
"type": "string",
"description": "The signature request's ID."
}
},
"description": "A signer."
},
"description": "Each signer's signature request."
},
"submission_id": {
"type": "string",
"description": "The submission's ID."
}
},
"description": "The submission and its signers."
}
Original tool metadata
{
"name": "create_signature_request",
"description": "Asks people to fill in and sign a template: creates a submission with a signature request for each signer. DocSpring emails each signer a link to sign, and everyone the completed document. For a signer with send_email false, it returns a link instead, for the user to send. The PDF is made once everyone has signed (get_submission shows it). Links expire: create_signing_link makes a new one. Returns the submission's ID and state, and each signer's signature request ID and link.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"test",
"signers"
],
"properties": {
"cc": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "Up to 10 people who get a copy of the completed document. They don't sign."
},
"data": {
"type": "object",
"description": "Values of the template's other fields, by field name, filled in before anyone signs."
},
"test": {
"type": "boolean",
"description": "true makes a free test document with a watermark. false makes a live one, which uses the account's credits: only when the user wants a real document."
},
"signers": {
"type": [
"null",
"array"
],
"items": {
"type": "object",
"required": [
"fields"
],
"properties": {
"name": {
"type": "string",
"description": "The person's name."
},
"role": {
"type": "string",
"description": "Which of the template's signers they are: Signer 1, Signer 2 and so on. Either every signer has a role or none does."
},
"email": {
"type": "string",
"description": "Their email address."
},
"fields": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "The names of the fields this person fills in and signs, such as signature or date_signed. Each field can only be in one person's list."
},
"metadata": {
"type": "object",
"description": "The user's own data about this person's signature request, such as an ID from their app."
},
"send_email": {
"type": [
"null",
"boolean"
],
"description": "false: DocSpring doesn't email this person, and the result has a link for the user to send them or open in their app. Default the submission's send_email."
},
"signing_step": {
"type": "integer",
"description": "With signing_order sequential, when this person signs: everyone in step 1 first, then step 2, and so on. People in the same step sign in any order. Either every signer has a step or none does; without them, each person is a step of their own, in the order of signers."
},
"prefilled_values_editable": {
"type": "boolean",
"description": "Let this person change the values that data fills in for their fields. Without it, a field that's both in their fields and in data is an error."
}
},
"additionalProperties": false
},
"description": "The people who fill in and sign the document, one signature request each. They sign in any order, unless signing_order is sequential."
},
"version": {
"type": "string",
"description": "Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest: the latest published version, or the draft while none has been published."
},
"metadata": {
"type": "object",
"description": "The user's own data about the submission, such as an ID from their app. It isn't printed on the PDF."
},
"password": {
"type": "string",
"description": "A password that the signed PDF needs to be opened with. DocSpring never shows it again, so make sure the user has it."
},
"reply_to": {
"type": "string",
"description": "Where replies to the emails go: a member of the user's DocSpring team, or an address at one of their verified email domains. Leave it out for the template's reply-to address (the account owner when it has none)."
},
"link_type": {
"enum": [
"email",
"api"
],
"type": "string",
"description": "For the signers DocSpring doesn't email: email (the default) gives links that work for 7 days, for the user to send by email. api gives links that work for 24 hours, to open straight away."
},
"reminders": {
"type": [
"null",
"object"
],
"required": [
"interval_days",
"max_count"
],
"properties": {
"max_count": {
"type": "integer",
"description": "The most reminders each person gets, 1 to 10."
},
"interval_days": {
"type": "integer",
"description": "Days between reminders, 1 to 30."
}
},
"description": "Remind people who haven't signed: every interval_days days, up to max_count times. Without it, DocSpring sends no reminders.",
"additionalProperties": false
},
"expires_in": {
"type": "integer",
"description": "Seconds after the signed PDF is made until the submission's data and PDF are deleted, up to 10 years (315360000). Default the template's setting."
},
"send_email": {
"type": [
"null",
"boolean"
],
"description": "Whether DocSpring emails the signers their links, any reminders, and the completed document. Default true. Each signer's send_email overrides it. A test submission only emails the user's DocSpring team: set send_email false for anyone else. DocSpring doesn't email the signers of a form library template: leave it out, and the result has their links."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
},
"email_message": {
"type": "string",
"description": "A message for the people who sign, shown above the signing button, up to 2000 characters. It takes the same variables as email_subject. Links and web addresses are shown as plain text."
},
"email_subject": {
"type": "string",
"description": "The subject of the emails that ask people to sign, up to 200 characters. It can use {{ signer.name }}, {{ signer.email }}, {{ document.name }}, {{ sender.name }} and {{ account.name }}. Default \"<sender> sent you <document> to sign\"."
},
"signing_order": {
"enum": [
"parallel",
"sequential"
],
"type": "string",
"description": "parallel (the default): everyone can sign at once. sequential: people sign one step at a time (each signer's signing_step), and DocSpring emails each step when the one before it is done."
},
"field_overrides": {
"type": "object",
"description": "Changes to field settings for this document only, by field name, such as {\"notes\": {\"required\": false}}. Settings that identify a field (its name and type) or that only the template sets (its description) can't be changed."
},
"notify_when_signed": {
"type": "boolean",
"description": "Also email notification_emails each time someone signs."
},
"notification_emails": {
"type": [
"null",
"array"
],
"items": {
"type": "string"
},
"description": "Up to 10 addresses DocSpring tells when the document is completed or declined, or an email bounces or can't be sent: members of the user's DocSpring team or addresses at their verified email domains. Leave it out for the template's notification addresses (the account owner when it has none); an empty list means the account owner."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"submission_id",
"state",
"signers",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "What happens next."
},
"state": {
"type": "string",
"description": "The submission's state: waiting_for_signatures until everyone has signed."
},
"signers": {
"type": "array",
"items": {
"type": "object",
"required": [
"signature_request_id",
"name",
"email",
"role"
],
"properties": {
"url": {
"type": "string",
"description": "The signer's signing link. Anyone with it can sign as them."
},
"name": {
"type": [
"string",
"null"
],
"description": "The signer's name."
},
"role": {
"type": [
"string",
"null"
],
"description": "The signer's role."
},
"email": {
"type": [
"string",
"null"
],
"description": "The signer's email address."
},
"expires_at": {
"type": "string",
"description": "When the link expires."
},
"link_error": {
"type": "string",
"description": "Why there's no link, and how to make one."
},
"signing_step": {
"type": "integer",
"description": "The signer's step, with signing_order sequential."
},
"emailed_by_docspring": {
"type": "boolean",
"description": "DocSpring emails the signer their link."
},
"signature_request_id": {
"type": "string",
"description": "The signature request's ID."
}
},
"description": "A signer."
},
"description": "Each signer's signature request."
},
"submission_id": {
"type": "string",
"description": "The submission's ID."
}
},
"description": "The submission and its signers."
},
"annotations": {
"title": "Create a signature request",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
{
"type": "object",
"required": [
"signature_request_id",
"url",
"expires_at"
],
"properties": {
"url": {
"type": "string",
"description": "The signing link. Anyone with it can sign as the signer."
},
"expires_at": {
"type": "string",
"description": "When the link expires."
},
"signature_request_id": {
"type": "string",
"description": "The signature request's ID."
}
},
"description": "A signing link."
}
Original tool metadata
{
"name": "create_signing_link",
"description": "Makes a new link for a signer to open their signature request, such as when their link has expired. Returns the link and when it expires.",
"inputSchema": {
"type": "object",
"required": [
"signature_request_id"
],
"properties": {
"link_type": {
"enum": [
"email",
"api"
],
"type": "string",
"description": "email (the default): a link that works for 7 days, for the user to send by email. api: a link that works for 24 hours, to open straight away."
},
"signature_request_id": {
"type": "string",
"description": "The signature request's ID, such as srq_gq8uxqd6Ux2hrSeVZb, from create_signature_request or get_submission."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"signature_request_id",
"url",
"expires_at"
],
"properties": {
"url": {
"type": "string",
"description": "The signing link. Anyone with it can sign as the signer."
},
"expires_at": {
"type": "string",
"description": "When the link expires."
},
"signature_request_id": {
"type": "string",
"description": "The signature request's ID."
}
},
"description": "A signing link."
},
"annotations": {
"title": "Create a signing link",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Creates a webhook: DocSpring sends a POST request to the URL for each event, signed with the webhook's secret. Returns the webhook. A webhook's signing secret and its headers' values aren't shown to assistants: the user copies the secret from the webhook's page in DocSpring (Webhooks, in the sidebar), and adds headers there.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
url
The https:// endpoint that receives the events as POST requests.
Clear enough to supply this argument.
event_types
The events to send.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
A name for the webhook, shown in DocSpring.
Clear enough to supply this argument.
mode
Only send events for test or live submissions. Default both.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_ids
Only send events for these templates.
Clear enough to supply this argument.
folder_ids
Only send events for templates in these folders, including their subfolders.
Clear enough to supply this argument.
include_submission_data
Include the submission's field data in the events. Default true.
Clear enough to supply this argument.
strip_fields
Dot-separated paths to leave out of each event's data object, such as data.ssn for the ssn field. A bare name leaves out a top-level key: metadata leaves out the whole metadata object.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Creates a Word template from a Word document (.docx, or an OpenDocument text file, .odt, which DocSpring converts to one) with tags where the data goes, such as {{ customer.name }}, {% for item in line_items %}...{% endfor %}, {% if %} and {% image logo %}, and waits until DocSpring has it. DocSpring adds a field for each value the tags use: get_template shows them, and update_fields sets their types and which are required. Give the document as a link, as base64, or (for a file on disk) upload it with create_pdf_upload first. output_format chooses what each submission makes: a Word document (docx), an OpenDocument file (odt) or a PDF. A tag that can't be used (an unclosed tag, an {% endfor %} without its {% for %}) makes submissions fail: check the template with preview_template. Returns the template. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
name
The template's name. Default the Word document's file name.
Clear enough to supply this argument.
document_url
An https:// link to the Word document (.docx, or an OpenDocument text file, .odt; up to 50 MB). DocSpring downloads it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
document_base64
The Word document encoded as base64 (a data: URI works too), up to 7 MB before it's encoded. Only for a small file you can't upload: for a file on disk use cache_id from create_pdf_upload, or document_url for one on the web.
Clear enough to supply this argument.
cache_id
The fields.key of a Word document uploaded with create_pdf_upload.
Clear enough to supply this argument.
filename
The Word document's file name, ending in .docx (or .odt), for document_base64 or cache_id.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
output_format
What each submission makes unless it asks for other output_formats: docx (a Word document), odt (an OpenDocument file, converted from the Word document) or pdf.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
parent_folder_id
The folder to put the template in. Default the root.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Create a Word template",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description86/100
Changes an account email action for one template only, or turns it off for that template, replacing the template's earlier changes. Returns the email action, with the template's changes.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The template to change the account email action for.
Clear enough to supply this argument.
email_action_id
The account email action's ID, such as tpa_Vb7nQ2xLm4Kp9RtZ3w.
Clear enough to supply this argument.
settings
The settings this template changes, by the names create_email_action takes, without name, template_ids and folder_ids. enabled: false stops it sending for this template. The others follow the account email action.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Customize an email action for a template",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}
Output schema69/100
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"id",
"template_id",
"template_ids",
"folder_ids",
"name",
"enabled",
"to",
"cc",
"bcc",
"from_name",
"from_address",
"reply_to",
"subject",
"message",
"file_name",
"file_formats",
"delivery",
"max_attachment_mb",
"submission_type",
"send_when",
"failure_notifications_enabled",
"consecutive_failures",
"failing_since",
"last_failure_at",
"last_failure_message",
"disabled_at",
"disabled_reason",
"customization",
"created_at",
"updated_at"
],
"properties": {
"cc": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "string"
},
"to": {
"type": "array",
"items": {
"type": "string"
}
},
"bcc": {
"type": "array",
"items": {
"type": "string"
}
},
"name": {
"type": [
"string",
"null"
]
},
"enabled": {
"type": "boolean"
},
"message": {
"type": [
"string",
"null"
]
},
"subject": {
"type": [
"string",
"null"
]
},
"delivery": {
"type": "string"
},
"reply_to": {
"type": [
"string",
"null"
]
},
"file_name": {
"type": [
"string",
"null"
]
},
"from_name": {
"type": [
"string",
"null"
]
},
"send_when": {
"type": [
"object",
"null"
],
"required": [
"conditions"
],
"properties": {
"match": {
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator"
],
"properties": {
"field": {
"type": "string"
},
"value": true,
"operator": {
"type": "string"
},
"range_max": {
"type": [
"number",
"string",
"null"
]
}
}
}
}
}
},
"created_at": {
"type": "string"
},
"folder_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"updated_at": {
"type": "string"
},
"disabled_at": {
"type": [
"string",
"null"
]
},
"template_id": {
"type": [
"string",
"null"
]
},
"file_formats": {
"type": "string"
},
"from_address": {
"type": [
"string",
"null"
]
},
"template_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"customization": {
"type": [
"object",
"null"
],
"required": [
"enabled",
"customized",
"consecutive_failures",
"failing_since",
"last_failure_at",
"last_failure_message",
"disabled_at",
"disabled_reason",
"created_at",
"updated_at"
],
"properties": {
"enabled": {
"type": "boolean"
},
"created_at": {
"type": "string"
},
"customized": {
"type": "array",
"items": {
"type": "string"
}
},
"updated_at": {
"type": "string"
},
"disabled_at": {
"type": [
"string",
"null"
]
},
"failing_since": {
"type": [
"string",
"null"
]
},
"disabled_reason": {
"type": [
"string",
"null"
]
},
"last_failure_at": {
"type": [
"string",
"null"
]
},
"consecutive_failures": {
"type": "integer"
},
"last_failure_message": {
"type": [
"string",
"null"
]
}
}
},
"failing_since": {
"type": [
"string",
"null"
]
},
"disabled_reason": {
"type": [
"string",
"null"
]
},
"last_failure_at": {
"type": [
"string",
"null"
]
},
"submission_type": {
"type": "string"
},
"max_attachment_mb": {
"type": "integer"
},
"consecutive_failures": {
"type": "integer"
},
"last_failure_message": {
"type": [
"string",
"null"
]
},
"failure_notifications_enabled": {
"type": "boolean"
}
},
"description": "Emails each submission's files (its PDF, and a Word template's Word document and OpenDocument file) to people when the submission has been processed. An email action belongs to a template's draft, or to your account (an account email action, with no `template_id`), which sends for every template or for the templates and folders it lists. Each template can turn an account email action off or change its settings for that template only (`customization`). Email actions email anyone on a paid plan (Starter or higher); without one, they only email your team (test emails, and test submissions). They send from DocSpring's shared address or from one of your verified email domains."
}
Original tool metadata
{
"name": "customize_email_action",
"description": "Changes an account email action for one template only, or turns it off for that template, replacing the template's earlier changes. Returns the email action, with the template's changes.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"email_action_id",
"settings"
],
"properties": {
"settings": {
"type": "object",
"description": "The settings this template changes, by the names create_email_action takes, without name, template_ids and folder_ids. enabled: false stops it sending for this template. The others follow the account email action."
},
"template_id": {
"type": "string",
"description": "The template to change the account email action for."
},
"email_action_id": {
"type": "string",
"description": "The account email action's ID, such as tpa_Vb7nQ2xLm4Kp9RtZ3w."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"id",
"template_id",
"template_ids",
"folder_ids",
"name",
"enabled",
"to",
"cc",
"bcc",
"from_name",
"from_address",
"reply_to",
"subject",
"message",
"file_name",
"file_formats",
"delivery",
"max_attachment_mb",
"submission_type",
"send_when",
"failure_notifications_enabled",
"consecutive_failures",
"failing_since",
"last_failure_at",
"last_failure_message",
"disabled_at",
"disabled_reason",
"customization",
"created_at",
"updated_at"
],
"properties": {
"cc": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "string"
},
"to": {
"type": "array",
"items": {
"type": "string"
}
},
"bcc": {
"type": "array",
"items": {
"type": "string"
}
},
"name": {
"type": [
"string",
"null"
]
},
"enabled": {
"type": "boolean"
},
"message": {
"type": [
"string",
"null"
]
},
"subject": {
"type": [
"string",
"null"
]
},
"delivery": {
"type": "string"
},
"reply_to": {
"type": [
"string",
"null"
]
},
"file_name": {
"type": [
"string",
"null"
]
},
"from_name": {
"type": [
"string",
"null"
]
},
"send_when": {
"type": [
"object",
"null"
],
"required": [
"conditions"
],
"properties": {
"match": {
"type": "string"
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"field",
"operator"
],
"properties": {
"field": {
"type": "string"
},
"value": true,
"operator": {
"type": "string"
},
"range_max": {
"type": [
"number",
"string",
"null"
]
}
}
}
}
}
},
"created_at": {
"type": "string"
},
"folder_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"updated_at": {
"type": "string"
},
"disabled_at": {
"type": [
"string",
"null"
]
},
"template_id": {
"type": [
"string",
"null"
]
},
"file_formats": {
"type": "string"
},
"from_address": {
"type": [
"string",
"null"
]
},
"template_ids": {
"type": "array",
"items": {
"type": "string"
}
},
"customization": {
"type": [
"object",
"null"
],
"required": [
"enabled",
"customized",
"consecutive_failures",
"failing_since",
"last_failure_at",
"last_failure_message",
"disabled_at",
"disabled_reason",
"created_at",
"updated_at"
],
"properties": {
"enabled": {
"type": "boolean"
},
"created_at": {
"type": "string"
},
"customized": {
"type": "array",
"items": {
"type": "string"
}
},
"updated_at": {
"type": "string"
},
"disabled_at": {
"type": [
"string",
"null"
]
},
"failing_since": {
"type": [
"string",
"null"
]
},
"disabled_reason": {
"type": [
"string",
"null"
]
},
"last_failure_at": {
"type": [
"string",
"null"
]
},
"consecutive_failures": {
"type": "integer"
},
"last_failure_message": {
"type": [
"string",
"null"
]
}
}
},
"failing_since": {
"type": [
"string",
"null"
]
},
"disabled_reason": {
"type": [
"string",
"null"
]
},
"last_failure_at": {
"type": [
"string",
"null"
]
},
"submission_type": {
"type": "string"
},
"max_attachment_mb": {
"type": "integer"
},
"consecutive_failures": {
"type": "integer"
},
"last_failure_message": {
"type": [
"string",
"null"
]
},
"failure_notifications_enabled": {
"type": "boolean"
}
},
"description": "Emails each submission's files (its PDF, and a Word template's Word document and OpenDocument file) to people when the submission has been processed. An email action belongs to a template's draft, or to your account (an account email action, with no `template_id`), which sends for every template or for the templates and folders it lists. Each template can turn an account email action off or change its settings for that template only (`customization`). Email actions email anyone on a paid plan (Starter or higher); without one, they only email your team (test emails, and test submissions). They send from DocSpring's shared address or from one of your verified email domains."
},
"annotations": {
"title": "Customize an email action for a template",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Removes an email domain. Email actions that send from an address at it fail until it's added and verified again, or their from_address changes. Returns the removed domain.
The description explains the capability, when to use it, and what to expect.
Inputs98/100
Input documentation gives an agent enough context to populate the arguments.
email_domain_id
The email domain's ID, such as edm_8Lq3tZbV2nW5xYcR7k. list_email_domains finds it.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Deletes a template: its draft and every published version. Submissions, forms and signature requests can't use it afterwards, though its existing submissions stay. It can't be undone, so confirm with the user first, naming the template. A locked template can't be deleted. Returns the deleted template's ID, name and type.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
{
"name": "delete_template",
"description": "Deletes a template: its draft and every published version. Submissions, forms and signature requests can't use it afterwards, though its existing submissions stay. It can't be undone, so confirm with the user first, naming the template. A locked template can't be deleted. Returns the deleted template's ID, name and type.",
"inputSchema": {
"type": "object",
"required": [
"template_id"
],
"properties": {
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"template_type",
"note"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What was deleted."
},
"template_type": {
"type": "string"
}
},
"description": "A template that generates PDFs from submission data."
},
"annotations": {
"title": "Delete a template",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description88/100
Deletes one published version of a template. Submissions that ask for it fail afterwards. The template, its draft and its other versions stay. It can't be undone. Returns the template's ID and name, and the version it deleted.
The description explains the capability, when to use it, and what to expect.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"id",
"name",
"note",
"deleted_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "Which version was deleted."
},
"deleted_version": {
"type": "string",
"description": "The version deleted, such as 1.2.0."
}
},
"description": "A template that generates PDFs from submission data."
}
Original tool metadata
{
"name": "delete_version",
"description": "Deletes one published version of a template. Submissions that ask for it fail afterwards. The template, its draft and its other versions stay. It can't be undone. Returns the template's ID and name, and the version it deleted.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"version"
],
"properties": {
"version": {
"type": "string",
"description": "The published version to delete, in full: 1.2.0."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"id",
"name",
"note",
"deleted_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "Which version was deleted."
},
"deleted_version": {
"type": "string",
"description": "The version deleted, such as 1.2.0."
}
},
"description": "A template that generates PDFs from submission data."
},
"annotations": {
"title": "Delete a version",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Shows what changed in a template's draft since its latest published version (or in a published version since the one before it): fields added, removed, changed and moved, settings, and whether the PDF or Word document was replaced. Added and removed fields show their main settings (get_fields shows the rest), and changed fields the settings that changed. Check it before publish_version.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest (the latest published version, or the draft while none has been published) or draft. Default draft, the version you edit.
{
"type": "object",
"required": [
"template_id",
"from_version",
"to_version",
"summary",
"fields",
"changed_settings",
"document_changed"
],
"properties": {
"fields": {
"type": "object",
"required": [
"added",
"removed",
"changed",
"reordered"
],
"properties": {
"added": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"type": "integer"
},
"name": {
"type": [
"string",
"null"
]
},
"page": {
"type": "integer"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"hidden": {
"type": "boolean"
},
"static": {
"type": "boolean"
},
"default": {
"type": [
"string",
"null"
]
},
"required": {
"type": "boolean"
},
"filled_by": {
"type": "string",
"description": "DocSpring, for a field DocSpring fills in (its name starts with @@)."
},
"description": {
"type": "string"
},
"option_list": {
"type": [
"string",
"null"
]
},
"display_type": {
"type": "string"
}
},
"description": "A field of a template: the name of a value in submission data, and how and where it prints. Fields with the same `name` share one value and the settings the descriptions say are shared. A PDF template's fields are placed on its pages: `x`, `y`, `width` and `height` are in units where every page is 2480 wide, measured from the top-left corner of the field's `page`. To convert from PDF points, multiply by 2480 and divide by the page's width in points (`document.page_dimensions` on the template). An HTML or Word template's fields are all on page 1, and their placement and style settings aren't used: its HTML or Word document places and styles each value."
}
},
"changed": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"old",
"new"
],
"properties": {
"id": {
"type": "integer",
"description": "The field's ID."
},
"new": {
"type": "object",
"properties": {},
"description": "The new values of the settings that changed."
},
"old": {
"type": "object",
"properties": {},
"description": "The old values of the settings that changed."
},
"name": {
"type": [
"string",
"null"
],
"description": "The field's name, or null for a field without one."
}
},
"description": "A field that changed."
}
},
"removed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"type": "integer"
},
"name": {
"type": [
"string",
"null"
]
},
"page": {
"type": "integer"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"hidden": {
"type": "boolean"
},
"static": {
"type": "boolean"
},
"default": {
"type": [
"string",
"null"
]
},
"required": {
"type": "boolean"
},
"filled_by": {
"type": "string",
"description": "DocSpring, for a field DocSpring fills in (its name starts with @@)."
},
"description": {
"type": "string"
},
"option_list": {
"type": [
"string",
"null"
]
},
"display_type": {
"type": "string"
}
},
"description": "A field of a template: the name of a value in submission data, and how and where it prints. Fields with the same `name` share one value and the settings the descriptions say are shared. A PDF template's fields are placed on its pages: `x`, `y`, `width` and `height` are in units where every page is 2480 wide, measured from the top-left corner of the field's `page`. To convert from PDF points, multiply by 2480 and divide by the page's width in points (`document.page_dimensions` on the template). An HTML or Word template's fields are all on page 1, and their placement and style settings aren't used: its HTML or Word document places and styles each value."
}
},
"reordered": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"old_index",
"new_index"
],
"properties": {
"id": {
"type": "integer"
},
"new_index": {
"type": "integer"
},
"old_index": {
"type": "integer"
}
}
}
}
}
},
"summary": {
"type": "object",
"required": [
"fields_added",
"fields_removed",
"fields_changed",
"fields_reordered",
"settings_changed",
"total_changes"
],
"properties": {
"fields_added": {
"type": "integer"
},
"total_changes": {
"type": "integer"
},
"fields_changed": {
"type": "integer"
},
"fields_removed": {
"type": "integer"
},
"fields_reordered": {
"type": "integer"
},
"settings_changed": {
"type": "integer"
}
}
},
"to_version": {
"type": [
"string",
"null"
]
},
"template_id": {
"type": "string"
},
"from_version": {
"type": [
"string",
"null"
]
},
"changed_settings": {
"type": "array",
"items": {
"type": "string"
}
},
"document_changed": {
"type": "boolean"
}
},
"description": "What changed in a version of a template since the version before it: the draft since the latest published version, or a published version since the one before it. Fields are compared with all their settings, so `y` is measured from the top of each field's page."
}
Original tool metadata
{
"name": "diff_versions",
"description": "Shows what changed in a template's draft since its latest published version (or in a published version since the one before it): fields added, removed, changed and moved, settings, and whether the PDF or Word document was replaced. Added and removed fields show their main settings (get_fields shows the rest), and changed fields the settings that changed. Check it before publish_version.",
"inputSchema": {
"type": "object",
"required": [
"template_id"
],
"properties": {
"version": {
"type": "string",
"description": "Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest (the latest published version, or the draft while none has been published) or draft. Default draft, the version you edit."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"template_id",
"from_version",
"to_version",
"summary",
"fields",
"changed_settings",
"document_changed"
],
"properties": {
"fields": {
"type": "object",
"required": [
"added",
"removed",
"changed",
"reordered"
],
"properties": {
"added": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"type": "integer"
},
"name": {
"type": [
"string",
"null"
]
},
"page": {
"type": "integer"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"hidden": {
"type": "boolean"
},
"static": {
"type": "boolean"
},
"default": {
"type": [
"string",
"null"
]
},
"required": {
"type": "boolean"
},
"filled_by": {
"type": "string",
"description": "DocSpring, for a field DocSpring fills in (its name starts with @@)."
},
"description": {
"type": "string"
},
"option_list": {
"type": [
"string",
"null"
]
},
"display_type": {
"type": "string"
}
},
"description": "A field of a template: the name of a value in submission data, and how and where it prints. Fields with the same `name` share one value and the settings the descriptions say are shared. A PDF template's fields are placed on its pages: `x`, `y`, `width` and `height` are in units where every page is 2480 wide, measured from the top-left corner of the field's `page`. To convert from PDF points, multiply by 2480 and divide by the page's width in points (`document.page_dimensions` on the template). An HTML or Word template's fields are all on page 1, and their placement and style settings aren't used: its HTML or Word document places and styles each value."
}
},
"changed": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"old",
"new"
],
"properties": {
"id": {
"type": "integer",
"description": "The field's ID."
},
"new": {
"type": "object",
"properties": {},
"description": "The new values of the settings that changed."
},
"old": {
"type": "object",
"properties": {},
"description": "The old values of the settings that changed."
},
"name": {
"type": [
"string",
"null"
],
"description": "The field's name, or null for a field without one."
}
},
"description": "A field that changed."
}
},
"removed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"id": {
"type": "integer"
},
"name": {
"type": [
"string",
"null"
]
},
"page": {
"type": "integer"
},
"type": {
"type": "string"
},
"title": {
"type": "string"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"hidden": {
"type": "boolean"
},
"static": {
"type": "boolean"
},
"default": {
"type": [
"string",
"null"
]
},
"required": {
"type": "boolean"
},
"filled_by": {
"type": "string",
"description": "DocSpring, for a field DocSpring fills in (its name starts with @@)."
},
"description": {
"type": "string"
},
"option_list": {
"type": [
"string",
"null"
]
},
"display_type": {
"type": "string"
}
},
"description": "A field of a template: the name of a value in submission data, and how and where it prints. Fields with the same `name` share one value and the settings the descriptions say are shared. A PDF template's fields are placed on its pages: `x`, `y`, `width` and `height` are in units where every page is 2480 wide, measured from the top-left corner of the field's `page`. To convert from PDF points, multiply by 2480 and divide by the page's width in points (`document.page_dimensions` on the template). An HTML or Word template's fields are all on page 1, and their placement and style settings aren't used: its HTML or Word document places and styles each value."
}
},
"reordered": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"old_index",
"new_index"
],
"properties": {
"id": {
"type": "integer"
},
"new_index": {
"type": "integer"
},
"old_index": {
"type": "integer"
}
}
}
}
}
},
"summary": {
"type": "object",
"required": [
"fields_added",
"fields_removed",
"fields_changed",
"fields_reordered",
"settings_changed",
"total_changes"
],
"properties": {
"fields_added": {
"type": "integer"
},
"total_changes": {
"type": "integer"
},
"fields_changed": {
"type": "integer"
},
"fields_removed": {
"type": "integer"
},
"fields_reordered": {
"type": "integer"
},
"settings_changed": {
"type": "integer"
}
}
},
"to_version": {
"type": [
"string",
"null"
]
},
"template_id": {
"type": "string"
},
"from_version": {
"type": [
"string",
"null"
]
},
"changed_settings": {
"type": "array",
"items": {
"type": "string"
}
},
"document_changed": {
"type": "boolean"
}
},
"description": "What changed in a version of a template since the version before it: the draft since the latest published version, or a published version since the one before it. Fields are compared with all their settings, so `y` is measured from the top of each field's page."
},
"annotations": {
"title": "Compare versions",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Expires a submission now: deletes its data (the field values), its metadata, its PDF, its error messages and the IP address and browser it was submitted from. Its ID, state, template, test or live, times, audit trail and signature requests stay. A submission that's waiting for signatures keeps waiting: expiring it doesn't cancel its signature requests. It can't be undone. Returns the expired submission.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
submission_id
A submission's ID, such as sub_mJ4dKQsXzFbnY7bqPN.
Align the title with the capability actually described by this tool.
Description90/100
Fills in a template with data and makes a submission: a PDF, or a Word template's Word document (its output_format), and waits for it. Give the user the file's link, files.pdf.download_url (files.docx.download_url for a Word document, files.odt.download_url for an OpenDocument file), and say it works for 24 hours: get_submission returns a new one. Use test: true unless the user wants a real document: live documents use credits.
The description explains the capability, when to use it, and what to expect.
Inputs94/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest: the latest published version, or the draft while none has been published. Use draft to test changes that aren't published.
Clear enough to supply this argument.
test
true makes a free test document with a watermark. false makes a live one, which uses the account's credits: only when the user wants a real document.
Clear enough to supply this argument.
data
The values of the template's fields, by field name. get_template_schema shows what it takes.
Clear enough to supply this argument.
metadata
The user's own data about the submission, such as an ID from their app. It isn't printed on the PDF.
Clear enough to supply this argument.
editable
true keeps the PDF's text and check fields fillable. Default the template's setting.
Clear enough to supply this argument.
output_formats
What to make: pdf, docx (a Word template's Word document), odt (its OpenDocument file) and png (an image of each page of the PDF). Default the template's output_format: ["pdf"], or a Word template's ["docx"] or ["odt"].
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
expires_in
Seconds after the PDF is made until the submission's data and PDF are deleted, up to 10 years (315360000). Default the template's setting.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
password
A password that the PDF needs to be opened with. DocSpring never shows it again, so make sure the user has it.
Clear enough to supply this argument.
field_overrides
Changes to field settings for this PDF only, by field name, such as {"notes": {"font_size": 8}}. Settings that identify a field (its name and type) or that only the template sets (its description) can't be changed.
{
"type": "object",
"$defs": {
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"pointer": {
"type": "string"
},
"parameter": {
"type": "string"
},
"submission_id": {
"type": "string"
}
},
"description": "One problem with the request, such as a missing or invalid property."
},
"SubmissionAction": {
"type": "object",
"required": [
"id",
"integration_id",
"email_action_id",
"state",
"action_type",
"result_data",
"error_message"
],
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"action_type": {
"type": "string"
},
"result_data": {
"type": "object"
},
"error_message": {
"type": [
"string",
"null"
]
},
"integration_id": {
"type": [
"string",
"null"
]
},
"email_action_id": {
"type": [
"string",
"null"
]
}
},
"description": "An upload of a PDF to your storage, such as an S3 bucket, or an email action's email."
}
},
"anyOf": [
{
"type": "object",
"required": [
"id",
"template_id",
"template_type",
"template_version",
"batch_id",
"source",
"state",
"test",
"editable",
"data_errors",
"error_message",
"metadata",
"has_password",
"signature_requests",
"signing_order",
"actions",
"truncated_text",
"output_formats",
"files",
"preview_generated_at",
"expired",
"expires_at",
"processed_at",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"test": {
"type": "boolean"
},
"files": {
"type": "object",
"properties": {
"odt": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"pdf": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"png": {
"type": "object",
"required": [
"state",
"error_message",
"page_count"
],
"properties": {
"state": {
"type": "string"
},
"page_count": {
"type": [
"integer",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A PNG image of each page of the submission's PDF (the `png` output format), at 140 DPI: a US Letter page is 1190 x 1540 pixels."
},
"docx": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"preview": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"audit_trail": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
}
},
"description": "A submission's generated files. Each one is left out until it exists."
},
"state": {
"type": "string"
},
"source": {
"type": "string"
},
"actions": {
"type": "array",
"items": {
"$ref": "#/$defs/SubmissionAction"
}
},
"expired": {
"type": "boolean"
},
"batch_id": {
"type": [
"string",
"null"
]
},
"editable": {
"type": "boolean"
},
"metadata": {
"type": "object"
},
"created_at": {
"type": "string"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"updated_at": {
"type": "string"
},
"data_errors": {
"type": "array",
"items": {
"$ref": "#/$defs/ErrorDetail"
}
},
"template_id": {
"type": [
"string",
"null"
]
},
"has_password": {
"type": "boolean"
},
"processed_at": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
},
"signing_order": {
"type": "string"
},
"template_type": {
"type": "string"
},
"output_formats": {
"type": "array",
"items": {
"type": "string"
}
},
"truncated_text": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"template_version": {
"type": [
"string",
"null"
]
},
"signature_requests": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"submission_id",
"name",
"email",
"fields",
"metadata",
"role",
"sort_order",
"send_email",
"signing_step",
"sent_at",
"email_status",
"state",
"data",
"viewed_at",
"completed_at",
"declined_at",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"type": [
"object",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"role": {
"type": "string"
},
"email": {
"type": [
"string",
"null"
]
},
"state": {
"type": "string"
},
"fields": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"sent_at": {
"type": [
"string",
"null"
]
},
"metadata": {
"type": "object"
},
"viewed_at": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
},
"send_email": {
"type": "boolean"
},
"sort_order": {
"type": "integer"
},
"updated_at": {
"type": "string"
},
"declined_at": {
"type": [
"string",
"null"
]
},
"completed_at": {
"type": [
"string",
"null"
]
},
"email_status": {
"type": [
"string",
"null"
]
},
"signing_step": {
"type": [
"integer",
"null"
]
},
"submission_id": {
"type": "string"
}
},
"description": "A request for someone to fill in their fields of a submission and sign it. Someone who only fills in fields for the people who sign later (such as an employer's section) has a signature request too. The submission's PDF is generated once every signature request is completed."
}
},
"preview_generated_at": {
"type": [
"string",
"null"
]
}
},
"description": "Data submitted to a template, and the files generated from it (a PDF, a Word document, an OpenDocument file, or more than one of them)."
},
{
"type": "object",
"required": [
"submission_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"submission_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "generate_pdf",
"description": "Fills in a template with data and makes a submission: a PDF, or a Word template's Word document (its output_format), and waits for it. Give the user the file's link, files.pdf.download_url (files.docx.download_url for a Word document, files.odt.download_url for an OpenDocument file), and say it works for 24 hours: get_submission returns a new one. Use test: true unless the user wants a real document: live documents use credits.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"test"
],
"properties": {
"data": {
"type": "object",
"description": "The values of the template's fields, by field name. get_template_schema shows what it takes."
},
"test": {
"type": "boolean",
"description": "true makes a free test document with a watermark. false makes a live one, which uses the account's credits: only when the user wants a real document."
},
"version": {
"type": "string",
"description": "Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest: the latest published version, or the draft while none has been published. Use draft to test changes that aren't published."
},
"editable": {
"type": [
"null",
"boolean"
],
"description": "true keeps the PDF's text and check fields fillable. Default the template's setting."
},
"metadata": {
"type": "object",
"description": "The user's own data about the submission, such as an ID from their app. It isn't printed on the PDF."
},
"password": {
"type": "string",
"description": "A password that the PDF needs to be opened with. DocSpring never shows it again, so make sure the user has it."
},
"expires_in": {
"type": "integer",
"description": "Seconds after the PDF is made until the submission's data and PDF are deleted, up to 10 years (315360000). Default the template's setting."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
},
"output_formats": {
"type": [
"null",
"array"
],
"items": {
"enum": [
"pdf",
"docx",
"odt",
"png"
],
"type": "string"
},
"description": "What to make: pdf, docx (a Word template's Word document), odt (its OpenDocument file) and png (an image of each page of the PDF). Default the template's output_format: [\"pdf\"], or a Word template's [\"docx\"] or [\"odt\"]."
},
"field_overrides": {
"type": "object",
"description": "Changes to field settings for this PDF only, by field name, such as {\"notes\": {\"font_size\": 8}}. Settings that identify a field (its name and type) or that only the template sets (its description) can't be changed."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$defs": {
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"pointer": {
"type": "string"
},
"parameter": {
"type": "string"
},
"submission_id": {
"type": "string"
}
},
"description": "One problem with the request, such as a missing or invalid property."
},
"SubmissionAction": {
"type": "object",
"required": [
"id",
"integration_id",
"email_action_id",
"state",
"action_type",
"result_data",
"error_message"
],
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"action_type": {
"type": "string"
},
"result_data": {
"type": "object"
},
"error_message": {
"type": [
"string",
"null"
]
},
"integration_id": {
"type": [
"string",
"null"
]
},
"email_action_id": {
"type": [
"string",
"null"
]
}
},
"description": "An upload of a PDF to your storage, such as an S3 bucket, or an email action's email."
}
},
"anyOf": [
{
"type": "object",
"required": [
"id",
"template_id",
"template_type",
"template_version",
"batch_id",
"source",
"state",
"test",
"editable",
"data_errors",
"error_message",
"metadata",
"has_password",
"signature_requests",
"signing_order",
"actions",
"truncated_text",
"output_formats",
"files",
"preview_generated_at",
"expired",
"expires_at",
"processed_at",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"test": {
"type": "boolean"
},
"files": {
"type": "object",
"properties": {
"odt": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"pdf": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"png": {
"type": "object",
"required": [
"state",
"error_message",
"page_count"
],
"properties": {
"state": {
"type": "string"
},
"page_count": {
"type": [
"integer",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A PNG image of each page of the submission's PDF (the `png` output format), at 140 DPI: a US Letter page is 1190 x 1540 pixels."
},
"docx": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"preview": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"audit_trail": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
}
},
"description": "A submission's generated files. Each one is left out until it exists."
},
"state": {
"type": "string"
},
"source": {
"type": "string"
},
"actions": {
"type": "array",
"items": {
"$ref": "#/$defs/SubmissionAction"
}
},
"expired": {
"type": "boolean"
},
"batch_id": {
"type": [
"string",
"null"
]
},
"editable": {
"type": "boolean"
},
"metadata": {
"type": "object"
},
"created_at": {
"type": "string"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"updated_at": {
"type": "string"
},
"data_errors": {
"type": "array",
"items": {
"$ref": "#/$defs/ErrorDetail"
}
},
"template_id": {
"type": [
"string",
"null"
]
},
"has_password": {
"type": "boolean"
},
"processed_at": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
},
"signing_order": {
"type": "string"
},
"template_type": {
"type": "string"
},
"output_formats": {
"type": "array",
"items": {
"type": "string"
}
},
"truncated_text": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"template_version": {
"type": [
"string",
"null"
]
},
"signature_requests": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"submission_id",
"name",
"email",
"fields",
"metadata",
"role",
"sort_order",
"send_email",
"signing_step",
"sent_at",
"email_status",
"state",
"data",
"viewed_at",
"completed_at",
"declined_at",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"type": [
"object",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"role": {
"type": "string"
},
"email": {
"type": [
"string",
"null"
]
},
"state": {
"type": "string"
},
"fields": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"sent_at": {
"type": [
"string",
"null"
]
},
"metadata": {
"type": "object"
},
"viewed_at": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
},
"send_email": {
"type": "boolean"
},
"sort_order": {
"type": "integer"
},
"updated_at": {
"type": "string"
},
"declined_at": {
"type": [
"string",
"null"
]
},
"completed_at": {
"type": [
"string",
"null"
]
},
"email_status": {
"type": [
"string",
"null"
]
},
"signing_step": {
"type": [
"integer",
"null"
]
},
"submission_id": {
"type": "string"
}
},
"description": "A request for someone to fill in their fields of a submission and sign it. Someone who only fills in fields for the people who sign later (such as an employer's section) has a signature request too. The submission's PDF is generated once every signature request is completed."
}
},
"preview_generated_at": {
"type": [
"string",
"null"
]
}
},
"description": "Data submitted to a template, and the files generated from it (a PDF, a Word document, an OpenDocument file, or more than one of them)."
},
{
"type": "object",
"required": [
"submission_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"submission_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "Generate a PDF",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Makes up to 50 submissions in one batch (PDFs, or Word templates' Word documents or OpenDocument files), from one template or several, and waits for them. Each submission's files.pdf.download_url (files.docx.download_url for a Word document, files.odt.download_url for an OpenDocument file) works for 24 hours. Use test: true unless the user wants real documents: live documents use credits.
The description explains the capability, when to use it, and what to expect.
Inputs87/100
Remove repeated schema validation from descriptions; focus on meaning and usage context.
template_id
The template for each submission that doesn't name its own template_id.
Clear enough to supply this argument.
version
The template version for each submission that doesn't name its own: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest: the latest published version, or the draft while none has been published.
Clear enough to supply this argument.
test
true makes free test documents with a watermark. false makes live ones, which use the account's credits: only when the user wants real documents.
Clear enough to supply this argument.
submissions
Up to 50 submissions, each with its data (the field values by name), and optionally metadata, editable, output_formats, expires_in, password, field_overrides, template_id and template_version, as generate_pdf takes them.
Clear enough to supply this argument.
metadata
The user's own data about the batch, such as an ID from their app.
Clear enough to supply this argument.
output_formats
What to make for each submission that doesn't set its own: pdf, docx (a Word template's Word document), odt (its OpenDocument file) and png (an image of each page of the PDF). Default each template's output_format.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Makes the other files of a Word template's submission, and waits for them: its PDF, Word document or OpenDocument file (odt) when it didn't make them. They don't use credits again. Returns the submission with the new files' download_url, which works for 24 hours. get_submission_pages shows the PDF's pages.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
submission_id
A submission's ID, such as sub_mJ4dKQsXzFbnY7bqPN.
Clear enough to supply this argument.
formats
The files to make for a Word template's submission that didn't make them: pdf (converted from its Word document), docx (made again from its data and the template version it used) or odt (an OpenDocument file converted from its Word document).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Make a submission's other files",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema76/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"$defs": {
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"pointer": {
"type": "string"
},
"parameter": {
"type": "string"
},
"submission_id": {
"type": "string"
}
},
"description": "One problem with the request, such as a missing or invalid property."
},
"SubmissionAction": {
"type": "object",
"required": [
"id",
"integration_id",
"email_action_id",
"state",
"action_type",
"result_data",
"error_message"
],
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"action_type": {
"type": "string"
},
"result_data": {
"type": "object"
},
"error_message": {
"type": [
"string",
"null"
]
},
"integration_id": {
"type": [
"string",
"null"
]
},
"email_action_id": {
"type": [
"string",
"null"
]
}
},
"description": "An upload of a PDF to your storage, such as an S3 bucket, or an email action's email."
}
},
"anyOf": [
{
"type": "object",
"required": [
"id",
"template_id",
"template_type",
"template_version",
"batch_id",
"source",
"state",
"test",
"editable",
"data_errors",
"error_message",
"metadata",
"has_password",
"signature_requests",
"signing_order",
"actions",
"truncated_text",
"output_formats",
"files",
"preview_generated_at",
"expired",
"expires_at",
"processed_at",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"test": {
"type": "boolean"
},
"files": {
"type": "object",
"properties": {
"odt": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"pdf": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"png": {
"type": "object",
"required": [
"state",
"error_message",
"page_count"
],
"properties": {
"state": {
"type": "string"
},
"page_count": {
"type": [
"integer",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A PNG image of each page of the submission's PDF (the `png` output format), at 140 DPI: a US Letter page is 1190 x 1540 pixels."
},
"docx": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"preview": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"audit_trail": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
}
},
"description": "A submission's generated files. Each one is left out until it exists."
},
"state": {
"type": "string"
},
"source": {
"type": "string"
},
"actions": {
"type": "array",
"items": {
"$ref": "#/$defs/SubmissionAction"
}
},
"expired": {
"type": "boolean"
},
"batch_id": {
"type": [
"string",
"null"
]
},
"editable": {
"type": "boolean"
},
"metadata": {
"type": "object"
},
"created_at": {
"type": "string"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"updated_at": {
"type": "string"
},
"data_errors": {
"type": "array",
"items": {
"$ref": "#/$defs/ErrorDetail"
}
},
"template_id": {
"type": [
"string",
"null"
]
},
"has_password": {
"type": "boolean"
},
"processed_at": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
},
"signing_order": {
"type": "string"
},
"template_type": {
"type": "string"
},
"output_formats": {
"type": "array",
"items": {
"type": "string"
}
},
"truncated_text": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"template_version": {
"type": [
"string",
"null"
]
},
"signature_requests": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"submission_id",
"name",
"email",
"fields",
"metadata",
"role",
"sort_order",
"send_email",
"signing_step",
"sent_at",
"email_status",
"state",
"data",
"viewed_at",
"completed_at",
"declined_at",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"type": [
"object",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"role": {
"type": "string"
},
"email": {
"type": [
"string",
"null"
]
},
"state": {
"type": "string"
},
"fields": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"sent_at": {
"type": [
"string",
"null"
]
},
"metadata": {
"type": "object"
},
"viewed_at": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
},
"send_email": {
"type": "boolean"
},
"sort_order": {
"type": "integer"
},
"updated_at": {
"type": "string"
},
"declined_at": {
"type": [
"string",
"null"
]
},
"completed_at": {
"type": [
"string",
"null"
]
},
"email_status": {
"type": [
"string",
"null"
]
},
"signing_step": {
"type": [
"integer",
"null"
]
},
"submission_id": {
"type": "string"
}
},
"description": "A request for someone to fill in their fields of a submission and sign it. Someone who only fills in fields for the people who sign later (such as an employer's section) has a signature request too. The submission's PDF is generated once every signature request is completed."
}
},
"preview_generated_at": {
"type": [
"string",
"null"
]
}
},
"description": "Data submitted to a template, and the files generated from it (a PDF, a Word document, an OpenDocument file, or more than one of them)."
},
{
"type": "object",
"required": [
"submission_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"submission_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "generate_submission_files",
"description": "Makes the other files of a Word template's submission, and waits for them: its PDF, Word document or OpenDocument file (odt) when it didn't make them. They don't use credits again. Returns the submission with the new files' download_url, which works for 24 hours. get_submission_pages shows the PDF's pages.",
"inputSchema": {
"type": "object",
"required": [
"submission_id",
"formats"
],
"properties": {
"formats": {
"type": [
"null",
"array"
],
"items": {
"enum": [
"pdf",
"docx",
"odt"
],
"type": "string"
},
"description": "The files to make for a Word template's submission that didn't make them: pdf (converted from its Word document), docx (made again from its data and the template version it used) or odt (an OpenDocument file converted from its Word document)."
},
"submission_id": {
"type": "string",
"description": "A submission's ID, such as sub_mJ4dKQsXzFbnY7bqPN."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$defs": {
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"pointer": {
"type": "string"
},
"parameter": {
"type": "string"
},
"submission_id": {
"type": "string"
}
},
"description": "One problem with the request, such as a missing or invalid property."
},
"SubmissionAction": {
"type": "object",
"required": [
"id",
"integration_id",
"email_action_id",
"state",
"action_type",
"result_data",
"error_message"
],
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"action_type": {
"type": "string"
},
"result_data": {
"type": "object"
},
"error_message": {
"type": [
"string",
"null"
]
},
"integration_id": {
"type": [
"string",
"null"
]
},
"email_action_id": {
"type": [
"string",
"null"
]
}
},
"description": "An upload of a PDF to your storage, such as an S3 bucket, or an email action's email."
}
},
"anyOf": [
{
"type": "object",
"required": [
"id",
"template_id",
"template_type",
"template_version",
"batch_id",
"source",
"state",
"test",
"editable",
"data_errors",
"error_message",
"metadata",
"has_password",
"signature_requests",
"signing_order",
"actions",
"truncated_text",
"output_formats",
"files",
"preview_generated_at",
"expired",
"expires_at",
"processed_at",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"test": {
"type": "boolean"
},
"files": {
"type": "object",
"properties": {
"odt": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"pdf": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"png": {
"type": "object",
"required": [
"state",
"error_message",
"page_count"
],
"properties": {
"state": {
"type": "string"
},
"page_count": {
"type": [
"integer",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A PNG image of each page of the submission's PDF (the `png` output format), at 140 DPI: a US Letter page is 1190 x 1540 pixels."
},
"docx": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"preview": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
},
"audit_trail": {
"type": "object",
"required": [
"state",
"error_message",
"download_url",
"filename",
"content_type",
"size",
"sha256"
],
"properties": {
"size": {
"type": [
"integer",
"null"
]
},
"state": {
"type": "string"
},
"sha256": {
"type": [
"string",
"null"
]
},
"filename": {
"type": "string"
},
"content_type": {
"type": "string"
},
"download_url": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
}
},
"description": "A file that DocSpring generated, such as a submission's PDF or Word document. A file made after its submission was processed is listed while it's being made: check its `state` before using its links."
}
},
"description": "A submission's generated files. Each one is left out until it exists."
},
"state": {
"type": "string"
},
"source": {
"type": "string"
},
"actions": {
"type": "array",
"items": {
"$ref": "#/$defs/SubmissionAction"
}
},
"expired": {
"type": "boolean"
},
"batch_id": {
"type": [
"string",
"null"
]
},
"editable": {
"type": "boolean"
},
"metadata": {
"type": "object"
},
"created_at": {
"type": "string"
},
"expires_at": {
"type": [
"string",
"null"
]
},
"updated_at": {
"type": "string"
},
"data_errors": {
"type": "array",
"items": {
"$ref": "#/$defs/ErrorDetail"
}
},
"template_id": {
"type": [
"string",
"null"
]
},
"has_password": {
"type": "boolean"
},
"processed_at": {
"type": [
"string",
"null"
]
},
"error_message": {
"type": [
"string",
"null"
]
},
"signing_order": {
"type": "string"
},
"template_type": {
"type": "string"
},
"output_formats": {
"type": "array",
"items": {
"type": "string"
}
},
"truncated_text": {
"type": [
"object",
"null"
],
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"template_version": {
"type": [
"string",
"null"
]
},
"signature_requests": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"submission_id",
"name",
"email",
"fields",
"metadata",
"role",
"sort_order",
"send_email",
"signing_step",
"sent_at",
"email_status",
"state",
"data",
"viewed_at",
"completed_at",
"declined_at",
"created_at",
"updated_at"
],
"properties": {
"id": {
"type": "string"
},
"data": {
"type": [
"object",
"null"
]
},
"name": {
"type": [
"string",
"null"
]
},
"role": {
"type": "string"
},
"email": {
"type": [
"string",
"null"
]
},
"state": {
"type": "string"
},
"fields": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"sent_at": {
"type": [
"string",
"null"
]
},
"metadata": {
"type": "object"
},
"viewed_at": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
},
"send_email": {
"type": "boolean"
},
"sort_order": {
"type": "integer"
},
"updated_at": {
"type": "string"
},
"declined_at": {
"type": [
"string",
"null"
]
},
"completed_at": {
"type": [
"string",
"null"
]
},
"email_status": {
"type": [
"string",
"null"
]
},
"signing_step": {
"type": [
"integer",
"null"
]
},
"submission_id": {
"type": "string"
}
},
"description": "A request for someone to fill in their fields of a submission and sign it. Someone who only fills in fields for the people who sign later (such as an employer's section) has a signature request too. The submission's PDF is generated once every signature request is completed."
}
},
"preview_generated_at": {
"type": [
"string",
"null"
]
}
},
"description": "Data submitted to a template, and the files generated from it (a PDF, a Word document, an OpenDocument file, or more than one of them)."
},
{
"type": "object",
"required": [
"submission_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"submission_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "Make a submission's other files",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description83/100
Gets the settings of a template's fields, or of the fields chosen by ID or name. Settings at their default values are left out (include_defaults shows them), except required, which is true by default. Positions are in units where every page is 2480 wide, measured from the page's top left corner. An HTML or Word template's or a page design's fields have no position: they only define its data.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest (the latest published version, or the draft while none has been published) or draft. Default draft, the version you edit.
Clear enough to supply this argument.
field_ids
Only these fields, by ID.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
names
Only the fields with these names.
Clear enough to supply this argument.
include_defaults
Show every setting, including those at their default values and those that are null or empty.
Explain what happens when this optional value is omitted.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Generates types for a template's submission data, for code that creates submissions with DocSpring's API or SDKs: the types only, without code to convert JSON (the API's just_types option). Returns the code and its root type's name.
The description explains the capability, when to use it, and what to expect.
Inputs79/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest, the version submissions use: the latest published version, or the draft while none has been published.
Clear enough to supply this argument.
language
The language to generate the types in.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
Annotations100/100
All four behavior hints are declared.
{
"title": "Generate types for a template's data",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema59/100
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"lang",
"root_type_name",
"code"
],
"properties": {
"code": {
"type": "string"
},
"lang": {
"type": "string"
},
"root_type_name": {
"type": "string"
}
},
"description": "Typed code for the template's submission data, for an app that creates submissions."
}
Original tool metadata
{
"name": "get_model_code",
"description": "Generates types for a template's submission data, for code that creates submissions with DocSpring's API or SDKs: the types only, without code to convert JSON (the API's just_types option). Returns the code and its root type's name.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"language"
],
"properties": {
"version": {
"type": "string",
"description": "Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest, the version submissions use: the latest published version, or the draft while none has been published."
},
"language": {
"enum": [
"typescript",
"javascript",
"ruby",
"python",
"php",
"java",
"csharp",
"elixir",
"go",
"rust"
],
"type": "string",
"description": "The language to generate the types in."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"lang",
"root_type_name",
"code"
],
"properties": {
"code": {
"type": "string"
},
"lang": {
"type": "string"
},
"root_type_name": {
"type": "string"
}
},
"description": "Typed code for the template's submission data, for an app that creates submissions."
},
"annotations": {
"title": "Generate types for a template's data",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description82/100
Gets a submission (its state, data, signature requests and links to download its files), a batch from generate_pdfs, or a combined PDF from combine_pdfs. While it's still being processed, it waits for it (up to 50 seconds). Download links expire: get_submission again for new ones. get_submission_pages shows its pages.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Input documentation gives an agent enough context to populate the arguments.
submission_id
A submission's ID, such as sub_mJ4dKQsXzFbnY7bqPN.
Clear enough to supply this argument.
batch_id
A batch's ID from generate_pdfs, such as sbb_Gk2uqfXJy6mRFhhh4K.
Clear enough to supply this argument.
combined_pdf_id
A combined PDF's ID from combine_pdfs, such as com_Fq6zMZd3W3HBtuKMRC.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description80/100
Shows a submission's PDF as page images, to check how the data looks on it. The first time, DocSpring makes the images, which takes a few seconds: for a Word template's submission that made no PDF (only its Word document or OpenDocument file), it makes the PDF first, without using credits again.
The description explains the capability, when to use it, and what to expect.
Inputs25/100
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
submission_id
A submission's ID, such as sub_mJ4dKQsXzFbnY7bqPN.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
pages
The page numbers to see, starting at 1, up to 4 at a time. Default the first page.
Resolve the mismatch between this description and its schema constraints.
Annotations100/100
All four behavior hints are declared.
{
"title": "See a submission's pages",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
Output schema74/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"page_count",
"pages"
],
"properties": {
"note": {
"type": "string",
"description": "Pages the PDF doesn't have, and how image pixels map to field positions."
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page",
"width",
"height"
],
"properties": {
"page": {
"type": "integer",
"description": "The page number, from 1."
},
"width": {
"type": "integer",
"description": "The image's width in pixels."
},
"height": {
"type": "integer",
"description": "The image's height in pixels."
}
},
"description": "A page image."
},
"description": "The pages shown, in order."
},
"page_count": {
"type": "integer",
"description": "How many pages the PDF has."
},
"units_per_pixel": {
"type": "number",
"description": "Field position units per image pixel (on a PDF template's pages)."
}
},
"description": "The pages shown as images, which follow this in the result."
},
{
"type": "object",
"required": [
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "When to try again."
},
"state": {
"type": "string",
"description": "pending"
}
},
"description": "The page images aren't ready yet."
},
{
"type": "object",
"required": [
"submission_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"submission_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "get_submission_pages",
"description": "Shows a submission's PDF as page images, to check how the data looks on it. The first time, DocSpring makes the images, which takes a few seconds: for a Word template's submission that made no PDF (only its Word document or OpenDocument file), it makes the PDF first, without using credits again.",
"inputSchema": {
"type": "object",
"required": [
"submission_id"
],
"properties": {
"pages": {
"type": [
"null",
"array"
],
"items": {
"type": "integer"
},
"description": "The page numbers to see, starting at 1, up to 4 at a time. Default the first page."
},
"submission_id": {
"type": "string",
"description": "A submission's ID, such as sub_mJ4dKQsXzFbnY7bqPN."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"page_count",
"pages"
],
"properties": {
"note": {
"type": "string",
"description": "Pages the PDF doesn't have, and how image pixels map to field positions."
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page",
"width",
"height"
],
"properties": {
"page": {
"type": "integer",
"description": "The page number, from 1."
},
"width": {
"type": "integer",
"description": "The image's width in pixels."
},
"height": {
"type": "integer",
"description": "The image's height in pixels."
}
},
"description": "A page image."
},
"description": "The pages shown, in order."
},
"page_count": {
"type": "integer",
"description": "How many pages the PDF has."
},
"units_per_pixel": {
"type": "number",
"description": "Field position units per image pixel (on a PDF template's pages)."
}
},
"description": "The pages shown as images, which follow this in the result."
},
{
"type": "object",
"required": [
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "When to try again."
},
"state": {
"type": "string",
"description": "pending"
}
},
"description": "The page images aren't ready yet."
},
{
"type": "object",
"required": [
"submission_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"submission_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "See a submission's pages",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description94/100
Gets a template: its settings, a summary of each field (name, type, description, and on a PDF template its page and position), and for the draft, whether it has changes that aren't published yet. While a new PDF is still being processed, or a document_url downloaded, it waits for it (up to 50 seconds). Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. get_fields shows every setting of chosen fields, and list_versions the published versions.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest (the latest published version, or the draft while none has been published) or draft. Default draft, the version you edit.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Shows a PDF template's pages as images, to see where fields go. Each image is 992 pixels wide, and field positions are in units where every page is 2480 wide, so a field's x, y, width and height are the image's pixels times 2.5. HTML and Word templates and page designs have no page images: preview_template shows their pages filled in with data.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Remove repeated schema validation from descriptions; focus on meaning and usage context.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest (the latest published version, or the draft while none has been published) or draft. Default draft, the version you edit.
Clear enough to supply this argument.
pages
The page numbers to see, starting at 1, up to 4 at a time. Default the first page.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "See a template's pages",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema75/100
The output schema explains the structured result.
View output schema
{
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"page_count",
"pages"
],
"properties": {
"note": {
"type": "string",
"description": "Pages the PDF doesn't have, and how image pixels map to field positions."
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page",
"width",
"height"
],
"properties": {
"page": {
"type": "integer",
"description": "The page number, from 1."
},
"width": {
"type": "integer",
"description": "The image's width in pixels."
},
"height": {
"type": "integer",
"description": "The image's height in pixels."
}
},
"description": "A page image."
},
"description": "The pages shown, in order."
},
"page_count": {
"type": "integer",
"description": "How many pages the PDF has."
},
"units_per_pixel": {
"type": "number",
"description": "Field position units per image pixel (on a PDF template's pages)."
}
},
"description": "The pages shown as images, which follow this in the result."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "get_template_pages",
"description": "Shows a PDF template's pages as images, to see where fields go. Each image is 992 pixels wide, and field positions are in units where every page is 2480 wide, so a field's x, y, width and height are the image's pixels times 2.5. HTML and Word templates and page designs have no page images: preview_template shows their pages filled in with data.",
"inputSchema": {
"type": "object",
"required": [
"template_id"
],
"properties": {
"pages": {
"type": [
"null",
"array"
],
"items": {
"type": "integer"
},
"description": "The page numbers to see, starting at 1, up to 4 at a time. Default the first page."
},
"version": {
"type": "string",
"description": "Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest (the latest published version, or the draft while none has been published) or draft. Default draft, the version you edit."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"page_count",
"pages"
],
"properties": {
"note": {
"type": "string",
"description": "Pages the PDF doesn't have, and how image pixels map to field positions."
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page",
"width",
"height"
],
"properties": {
"page": {
"type": "integer",
"description": "The page number, from 1."
},
"width": {
"type": "integer",
"description": "The image's width in pixels."
},
"height": {
"type": "integer",
"description": "The image's height in pixels."
}
},
"description": "A page image."
},
"description": "The pages shown, in order."
},
"page_count": {
"type": "integer",
"description": "How many pages the PDF has."
},
"units_per_pixel": {
"type": "number",
"description": "Field position units per image pixel (on a PDF template's pages)."
}
},
"description": "The pages shown as images, which follow this in the result."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "See a template's pages",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description76/100
Gets the JSON Schema of the data a template's submissions take: each field's name, type, and whether it's required.
Describe the returned information so the agent knows whether it will answer the request.
Inputs96/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest, the version submissions use: the latest published version, or the draft while none has been published.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Get a template's data schema",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
Output schema68/100
Declare the result fields and their types in the output schema.
View output schema
{
"type": "object",
"description": "The JSON Schema of the template's submission data: one property for each field, with its type, format and whether it's required. Its `$schema` says which draft it uses (draft-07 for newer accounts, draft-04 before)."
}
Original tool metadata
{
"name": "get_template_schema",
"description": "Gets the JSON Schema of the data a template's submissions take: each field's name, type, and whether it's required.",
"inputSchema": {
"type": "object",
"required": [
"template_id"
],
"properties": {
"version": {
"type": "string",
"description": "Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest, the version submissions use: the latest published version, or the draft while none has been published."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"description": "The JSON Schema of the template's submission data: one property for each field, with its type, format and whether it's required. Its `$schema` says which draft it uses (draft-07 for newer accounts, draft-04 before)."
},
"annotations": {
"title": "Get a template's data schema",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description84/100
Lists the account's email actions, 50 at a time. An email action emails each submission's files to people once it's processed: an account email action sends for every template, or the templates and folders it names, and a template's own sends only for it. Each one has its ID, name, whether it's enabled, recipients, subject, which submissions it sends for (live, test or all, and its conditions) and whether its emails are failing. With template_id, lists the template's own and the account email actions that send for it, with the template's changes to each.
The description explains the capability, when to use it, and what to expect.
Inputs89/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
List this template's email actions: its own, and the account email actions that send for it, each with the template's customization. Default the account email actions.
Clear enough to supply this argument.
limit
How many to return, 1 to 100. Default 50.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
The previous page's next_cursor, to get the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Lists the account's template folders, 50 at a time: each one's ID, name, path (such as Clients/Acme) and parent folder. A folder's ID goes in parent_folder_id, to list the templates in it (list_templates) or create a template or folder in it.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
parent_folder_id
Only the folders in this folder. Default every folder, at any depth.
Clear enough to supply this argument.
limit
How many to return, 1 to 100. Default 50.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
The previous page's next_cursor, to get the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Lists the account's submissions, newest first, 50 at a time: each one's state, template, test or live, metadata and times. Its data and files are left out unless you ask for them. get_submission has a submission's signature requests, and get_submission_pages its pages.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
Only this template's submissions.
Clear enough to supply this argument.
test
Only test submissions (true) or live submissions (false).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
created_after
Only submissions created after this time, such as 2026-01-31T09:00:00Z.
Clear enough to supply this argument.
created_before
Only submissions created before this time.
Clarify units, where to obtain this value, or conventions not already expressed in the schema.
state
Only submissions in this state. The ones that failed are invalid_data, error, syntax_error, image_download_failed and image_processing_failed, and one still pending an hour after it was created is stuck. waiting_for_signature_requests finds those still being signed.
Clear enough to supply this argument.
include_data
Include each submission's data (its field values).
Clear enough to supply this argument.
include_files
Include each submission's files and their download links.
Clear enough to supply this argument.
limit
How many to return, 1 to 100. Default 50.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
The previous page's next_cursor, to get the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description87/100
Lists the account's templates, 50 at a time: each one's name, type, folder, latest published version and whether it's ready. A template is a PDF, HTML or Word document, or a page design, with fields that DocSpring fills in with submission data. get_template has a template's settings and fields.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
query
Only templates whose name contains this text (ignoring case).
Clear enough to supply this argument.
parent_folder_id
Only the templates in this folder (not in its subfolders).
Clear enough to supply this argument.
limit
How many to return, 1 to 100. Default 50.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
The previous page's next_cursor, to get the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description75/100
Lists the account's webhooks. A webhook's signing secret and its headers' values aren't shown to assistants: the user copies the secret from the webhook's page in DocSpring (Webhooks, in the sidebar), and adds headers there.
Describe the returned information so the agent knows whether it will answer the request.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
limit
How many to return, 1 to 100. Default 50.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
cursor
The previous page's next_cursor, to get the next page.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description91/100
Shows a template's pages filled in with your data as PNG images (not a PDF), to check how an HTML, PDF or Word template or a page design prints before you publish it or generate live documents (a Word template's pages are its PDF's). It makes no submission and uses no credits, and the pages are watermarked like a test PDF's. Renders the draft by default, so you can check a change before you publish it. The data isn't checked against the template's fields (validate_data does that), and a value a field can't print is an error. Unlike a submission, an HTML template's preview stops with an error at an undefined variable or an unknown filter, so send a value for every key the template prints.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Remove repeated schema validation from descriptions; focus on meaning and usage context.
template_id
The template's ID (an HTML, PDF or Word template, or a page design), such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default draft, the version you edit.
Clear enough to supply this argument.
data
The values of the template's fields, by field name, as generate_pdf takes them.
Clear enough to supply this argument.
pages
The page numbers to see, starting at 1, up to 4 at a time. Default the first page.
{
"type": "object",
"required": [
"page_count",
"pages"
],
"properties": {
"note": {
"type": "string",
"description": "Pages the PDF doesn't have, and how image pixels map to field positions."
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page",
"width",
"height"
],
"properties": {
"page": {
"type": "integer",
"description": "The page number, from 1."
},
"width": {
"type": "integer",
"description": "The image's width in pixels."
},
"height": {
"type": "integer",
"description": "The image's height in pixels."
}
},
"description": "A page image."
},
"description": "The pages shown, in order."
},
"page_count": {
"type": "integer",
"description": "How many pages the PDF has."
},
"units_per_pixel": {
"type": "number",
"description": "Field position units per image pixel (on a PDF template's pages)."
}
},
"description": "The pages shown as images, which follow this in the result."
}
Original tool metadata
{
"name": "preview_template",
"description": "Shows a template's pages filled in with your data as PNG images (not a PDF), to check how an HTML, PDF or Word template or a page design prints before you publish it or generate live documents (a Word template's pages are its PDF's). It makes no submission and uses no credits, and the pages are watermarked like a test PDF's. Renders the draft by default, so you can check a change before you publish it. The data isn't checked against the template's fields (validate_data does that), and a value a field can't print is an error. Unlike a submission, an HTML template's preview stops with an error at an undefined variable or an unknown filter, so send a value for every key the template prints.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"data"
],
"properties": {
"data": {
"type": "object",
"description": "The values of the template's fields, by field name, as generate_pdf takes them."
},
"pages": {
"type": [
"null",
"array"
],
"items": {
"type": "integer"
},
"description": "The page numbers to see, starting at 1, up to 4 at a time. Default the first page."
},
"version": {
"type": "string",
"description": "Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default draft, the version you edit."
},
"template_id": {
"type": "string",
"description": "The template's ID (an HTML, PDF or Word template, or a page design), such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"page_count",
"pages"
],
"properties": {
"note": {
"type": "string",
"description": "Pages the PDF doesn't have, and how image pixels map to field positions."
},
"pages": {
"type": "array",
"items": {
"type": "object",
"required": [
"page",
"width",
"height"
],
"properties": {
"page": {
"type": "integer",
"description": "The page number, from 1."
},
"width": {
"type": "integer",
"description": "The image's width in pixels."
},
"height": {
"type": "integer",
"description": "The image's height in pixels."
}
},
"description": "A page image."
},
"description": "The pages shown, in order."
},
"page_count": {
"type": "integer",
"description": "How many pages the PDF has."
},
"units_per_pixel": {
"type": "number",
"description": "Field position units per image pixel (on a PDF template's pages)."
}
},
"description": "The pages shown as images, which follow this in the result."
},
"annotations": {
"title": "Preview a template",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description96/100
Publishes a template's draft as a new version, which new submissions use straight away. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Before asking, check the changes with diff_versions and preview_template, which shows the draft's pages filled in with data. Returns the new version.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version_type
Which part of the latest version number to increase: major (2.0.0) for changes that need different submission data, minor (1.3.0) for new optional fields, patch (1.2.1) for fixes. Publish a template's first version as major, which makes it 1.0.0: minor would make it 0.1.0, and integrations that ask for version 1 wouldn't find it.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
description
What changed, shown with the version in DocSpring.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"version",
"description",
"published_at",
"published_by"
],
"properties": {
"version": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"published_at": {
"type": "string"
},
"published_by": {
"type": [
"object",
"null"
],
"required": [
"type",
"user_id",
"external_id",
"name",
"email"
],
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"type": {
"type": "string"
},
"email": {
"type": [
"string",
"null"
]
},
"user_id": {
"type": [
"string",
"null"
]
},
"external_id": {
"type": [
"string",
"null"
]
}
}
}
},
"description": "A published version of a template."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "publish_version",
"description": "Publishes a template's draft as a new version, which new submissions use straight away. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Before asking, check the changes with diff_versions and preview_template, which shows the draft's pages filled in with data. Returns the new version.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"version_type"
],
"properties": {
"description": {
"type": "string",
"description": "What changed, shown with the version in DocSpring."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
},
"version_type": {
"enum": [
"major",
"minor",
"patch"
],
"type": "string",
"description": "Which part of the latest version number to increase: major (2.0.0) for changes that need different submission data, minor (1.3.0) for new optional fields, patch (1.2.1) for fixes. Publish a template's first version as major, which makes it 1.0.0: minor would make it 0.1.0, and integrations that ask for version 1 wouldn't find it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"version",
"description",
"published_at",
"published_by"
],
"properties": {
"version": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"published_at": {
"type": "string"
},
"published_by": {
"type": [
"object",
"null"
],
"required": [
"type",
"user_id",
"external_id",
"name",
"email"
],
"properties": {
"name": {
"type": [
"string",
"null"
]
},
"type": {
"type": "string"
},
"email": {
"type": [
"string",
"null"
]
},
"user_id": {
"type": [
"string",
"null"
]
},
"external_id": {
"type": [
"string",
"null"
]
}
}
}
},
"description": "A published version of a template."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "Publish a version",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description97/100
Removes fields from a template's draft. Published versions keep them. Returns the IDs of the fields it removed. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees.
The description explains the capability, when to use it, and what to expect.
Inputs80/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
field_ids
The IDs of the fields to remove.
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
{
"type": "object",
"required": [
"template_id",
"removed_field_ids",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How many fields the draft has now."
},
"template_id": {
"type": "string",
"description": "The template's ID."
},
"removed_field_ids": {
"type": "array",
"items": {
"type": "integer",
"description": "A field's ID."
},
"description": "The IDs of the fields removed."
}
},
"description": "The fields removed."
}
Original tool metadata
{
"name": "remove_fields",
"description": "Removes fields from a template's draft. Published versions keep them. Returns the IDs of the fields it removed. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"field_ids"
],
"properties": {
"field_ids": {
"type": [
"null",
"array"
],
"items": {
"type": "integer"
},
"description": "The IDs of the fields to remove."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"template_id",
"removed_field_ids",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How many fields the draft has now."
},
"template_id": {
"type": "string",
"description": "The template's ID."
},
"removed_field_ids": {
"type": "array",
"items": {
"type": "integer",
"description": "A field's ID."
},
"description": "The IDs of the fields removed."
}
},
"description": "The fields removed."
},
"annotations": {
"title": "Remove fields",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Replaces a PDF template's PDF, or a Word template's Word document (.docx or .odt), in its draft, and waits until DocSpring has processed it. The fields stay: reimport_fields replaces a PDF template's fields with the new PDF's form fields, and a Word template adds a field for each new tag. Returns the template. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Remove repeated schema validation from descriptions; focus on meaning and usage context.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
document_url
An https:// link to the new PDF (up to 100 MB), or a Word template's new Word document (.docx or .odt, up to 50 MB). DocSpring downloads it.
Clear enough to supply this argument.
document_base64
The new PDF or Word document encoded as base64 (a data: URI works too), up to 7 MB before it's encoded. Only for a small file you can't upload: for a file on disk use cache_id from create_pdf_upload, or document_url for one on the web.
Clear enough to supply this argument.
cache_id
The fields.key of a PDF or Word document uploaded with create_pdf_upload.
Clear enough to supply this argument.
filename
The file's name, for document_base64 or cache_id.
Clear enough to supply this argument.
reimport_fields
Replace all of a PDF template's fields with the new PDF's form fields. Default false: the fields stay where they are. Not for Word templates.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Replaces a template's draft with a published version. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. So restoring a version doesn't change what submissions get: to roll back, publish the restored draft with publish_version. Changes in the draft that aren't published are lost, so it refuses while the draft has any, unless discard_draft_changes is set. Returns the template.
The description explains the capability, when to use it, and what to expect.
Inputs92/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
The published version to restore to the draft: 1.2.0, or 1 for the latest 1.x.x.
Clear enough to supply this argument.
discard_draft_changes
Restore even though the draft has changes that aren't published, which are lost. Only with the user's agreement.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description85/100
Sends an email action's email to the user only, with each field shown as its name in brackets and, for a PDF template, its blank PDF, so they can check how it looks. Returns the address it was sent to.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Input documentation gives an agent enough context to populate the arguments.
email_action_id
The email action's ID, such as tpa_Vb7nQ2xLm4Kp9RtZ3w. list_email_actions finds it.
Clear enough to supply this argument.
template_id
The template to send the test for. Needed for a template's own email action. For an account email action, it uses that template's customization. Default the template it sends for that changed most recently.
Clear enough to supply this argument.
Annotations100/100
All four behavior hints are declared.
{
"title": "Send a test email",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
Output schema69/100
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"required": [
"sent_to"
],
"properties": {
"sent_to": {
"type": "string"
}
},
"description": "A test email that was sent."
}
Original tool metadata
{
"name": "send_test_email",
"description": "Sends an email action's email to the user only, with each field shown as its name in brackets and, for a PDF template, its blank PDF, so they can check how it looks. Returns the address it was sent to.",
"inputSchema": {
"type": "object",
"required": [
"email_action_id"
],
"properties": {
"template_id": {
"type": "string",
"description": "The template to send the test for. Needed for a template's own email action. For an account email action, it uses that template's customization. Default the template it sends for that changed most recently."
},
"email_action_id": {
"type": "string",
"description": "The email action's ID, such as tpa_Vb7nQ2xLm4Kp9RtZ3w. list_email_actions finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"required": [
"sent_to"
],
"properties": {
"sent_to": {
"type": "string"
}
},
"description": "A test email that was sent."
},
"annotations": {
"title": "Send a test email",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description79/100
Changes an email action. To change an account email action for one template only, use customize_email_action. Returns the email action.
The description explains the capability, when to use it, and what to expect.
Inputs86/100
Input documentation gives an agent enough context to populate the arguments.
email_action_id
The email action's ID, such as tpa_Vb7nQ2xLm4Kp9RtZ3w. list_email_actions finds it.
Clear enough to supply this argument.
template_id
For a template's own email action, its template_id. Leave it out for an account email action.
Clear enough to supply this argument.
settings
The settings to change, by the names create_email_action takes, plus enabled (false stops it sending) and failure_notifications_enabled. Lists are replaced whole.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description93/100
Changes fields of a template's draft: their settings, names, and on a PDF template their pages or positions. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Returns the fields it changed.
The description explains the capability, when to use it, and what to expect.
Inputs88/100
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
fields
The changes (up to 1000), each with the id of the field it changes and the settings to change, by the names get_fields shows. Settings left out keep their values. A shared setting (type, required, default, title, ...) changes for every field with the same name, and renaming a field updates the conditional logic and formulas that use its old name. On a Word template, renaming a field doesn't rename the tags that use it: change those in the document (replace_template_pdf).
Remove validation rules already expressed in this field’s schema; describe its meaning and usage instead.
The title clearly communicates the tool’s action and subject. Keep it concise.
Description95/100
Replaces a page design's layout in its draft: get_template returns the current layout to change. DocSpring adds a field for each new value the layout reads, and keeps the fields it no longer reads (remove_fields removes them). A layout with problems isn't saved, and the error lists each one by its JSON path. Check how it prints with preview_template. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Returns a summary of the template.
The description explains the capability, when to use it, and what to expect.
Inputs97/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The page design's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
layout
The page design's layout, in the Page Designer layout format (https://docspring.com/docs/page-designer/layout-format/): version 1, the page (size, orientation, margins, background, watermark), an optional header and footer, and the sections that flow down the page, each with its elements (text, image, shape, line, table, chart, checkbox, form_field, qr_code, barcode and html). Its JSON Schema is https://docspring.com/schemas/page-designer/layout.v1.json. Positions and sizes are in points (72 to the inch). A text's content is rich text whose field nodes print values from the data by their Liquid expression, such as customer.name or total | currency. It replaces the whole layout: get_template returns the current one.
{
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"id",
"name",
"template_type",
"ready",
"latest_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What to do next."
},
"ready": {
"type": "boolean"
},
"template_type": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"updated_settings": {
"type": "array",
"items": {
"type": "string",
"description": "A setting's name."
},
"description": "The settings the update sent."
},
"unpublished_changes": {
"type": "string",
"description": "Whether the draft has changes that submissions don't use yet."
}
},
"description": "A template that generates PDFs from submission data."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "update_page_design",
"description": "Replaces a page design's layout in its draft: get_template returns the current layout to change. DocSpring adds a field for each new value the layout reads, and keeps the fields it no longer reads (remove_fields removes them). A layout with problems isn't saved, and the error lists each one by its JSON path. Check how it prints with preview_template. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. Returns a summary of the template.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"layout"
],
"properties": {
"layout": {
"type": "object",
"description": "The page design's layout, in the Page Designer layout format (https://docspring.com/docs/page-designer/layout-format/): version 1, the page (size, orientation, margins, background, watermark), an optional header and footer, and the sections that flow down the page, each with its elements (text, image, shape, line, table, chart, checkbox, form_field, qr_code, barcode and html). Its JSON Schema is https://docspring.com/schemas/page-designer/layout.v1.json. Positions and sizes are in points (72 to the inch). A text's content is rich text whose field nodes print values from the data by their Liquid expression, such as customer.name or total | currency. It replaces the whole layout: get_template returns the current one."
},
"template_id": {
"type": "string",
"description": "The page design's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"id",
"name",
"template_type",
"ready",
"latest_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What to do next."
},
"ready": {
"type": "boolean"
},
"template_type": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"updated_settings": {
"type": "array",
"items": {
"type": "string",
"description": "A setting's name."
},
"description": "The settings the update sent."
},
"unpublished_changes": {
"type": "string",
"description": "Whether the draft has changes that submissions don't use yet."
}
},
"description": "A template that generates PDFs from submission data."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "Update a page design",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description90/100
Changes a template's settings in its draft. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. The template's own settings are the exception: they apply to every version as soon as they're saved. They include expire_submissions, public_web_form, public_submissions, redirect_url, encrypt_pdfs, embed_domains, locked and a Word template's output_format. Returns a summary of the template.
The description explains the capability, when to use it, and what to expect.
Inputs90/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
settings
The settings to change, by the names get_template shows: name, description, html, scss, header_html, footer_html, defaults (the fields' default style), field_dependencies (conditional logic), expire_submissions and so on. Settings left out keep their values. An object or list setting (defaults, field_dependencies) is replaced whole. Fields are changed with update_fields, and a page design's layout with update_page_design.
Align the output schema with the tool’s documented result.
View output schema
{
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"id",
"name",
"template_type",
"ready",
"latest_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What to do next."
},
"ready": {
"type": "boolean"
},
"template_type": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"updated_settings": {
"type": "array",
"items": {
"type": "string",
"description": "A setting's name."
},
"description": "The settings the update sent."
},
"unpublished_changes": {
"type": "string",
"description": "Whether the draft has changes that submissions don't use yet."
}
},
"description": "A template that generates PDFs from submission data."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
}
Original tool metadata
{
"name": "update_template",
"description": "Changes a template's settings in its draft. Until a template's first publish_version, submissions use its draft. After that they use the latest published version (unless they ask for another), so changes to the draft reach them only once publish_version publishes them. Publish only when the user agrees. The template's own settings are the exception: they apply to every version as soon as they're saved. They include expire_submissions, public_web_form, public_submissions, redirect_url, encrypt_pdfs, embed_domains, locked and a Word template's output_format. Returns a summary of the template.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"settings"
],
"properties": {
"settings": {
"type": "object",
"description": "The settings to change, by the names get_template shows: name, description, html, scss, header_html, footer_html, defaults (the fields' default style), field_dependencies (conditional logic), expire_submissions and so on. Settings left out keep their values. An object or list setting (defaults, field_dependencies) is replaced whole. Fields are changed with update_fields, and a page design's layout with update_page_design."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"anyOf": [
{
"type": "object",
"required": [
"id",
"name",
"template_type",
"ready",
"latest_version"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string",
"description": "What to do next."
},
"ready": {
"type": "boolean"
},
"template_type": {
"type": "string"
},
"latest_version": {
"type": [
"string",
"null"
]
},
"updated_settings": {
"type": "array",
"items": {
"type": "string",
"description": "A setting's name."
},
"description": "The settings the update sent."
},
"unpublished_changes": {
"type": "string",
"description": "Whether the draft has changes that submissions don't use yet."
}
},
"description": "A template that generates PDFs from submission data."
},
{
"type": "object",
"required": [
"template_id",
"state",
"note"
],
"properties": {
"note": {
"type": "string",
"description": "How to wait for it again."
},
"state": {
"type": "string",
"description": "processing"
},
"template_id": {
"type": "string",
"description": "The record's ID."
}
},
"description": "The wait ran out of time: the record is still being processed."
}
]
},
"annotations": {
"title": "Update a template",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": true
}
}
The title clearly communicates the tool’s action and subject. Keep it concise.
Description89/100
Checks submission data against a template without making a PDF or saving anything: which fields are missing or have the wrong type. Returns whether the data is valid, and the errors when it isn't.
The description explains the capability, when to use it, and what to expect.
Inputs95/100
Input documentation gives an agent enough context to populate the arguments.
template_id
The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it.
Clear enough to supply this argument.
version
Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest, the version submissions use: the latest published version, or the draft while none has been published.
Clear enough to supply this argument.
data
The submission data to check, by field name, as generate_pdf takes it.
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"$defs": {
"ErrorInfo": {
"type": "object",
"required": [
"code",
"message",
"details",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/$defs/ErrorDetail"
}
},
"message": {
"type": "string"
},
"folder_id": {
"type": "string"
},
"request_id": {
"type": [
"string",
"null"
]
},
"webhook_id": {
"type": "string"
},
"template_id": {
"type": "string"
},
"submission_id": {
"type": "string"
},
"custom_file_id": {
"type": "string"
},
"combined_pdf_id": {
"type": "string"
},
"email_action_id": {
"type": "string"
},
"email_domain_id": {
"type": "string"
},
"submission_batch_id": {
"type": "string"
}
},
"description": "What went wrong."
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"pointer": {
"type": "string"
},
"parameter": {
"type": "string"
},
"submission_id": {
"type": "string"
}
},
"description": "One problem with the request, such as a missing or invalid property."
}
},
"required": [
"valid",
"template_id",
"template_version"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorInfo"
},
"valid": {
"type": "boolean"
},
"template_id": {
"type": "string"
},
"template_version": {
"type": [
"string",
"null"
]
}
},
"description": "Whether creating the submission would succeed, checked without saving it or making any files. `error` is the error that creating it would return (`validation_failed`, or `invalid_data` for data that doesn't match the template's fields), and is left out when `valid` is true."
}
Original tool metadata
{
"name": "validate_data",
"description": "Checks submission data against a template without making a PDF or saving anything: which fields are missing or have the wrong type. Returns whether the data is valid, and the errors when it isn't.",
"inputSchema": {
"type": "object",
"required": [
"template_id",
"data"
],
"properties": {
"data": {
"type": "object",
"description": "The submission data to check, by field name, as generate_pdf takes it."
},
"version": {
"type": "string",
"description": "Which version of the template: a published version (1.2.0, or 1 for the latest 1.x.x), latest or draft. Default latest, the version submissions use: the latest published version, or the draft while none has been published."
},
"template_id": {
"type": "string",
"description": "The template's ID, such as tpl_eGc5CmFbXXAH3mbBP4. list_templates finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$defs": {
"ErrorInfo": {
"type": "object",
"required": [
"code",
"message",
"details",
"request_id"
],
"properties": {
"code": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"$ref": "#/$defs/ErrorDetail"
}
},
"message": {
"type": "string"
},
"folder_id": {
"type": "string"
},
"request_id": {
"type": [
"string",
"null"
]
},
"webhook_id": {
"type": "string"
},
"template_id": {
"type": "string"
},
"submission_id": {
"type": "string"
},
"custom_file_id": {
"type": "string"
},
"combined_pdf_id": {
"type": "string"
},
"email_action_id": {
"type": "string"
},
"email_domain_id": {
"type": "string"
},
"submission_batch_id": {
"type": "string"
}
},
"description": "What went wrong."
},
"ErrorDetail": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"pointer": {
"type": "string"
},
"parameter": {
"type": "string"
},
"submission_id": {
"type": "string"
}
},
"description": "One problem with the request, such as a missing or invalid property."
}
},
"required": [
"valid",
"template_id",
"template_version"
],
"properties": {
"error": {
"$ref": "#/$defs/ErrorInfo"
},
"valid": {
"type": "boolean"
},
"template_id": {
"type": "string"
},
"template_version": {
"type": [
"string",
"null"
]
}
},
"description": "Whether creating the submission would succeed, checked without saving it or making any files. `error` is the error that creating it would return (`validation_failed`, or `invalid_data` for data that doesn't match the template's fields), and is left out when `valid` is true."
},
"annotations": {
"title": "Check submission data",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}
}
Describe the returned fields so an agent can interpret the result.
View output schema
{
"type": "object",
"$defs": {
"EmailDomainDnsRecord": {
"type": "object",
"required": [
"purpose",
"type",
"name",
"value"
],
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"value": {
"type": "string"
},
"purpose": {
"type": "string"
}
},
"description": "A DNS record to add to an email domain."
}
},
"required": [
"id",
"domain",
"state",
"dkim_state",
"mail_from_state",
"dns_records",
"dmarc_policy",
"last_error",
"verified_at",
"checked_at",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"domain": {
"type": "string"
},
"checked_at": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
},
"dkim_state": {
"type": "string"
},
"last_error": {
"type": [
"string",
"null"
]
},
"dns_records": {
"type": "array",
"items": {
"$ref": "#/$defs/EmailDomainDnsRecord"
}
},
"verified_at": {
"type": [
"string",
"null"
]
},
"dmarc_policy": {
"type": [
"string",
"null"
]
},
"mail_from_state": {
"type": "string"
}
},
"description": "A domain your email actions can send from once it's verified. Add its DNS records where you manage the domain's DNS: DocSpring checks for them every few minutes, and the domain is verified once its DKIM and DMARC records are found."
}
Original tool metadata
{
"name": "verify_email_domain",
"description": "Checks an email domain's DNS records now, instead of waiting for the next check. Returns the domain, with its state and each DNS record's.",
"inputSchema": {
"type": "object",
"required": [
"email_domain_id"
],
"properties": {
"email_domain_id": {
"type": "string",
"description": "The email domain's ID, such as edm_8Lq3tZbV2nW5xYcR7k. list_email_domains finds it."
}
},
"additionalProperties": false
},
"outputSchema": {
"type": "object",
"$defs": {
"EmailDomainDnsRecord": {
"type": "object",
"required": [
"purpose",
"type",
"name",
"value"
],
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"value": {
"type": "string"
},
"purpose": {
"type": "string"
}
},
"description": "A DNS record to add to an email domain."
}
},
"required": [
"id",
"domain",
"state",
"dkim_state",
"mail_from_state",
"dns_records",
"dmarc_policy",
"last_error",
"verified_at",
"checked_at",
"created_at"
],
"properties": {
"id": {
"type": "string"
},
"state": {
"type": "string"
},
"domain": {
"type": "string"
},
"checked_at": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
},
"dkim_state": {
"type": "string"
},
"last_error": {
"type": [
"string",
"null"
]
},
"dns_records": {
"type": "array",
"items": {
"$ref": "#/$defs/EmailDomainDnsRecord"
}
},
"verified_at": {
"type": [
"string",
"null"
]
},
"dmarc_policy": {
"type": [
"string",
"null"
]
},
"mail_from_state": {
"type": "string"
}
},
"description": "A domain your email actions can send from once it's verified. Add its DNS records where you manage the domain's DNS: DocSpring checks for them every few minutes, and the domain is verified once its DKIM and DMARC records are found."
},
"annotations": {
"title": "Verify an email domain",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}
}
Loading score analytics…
Put your MCP to the test
A few tasks worth trying with this server, chosen from its reviewed tools. These have not been run.
01List templatesLists the account's templates, 50 at a time: each one's name, type, folder, latest published version and whether it's ready.
02List foldersLists the account's template folders, 50 at a time: each one's ID, name, path (such as Clients/Acme) and parent folder.
03List submissionsLists the account's submissions, newest first, 50 at a time: each one's state, template, test or live, metadata and times.
04Get a templateGets a template: its settings, a summary of each field (name, type, description, and on a PDF template its page and position), and for the draft, whether it…
05Preview a templateShows a template's pages filled in with your data as PNG images (not a PDF), to check how an HTML, PDF or Word template or a page design prints before you pu…
Want to run these tasks against your MCP server with us?
DocSpring setup, tools, quality score, publishing readiness, and alternatives.
How do I add DocSpring to Claude, ChatGPT, or Cursor?
Add DocSpring to Claude, ChatGPT, or Cursor by connecting its remote MCP URL in each client's MCP settings. In Claude, add a custom connector. In ChatGPT, add an MCP app. In Cursor, add an MCP server under Settings. The MCP URL is https://mcp.docspring.com/mcp.
Is DocSpring MCP ready for ChatGPT and Claude?
As of November 12, 2026, DocSpring scores 94/100 on Manufact's MCP publishing checklist. The scan does not yet meet ChatGPT publishing checks and does not yet meet Claude publishing checks. Passing these checks does not guarantee marketplace approval.
How clear is DocSpring's MCP tool documentation?
As of November 12, 2026, DocSpring scores 90/100 in Manufact's review of tool titles, descriptions, input and output schemas, and behavior annotations. The review covers 57 of 57 discovered tools. The quality score measures documentation clarity; runtime behavior and marketplace readiness require separate checks.
What are the best alternatives to DocSpring?
As of November 12, 2026, alternatives to DocSpring in productivity on the Manufact MCP leaderboard include AdaptlyPost, Notion MCP, Paperpal, VantagePeers, and Date Calculator.
How can DocSpring improve its MCP documentation?
get_submission_pages is the lowest-scoring reviewed tool at 72/100. Clarify units, where to obtain this value, or conventions not already expressed in the schema. Open its review for feedback and a copyable fix prompt, then rerun the documentation review after updating your tool metadata.
Not your MCP?
Review any public or OAuth MCP server for protocol compatibility, tool documentation, and ChatGPT and Claude publishing readiness. No account required.