mirror of
https://github.com/docusealco/docuseal.git
synced 2026-08-07 23:32:07 +00:00
Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a6981185b2 | |||
| 0361fabb66 | |||
| 04e7f101be | |||
| 86d680cfdf | |||
| 7bc2152057 | |||
| 74ed9a5040 | |||
| 30115fc0dc | |||
| 8e8e5e0e29 | |||
| b58ce1b571 | |||
| df5c4e4210 | |||
| ba2e0999f1 | |||
| a1f5dd08c7 | |||
| c1123fef63 | |||
| 4dc6149530 | |||
| 1245ff2cce | |||
| 284204fd78 | |||
| f7be74eb73 | |||
| aeea619059 | |||
| ea2b7f20e7 | |||
| f40f1d25de | |||
| c04bb2d7cf | |||
| 4c1ccd65bf | |||
| 54e064b0fc | |||
| 9a8b72883c | |||
| 5d75ee2e47 | |||
| 7357fa4871 | |||
| f6850b5427 | |||
| 1e9a181e60 | |||
| 7224a1ccec | |||
| 9b935a8180 | |||
| c4a693846e | |||
| 02c7cdcd97 | |||
| 36bee92e8e | |||
| 6542804f44 | |||
| d805fd614c |
@@ -15,6 +15,7 @@ class AccountConfigsController < ApplicationController
|
||||
AccountConfig::ESIGNING_PREFERENCE_KEY,
|
||||
AccountConfig::FORM_WITH_CONFETTI_KEY,
|
||||
AccountConfig::DOWNLOAD_LINKS_AUTH_KEY,
|
||||
AccountConfig::DOWNLOAD_LINKS_EXPIRE_KEY,
|
||||
AccountConfig::FORCE_SSO_AUTH_KEY,
|
||||
AccountConfig::FLATTEN_RESULT_PDF_KEY,
|
||||
AccountConfig::ENFORCE_SIGNING_ORDER_KEY,
|
||||
|
||||
@@ -13,7 +13,7 @@ module Api
|
||||
def show
|
||||
blob_uuid, purp, exp = ApplicationRecord.signed_id_verifier.verified(params[:signed_uuid])
|
||||
|
||||
if blob_uuid.blank? || (purp.present? && purp != 'blob') || (exp && exp < Time.current.to_i)
|
||||
if blob_uuid.blank? || purp != 'blob'
|
||||
Rollbar.error('Blob not found') if defined?(Rollbar)
|
||||
|
||||
return head :not_found
|
||||
@@ -24,8 +24,9 @@ module Api
|
||||
attachment = blob.attachments.take
|
||||
|
||||
@record = attachment.record
|
||||
@record = @record.record if @record.is_a?(ActiveStorage::Attachment)
|
||||
|
||||
authorization_check!(attachment) if exp.blank?
|
||||
authorization_check!(attachment, @record, exp)
|
||||
|
||||
if request.headers['Range'].present?
|
||||
send_blob_byte_range_data blob, request.headers['Range']
|
||||
@@ -41,16 +42,22 @@ module Api
|
||||
|
||||
private
|
||||
|
||||
def authorization_check!(attachment)
|
||||
is_authorized = attachment.name.in?(%w[logo preview_images]) ||
|
||||
(current_user && attachment.record.account.id == current_user.account_id) ||
|
||||
(current_user && !Docuseal.multitenant? && current_user.role == 'superadmin') ||
|
||||
!attachment.record.account.account_configs
|
||||
.find_or_initialize_by(key: AccountConfig::DOWNLOAD_LINKS_AUTH_KEY).value
|
||||
def authorization_check!(attachment, record, exp)
|
||||
return if attachment.name == 'logo'
|
||||
return if exp.to_i >= Time.current.to_i
|
||||
return if current_user && current_ability.can?(:read, record)
|
||||
|
||||
return if is_authorized
|
||||
if exp.blank?
|
||||
configs = record.account.account_configs.where(key: [AccountConfig::DOWNLOAD_LINKS_AUTH_KEY,
|
||||
AccountConfig::DOWNLOAD_LINKS_EXPIRE_KEY])
|
||||
|
||||
Rollbar.error('Blob aunauthorized') if defined?(Rollbar)
|
||||
require_auth = configs.any? { |c| c.key == AccountConfig::DOWNLOAD_LINKS_AUTH_KEY && c.value }
|
||||
require_ttl = configs.none? { |c| c.key == AccountConfig::DOWNLOAD_LINKS_EXPIRE_KEY && c.value == false }
|
||||
|
||||
return if !require_ttl && !require_auth
|
||||
end
|
||||
|
||||
Rollbar.error('Blob unauthorized') if defined?(Rollbar)
|
||||
|
||||
raise CanCan::AccessDenied
|
||||
end
|
||||
|
||||
@@ -18,12 +18,14 @@ module Api
|
||||
field: :completed_at
|
||||
)
|
||||
|
||||
expires_at = Accounts.link_expires_at(current_account)
|
||||
|
||||
render json: {
|
||||
data: submitters.map do |s|
|
||||
{
|
||||
event_type: 'form.completed',
|
||||
timestamp: s.completed_at,
|
||||
data: Submitters::SerializeForWebhook.call(s)
|
||||
data: Submitters::SerializeForWebhook.call(s, expires_at:)
|
||||
}
|
||||
end,
|
||||
pagination: {
|
||||
|
||||
@@ -34,10 +34,12 @@ module Api
|
||||
associations: [:blob]
|
||||
).call
|
||||
|
||||
expires_at = Accounts.link_expires_at(current_account)
|
||||
|
||||
render json: {
|
||||
id: @submission.id,
|
||||
documents: documents.map do |attachment|
|
||||
{ name: attachment.filename.base, url: ActiveStorage::Blob.proxy_url(attachment.blob) }
|
||||
{ name: attachment.filename.base, url: ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:) }
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
@@ -14,16 +14,19 @@ module Api
|
||||
:created_by_user, :submission_events,
|
||||
template: :folder,
|
||||
submitters: { documents_attachments: :blob, attachments_attachments: :blob },
|
||||
audit_trail_attachment: :blob
|
||||
audit_trail_attachment: :blob,
|
||||
combined_document_attachment: :blob
|
||||
),
|
||||
field: :completed_at)
|
||||
|
||||
expires_at = Accounts.link_expires_at(current_account)
|
||||
|
||||
render json: {
|
||||
data: submissions.map do |s|
|
||||
{
|
||||
event_type: 'submission.completed',
|
||||
timestamp: s.completed_at,
|
||||
data: Submissions::SerializeForApi.call(s, s.submitters)
|
||||
data: Submissions::SerializeForApi.call(s, s.submitters, expires_at:)
|
||||
}
|
||||
end,
|
||||
pagination: {
|
||||
|
||||
@@ -18,10 +18,12 @@ module Api
|
||||
combined_document_attachment: :blob,
|
||||
audit_trail_attachment: :blob))
|
||||
|
||||
expires_at = Accounts.link_expires_at(current_account)
|
||||
|
||||
render json: {
|
||||
data: submissions.map do |s|
|
||||
Submissions::SerializeForApi.call(s, s.submitters, params,
|
||||
with_events: false, with_documents: false, with_values: false)
|
||||
with_events: false, with_documents: false, with_values: false, expires_at:)
|
||||
end,
|
||||
pagination: {
|
||||
count: submissions.size,
|
||||
@@ -41,7 +43,7 @@ module Api
|
||||
end
|
||||
|
||||
if @submission.audit_trail_attachment.blank? && submitters.all?(&:completed_at?)
|
||||
@submission.audit_trail_attachment = Submissions::GenerateAuditTrail.call(@submission)
|
||||
@submission.audit_trail_attachment = Submissions::EnsureAuditGenerated.call(@submission)
|
||||
end
|
||||
|
||||
render json: Submissions::SerializeForApi.call(@submission, submitters, params)
|
||||
@@ -182,6 +184,7 @@ module Api
|
||||
:send_email, :send_sms, :bcc_completed, :completed_redirect_url, :reply_to, :go_to_last,
|
||||
:require_phone_2fa, :expire_at, :name,
|
||||
{
|
||||
variables: {},
|
||||
message: %i[subject body],
|
||||
submitters: [[:send_email, :send_sms, :completed_redirect_url, :uuid, :name, :email, :role,
|
||||
:completed, :phone, :application_key, :external_id, :reply_to, :go_to_last,
|
||||
|
||||
@@ -14,9 +14,11 @@ module Api
|
||||
documents_attachments: :blob, attachments_attachments: :blob)
|
||||
)
|
||||
|
||||
expires_at = Accounts.link_expires_at(current_account)
|
||||
|
||||
render json: {
|
||||
data: submitters.map do |s|
|
||||
Submitters::SerializeForApi.call(s, with_template: true, with_events: true, params:)
|
||||
Submitters::SerializeForApi.call(s, with_template: true, with_events: true, params:, expires_at:)
|
||||
end,
|
||||
pagination: {
|
||||
count: submitters.size,
|
||||
|
||||
@@ -26,13 +26,15 @@ module Api
|
||||
original_template: @template,
|
||||
documents: params[:documents])
|
||||
|
||||
Templates.maybe_assign_access(cloned_template)
|
||||
|
||||
cloned_template.save!
|
||||
|
||||
WebhookUrls.enqueue_events(cloned_template, 'template.created')
|
||||
|
||||
SearchEntries.enqueue_reindex(cloned_template)
|
||||
|
||||
render json: Templates::SerializeForApi.call(cloned_template, schema_documents)
|
||||
render json: Templates::SerializeForApi.call(cloned_template, schema_documents:)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -24,13 +24,14 @@ module Api
|
||||
name: :preview_images)
|
||||
.preload(:blob)
|
||||
|
||||
expires_at = Accounts.link_expires_at(current_account)
|
||||
|
||||
render json: {
|
||||
data: templates.map do |t|
|
||||
Templates::SerializeForApi.call(
|
||||
t,
|
||||
schema_documents.select { |e| e.record_id == t.id },
|
||||
preview_image_attachments
|
||||
)
|
||||
Templates::SerializeForApi.call(t,
|
||||
schema_documents: schema_documents.select { |e| e.record_id == t.id },
|
||||
preview_image_attachments:,
|
||||
expires_at:)
|
||||
end,
|
||||
pagination: {
|
||||
count: templates.size,
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class PasswordsController < Devise::PasswordsController
|
||||
# rubocop:disable Rails/LexicallyScopedActionFilter
|
||||
skip_before_action :require_no_authentication, only: %i[edit update]
|
||||
# rubocop:enable Rails/LexicallyScopedActionFilter
|
||||
|
||||
class Current < ActiveSupport::CurrentAttributes
|
||||
attribute :user
|
||||
end
|
||||
@@ -16,4 +20,10 @@ class PasswordsController < Devise::PasswordsController
|
||||
Current.user = resource
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def after_resetting_password_path_for(_)
|
||||
new_session_path(resource_name)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -16,7 +16,7 @@ class ProfileController < ApplicationController
|
||||
end
|
||||
|
||||
def update_password
|
||||
if current_user.update(password_params)
|
||||
if current_user.update_with_password(password_params)
|
||||
bypass_sign_in(current_user)
|
||||
redirect_to settings_profile_index_path, notice: I18n.t('password_has_been_changed')
|
||||
else
|
||||
@@ -31,6 +31,6 @@ class ProfileController < ApplicationController
|
||||
end
|
||||
|
||||
def password_params
|
||||
params.require(:user).permit(:password, :password_confirmation)
|
||||
params.require(:user).permit(:password, :password_confirmation, :current_password)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class RevealAccessTokenController < ApplicationController
|
||||
def show
|
||||
authorize!(:manage, current_user.access_token)
|
||||
end
|
||||
|
||||
def create
|
||||
authorize!(:manage, current_user.access_token)
|
||||
|
||||
if current_user.valid_password?(params[:password])
|
||||
render turbo_stream: turbo_stream.replace(:access_token_container,
|
||||
partial: 'reveal_access_token/access_token',
|
||||
locals: { token: current_user.access_token.token })
|
||||
else
|
||||
render turbo_stream: turbo_stream.replace(:modal, template: 'reveal_access_token/show',
|
||||
locals: { error_message: I18n.t('wrong_password') }),
|
||||
status: :unprocessable_content
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -70,7 +70,7 @@ class SubmissionsDownloadController < ApplicationController
|
||||
return if submitter.submission.submitters.order(:completed_at).last != submitter
|
||||
|
||||
attachment = submitter.submission.combined_document_attachment
|
||||
attachment ||= Submissions::GenerateCombinedAttachment.call(submitter)
|
||||
attachment ||= Submissions::EnsureCombinedGenerated.call(submitter)
|
||||
|
||||
filename_format = AccountConfig.find_or_initialize_by(account_id: submitter.account_id,
|
||||
key: AccountConfig::DOCUMENT_FILENAME_FORMAT_KEY)&.value
|
||||
|
||||
@@ -10,11 +10,16 @@ class SubmissionsExportController < ApplicationController
|
||||
attachments_attachments: :blob })
|
||||
.order(id: :asc)
|
||||
|
||||
submissions = Submissions.search(current_user, submissions, params[:q], search_values: true)
|
||||
submissions = Submissions::Filter.call(submissions, current_user, params)
|
||||
|
||||
expires_at = Accounts.link_expires_at(current_account)
|
||||
|
||||
if params[:format] == 'csv'
|
||||
send_data Submissions::GenerateExportFiles.call(submissions, format: params[:format]),
|
||||
send_data Submissions::GenerateExportFiles.call(submissions, format: params[:format], expires_at:),
|
||||
filename: "#{@template.name}.csv"
|
||||
elsif params[:format] == 'xlsx'
|
||||
send_data Submissions::GenerateExportFiles.call(submissions, format: params[:format]),
|
||||
send_data Submissions::GenerateExportFiles.call(submissions, format: params[:format], expires_at:),
|
||||
filename: "#{@template.name}.xlsx"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -17,6 +17,8 @@ class TemplatesCloneAndReplaceController < ApplicationController
|
||||
|
||||
documents = Templates::ReplaceAttachments.call(cloned_template, params, extract_fields: true)
|
||||
|
||||
Templates.maybe_assign_access(cloned_template)
|
||||
|
||||
cloned_template.save!
|
||||
|
||||
Templates::CloneAttachments.call(template: cloned_template, original_template: @template,
|
||||
|
||||
@@ -69,6 +69,8 @@ class TemplatesController < ApplicationController
|
||||
@template.account = current_account
|
||||
end
|
||||
|
||||
Templates.maybe_assign_access(@template)
|
||||
|
||||
if @template.save
|
||||
Templates::CloneAttachments.call(template: @template, original_template: @base_template) if @base_template
|
||||
|
||||
|
||||
@@ -46,6 +46,8 @@ class TemplatesUploadsController < ApplicationController
|
||||
template.folder = TemplateFolders.find_or_create_by_name(current_user, params[:folder_name])
|
||||
template.name = File.basename((url_params || params)[:files].first.original_filename, '.*')
|
||||
|
||||
Templates.maybe_assign_access(template)
|
||||
|
||||
template.save!
|
||||
|
||||
template
|
||||
|
||||
@@ -30,6 +30,7 @@ class UsersController < ApplicationController
|
||||
return render turbo_stream: turbo_stream.replace(:modal, template: 'users/new'), status: :unprocessable_content
|
||||
end
|
||||
|
||||
@user.password = SecureRandom.hex if @user.password.blank?
|
||||
@user.role = User::ADMIN_ROLE unless role_valid?(@user.role)
|
||||
|
||||
if @user.save
|
||||
@@ -54,7 +55,7 @@ class UsersController < ApplicationController
|
||||
@user.account = account
|
||||
end
|
||||
|
||||
if @user.update(attrs.except(current_user == @user ? :role : nil))
|
||||
if @user.update(attrs.except(*(current_user == @user ? %i[password otp_required_for_login role] : %i[password])))
|
||||
redirect_back fallback_location: settings_users_path, notice: I18n.t('user_has_been_updated')
|
||||
else
|
||||
render turbo_stream: turbo_stream.replace(:modal, template: 'users/edit'), status: :unprocessable_content
|
||||
@@ -83,7 +84,7 @@ class UsersController < ApplicationController
|
||||
|
||||
def user_params
|
||||
if params.key?(:user)
|
||||
permitted_params = %i[email first_name last_name password archived_at]
|
||||
permitted_params = %i[email first_name last_name password archived_at otp_required_for_login]
|
||||
|
||||
permitted_params << :role if role_valid?(params.dig(:user, :role))
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class UsersSendResetPasswordController < ApplicationController
|
||||
load_and_authorize_resource :user
|
||||
|
||||
LIMIT_DURATION = 10.minutes
|
||||
|
||||
def update
|
||||
authorize!(:manage, @user)
|
||||
|
||||
if @user.reset_password_sent_at && @user.reset_password_sent_at > LIMIT_DURATION.ago
|
||||
redirect_back fallback_location: settings_users_path, notice: I18n.t('email_has_been_sent_already')
|
||||
else
|
||||
@user.send_reset_password_instructions
|
||||
|
||||
redirect_back fallback_location: settings_users_path,
|
||||
notice: I18n.t('an_email_with_password_reset_instructions_has_been_sent')
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1015,7 +1015,11 @@ export default {
|
||||
const aArea = (fieldAreasIndex[aField.uuid] ||= [...(aField.areas || [])].sort(sortArea)[0])
|
||||
const bArea = (fieldAreasIndex[bField.uuid] ||= [...(bField.areas || [])].sort(sortArea)[0])
|
||||
|
||||
return sortArea(aArea, bArea)
|
||||
if (aArea && bArea) {
|
||||
return sortArea(aArea, bArea)
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,15 @@ export default {
|
||||
return ['UL', 'I', 'EM', 'B', 'STRONG', 'P']
|
||||
},
|
||||
dom () {
|
||||
const text = this.string.replace(/(?<!\(\s*)(https?:\/\/[^\s)]+)(?!\s*\))/g, (url) => `[${url}](${url})`)
|
||||
const linkParts = this.string.split(/(https?:\/\/[^\s)]+)/g)
|
||||
|
||||
const text = linkParts.map((part, index) => {
|
||||
if (part.match(/^https?:\/\//) && !linkParts[index - 1]?.match(/\(\s*$/) && !linkParts[index + 1]?.match(/^\s*\)/)) {
|
||||
return `[${part}](${part})`
|
||||
} else {
|
||||
return part
|
||||
}
|
||||
}).join('')
|
||||
|
||||
return new DOMParser().parseFromString(snarkdown(text.replace(/\n/g, '<br>')), 'text/html')
|
||||
}
|
||||
|
||||
@@ -1265,24 +1265,31 @@ export default {
|
||||
if (!field.areas.length) {
|
||||
this.template.fields.splice(this.template.fields.indexOf(field), 1)
|
||||
|
||||
this.template.fields.forEach((f) => {
|
||||
(f.conditions || []).forEach((c) => {
|
||||
this.removeFieldConditions(field)
|
||||
}
|
||||
|
||||
this.save()
|
||||
},
|
||||
removeFieldConditions (field) {
|
||||
this.template.fields.forEach((f) => {
|
||||
if (f.conditions) {
|
||||
f.conditions.forEach((c) => {
|
||||
if (c.field_uuid === field.uuid) {
|
||||
f.conditions.splice(f.conditions.indexOf(c), 1)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
this.template.schema.forEach((item) => {
|
||||
(item.conditions || []).forEach((c) => {
|
||||
this.template.schema.forEach((item) => {
|
||||
if (item.conditions) {
|
||||
item.conditions.forEach((c) => {
|
||||
if (c.field_uuid === field.uuid) {
|
||||
item.conditions.splice(item.conditions.indexOf(c), 1)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
this.save()
|
||||
}
|
||||
})
|
||||
},
|
||||
pasteField () {
|
||||
const field = this.template.fields.find((f) => f.areas?.includes(this.copiedArea))
|
||||
@@ -1715,8 +1722,15 @@ export default {
|
||||
})
|
||||
})
|
||||
|
||||
this.template.fields =
|
||||
this.template.fields.filter((f) => !removedFieldUuids.includes(f.uuid) || f.areas?.length)
|
||||
this.template.fields = this.template.fields.reduce((acc, f) => {
|
||||
if (removedFieldUuids.includes(f.uuid) && !f.areas?.length) {
|
||||
this.removeFieldConditions(f)
|
||||
} else {
|
||||
acc.push(f)
|
||||
}
|
||||
|
||||
return acc
|
||||
}, [])
|
||||
|
||||
this.save()
|
||||
}
|
||||
|
||||
@@ -14,10 +14,10 @@ class ProcessSubmitterCompletionJob
|
||||
|
||||
if is_all_completed && submitter.completed_at == submitter.submission.submitters.maximum(:completed_at)
|
||||
if submitter.submission.account.account_configs.exists?(key: AccountConfig::COMBINE_PDF_RESULT_KEY, value: true)
|
||||
Submissions::GenerateCombinedAttachment.call(submitter)
|
||||
Submissions::EnsureCombinedGenerated.call(submitter)
|
||||
end
|
||||
|
||||
Submissions::GenerateAuditTrail.call(submitter.submission)
|
||||
Submissions::EnsureAuditGenerated.call(submitter.submission)
|
||||
|
||||
enqueue_completed_emails(submitter)
|
||||
end
|
||||
@@ -38,12 +38,19 @@ class ProcessSubmitterCompletionJob
|
||||
|
||||
submission = submitter.submission
|
||||
|
||||
complete_verification_events, sms_events =
|
||||
submitter.submission_events.where(event_type: %i[send_sms send_2fa_sms complete_verification])
|
||||
.partition { |e| e.event_type == 'complete_verification' }
|
||||
|
||||
complete_verification_event = complete_verification_events.first
|
||||
|
||||
completed_submitter.assign_attributes(
|
||||
submission_id: submitter.submission_id,
|
||||
account_id: submission.account_id,
|
||||
template_id: submission.template_id,
|
||||
source: submission.source,
|
||||
sms_count: submitter.submission_events.where(event_type: %w[send_sms send_2fa_sms]).count,
|
||||
sms_count: sms_events.sum { |e| e.data['segments'] || 1 },
|
||||
verification_method: complete_verification_event&.data&.dig('method'),
|
||||
completed_at: submitter.completed_at
|
||||
)
|
||||
|
||||
|
||||
@@ -38,9 +38,11 @@ class AccountConfig < ApplicationRecord
|
||||
FORM_PREFILL_SIGNATURE_KEY = 'form_prefill_signature'
|
||||
ESIGNING_PREFERENCE_KEY = 'esigning_preference'
|
||||
DOWNLOAD_LINKS_AUTH_KEY = 'download_links_auth'
|
||||
DOWNLOAD_LINKS_EXPIRE_KEY = 'download_links_expire'
|
||||
FORCE_SSO_AUTH_KEY = 'force_sso_auth'
|
||||
FLATTEN_RESULT_PDF_KEY = 'flatten_result_pdf'
|
||||
WITH_SIGNATURE_ID = 'with_signature_id'
|
||||
WITH_FILE_LINKS_KEY = 'with_file_links'
|
||||
WITH_SIGNATURE_ID_REASON_KEY = 'with_signature_id_reason'
|
||||
WITH_AUDIT_VALUES_KEY = 'with_audit_values'
|
||||
WITH_SUBMITTER_TIMEZONE_KEY = 'with_submitter_timezone'
|
||||
|
||||
@@ -4,16 +4,17 @@
|
||||
#
|
||||
# Table name: completed_submitters
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# completed_at :datetime not null
|
||||
# sms_count :integer not null
|
||||
# source :string not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# account_id :bigint not null
|
||||
# submission_id :bigint not null
|
||||
# submitter_id :bigint not null
|
||||
# template_id :bigint
|
||||
# id :bigint not null, primary key
|
||||
# completed_at :datetime not null
|
||||
# sms_count :integer not null
|
||||
# source :string not null
|
||||
# verification_method :string
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# account_id :bigint not null
|
||||
# submission_id :bigint not null
|
||||
# submitter_id :bigint not null
|
||||
# template_id :bigint
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
@@ -29,5 +30,5 @@ class CompletedSubmitter < ApplicationRecord
|
||||
has_many :completed_documents, dependent: :destroy,
|
||||
primary_key: :submitter_id,
|
||||
foreign_key: :submitter_id,
|
||||
inverse_of: :submitter
|
||||
inverse_of: :completed_submitter
|
||||
end
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: lock_events
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# event_name :string not null
|
||||
# key :string not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_lock_events_on_event_name_and_key (event_name,key) UNIQUE WHERE ((event_name)::text = ANY ((ARRAY['start'::character varying, 'complete'::character varying])::text[]))
|
||||
# index_lock_events_on_key (key)
|
||||
#
|
||||
class LockEvent < ApplicationRecord
|
||||
enum :event_name, {
|
||||
complete: 'complete',
|
||||
fail: 'fail',
|
||||
start: 'start',
|
||||
retry: 'retry'
|
||||
}, scope: false
|
||||
end
|
||||
@@ -15,6 +15,8 @@
|
||||
# template_fields :text
|
||||
# template_schema :text
|
||||
# template_submitters :text
|
||||
# variables :text
|
||||
# variables_schema :text
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# account_id :bigint not null
|
||||
@@ -50,6 +52,8 @@ class Submission < ApplicationRecord
|
||||
serialize :template_fields, coder: JSON
|
||||
serialize :template_schema, coder: JSON
|
||||
serialize :template_submitters, coder: JSON
|
||||
serialize :variables_schema, coder: JSON
|
||||
serialize :variables, coder: JSON
|
||||
serialize :preferences, coder: JSON
|
||||
|
||||
attribute :source, :string, default: 'link'
|
||||
@@ -114,16 +118,16 @@ class Submission < ApplicationRecord
|
||||
@fields_uuid_index ||= (template_fields || template.fields).index_by { |f| f['uuid'] }
|
||||
end
|
||||
|
||||
def audit_trail_url
|
||||
def audit_trail_url(expires_at: nil)
|
||||
return if audit_trail.blank?
|
||||
|
||||
ActiveStorage::Blob.proxy_url(audit_trail.blob)
|
||||
ActiveStorage::Blob.proxy_url(audit_trail.blob, expires_at:)
|
||||
end
|
||||
alias audit_log_url audit_trail_url
|
||||
|
||||
def combined_document_url
|
||||
def combined_document_url(expires_at: nil)
|
||||
return if combined_document.blank?
|
||||
|
||||
ActiveStorage::Blob.proxy_url(combined_document.blob)
|
||||
ActiveStorage::Blob.proxy_url(combined_document.blob, expires_at:)
|
||||
end
|
||||
end
|
||||
|
||||
+18
-16
@@ -4,22 +4,23 @@
|
||||
#
|
||||
# Table name: templates
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# archived_at :datetime
|
||||
# fields :text not null
|
||||
# name :string not null
|
||||
# preferences :text not null
|
||||
# schema :text not null
|
||||
# shared_link :boolean default(FALSE), not null
|
||||
# slug :string not null
|
||||
# source :text not null
|
||||
# submitters :text not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# account_id :bigint not null
|
||||
# author_id :bigint not null
|
||||
# external_id :string
|
||||
# folder_id :bigint not null
|
||||
# id :bigint not null, primary key
|
||||
# archived_at :datetime
|
||||
# fields :text not null
|
||||
# name :string not null
|
||||
# preferences :text not null
|
||||
# schema :text not null
|
||||
# shared_link :boolean default(FALSE), not null
|
||||
# slug :string not null
|
||||
# source :text not null
|
||||
# submitters :text not null
|
||||
# variables_schema :text
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# account_id :bigint not null
|
||||
# author_id :bigint not null
|
||||
# external_id :string
|
||||
# folder_id :bigint not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
@@ -57,6 +58,7 @@ class Template < ApplicationRecord
|
||||
|
||||
serialize :preferences, coder: JSON
|
||||
serialize :fields, coder: JSON
|
||||
serialize :variables_schema, coder: JSON
|
||||
serialize :schema, coder: JSON
|
||||
serialize :submitters, coder: JSON
|
||||
|
||||
|
||||
@@ -130,6 +130,18 @@
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% account_config = AccountConfig.find_or_initialize_by(account: current_account, key: AccountConfig::DOWNLOAD_LINKS_EXPIRE_KEY) %>
|
||||
<% if can?(:manage, account_config) %>
|
||||
<%= form_for account_config, url: account_configs_path, method: :post do |f| %>
|
||||
<%= f.hidden_field :key %>
|
||||
<div class="flex items-center justify-between py-2.5">
|
||||
<span>
|
||||
<%= t('expirable_file_download_links') %>
|
||||
</span>
|
||||
<%= f.check_box :value, class: 'toggle', checked: account_config.value != false, onchange: 'this.form.requestSubmit()' %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% account_config = AccountConfig.find_or_initialize_by(account: current_account, key: AccountConfig::DOWNLOAD_LINKS_AUTH_KEY) %>
|
||||
<% if can?(:manage, account_config) %>
|
||||
<%= form_for account_config, url: account_configs_path, method: :post do |f| %>
|
||||
|
||||
@@ -11,10 +11,21 @@
|
||||
<div class="flex flex-col md:flex-row gap-4">
|
||||
<div class="flex w-full space-x-4">
|
||||
<% token = current_user.access_token.token %>
|
||||
<masked-input class="block w-full" data-token="<%= token %>">
|
||||
<input id="api_key" type="text" value="<%= token.sub(token[5..], '*' * token[5..].size) %>" class="input font-mono input-bordered w-full" autocomplete="off" readonly>
|
||||
</masked-input>
|
||||
<%= render 'shared/clipboard_copy', icon: 'copy', text: token, class: 'base-button', icon_class: 'w-6 h-6 text-white', copy_title: t('copy'), copied_title: t('copied') %>
|
||||
<% obscured_token = current_user.access_token.token.sub(token[5..], '*' * token[5..].size) %>
|
||||
<% if current_account.testing? %>
|
||||
<masked-input class="block w-full" data-token="<%= token %>">
|
||||
<input id="api_key" type="text" value="<%= obscured_token %>" class="input font-mono input-bordered w-full" autocomplete="off" readonly>
|
||||
</masked-input>
|
||||
<%= render 'shared/clipboard_copy', icon: 'copy', text: token, class: 'base-button', icon_class: 'w-6 h-6 text-white', copy_title: t('copy'), copied_title: t('copied') %>
|
||||
<% else %>
|
||||
<a id="access_token_container" href="<%= settings_reveal_access_token_path %>" data-turbo-frame="modal" class="flex w-full space-x-4">
|
||||
<input id="api_key" type="text" value="<%= obscured_token %>" class="input font-mono input-bordered w-full" autocomplete="off" readonly>
|
||||
<div class="base-button">
|
||||
<%= svg_icon('copy', class: 'w-6 h-6 text-white') %>
|
||||
<span class="hidden md:inline"><%= t('copy') %></span>
|
||||
</div>
|
||||
</a>
|
||||
<% end %>
|
||||
</div>
|
||||
<%= button_to button_title(title: t('rotate'), disabled_with: t('rotate'), icon: svg_icon('reload', class: 'w-6 h-6')), settings_api_index_path, class: 'white-button w-full', data: { turbo_confirm: t('remove_existing_api_token_and_generated_a_new_one_are_you_sure_') } %>
|
||||
</div>
|
||||
|
||||
@@ -2,15 +2,22 @@
|
||||
<h1 class="text-4xl font-bold text-center mt-8">
|
||||
<%= t('sign_in') %>
|
||||
</h1>
|
||||
<%= form_for(resource, as: resource_name, html: { class: 'space-y-6' }, data: { turbo: params[:redir].blank? }, url: session_path(resource_name)) do |f| %>
|
||||
<%= f.hidden_field :email %>
|
||||
<%= f.hidden_field :password %>
|
||||
<% if params[:redir].present? %>
|
||||
<%= hidden_field_tag :redir, params[:redir] %>
|
||||
<% end %>
|
||||
<%= render 'otp_form', **local_assigns %>
|
||||
<div class="form-control">
|
||||
<%= f.button button_title(title: t('sign_in'), disabled_with: t('signing_in')), class: 'base-button' %>
|
||||
<% if local_assigns[:access_error].present? %>
|
||||
<div class="alert mt-6">
|
||||
<%= svg_icon('x_circle', class: 'w-6 h-6 text-red-500') %>
|
||||
<span><%= local_assigns[:access_error] %></span>
|
||||
</div>
|
||||
<% else %>
|
||||
<%= form_for(resource, as: resource_name, html: { class: 'space-y-6' }, data: { turbo: params[:redir].blank? }, url: session_path(resource_name)) do |f| %>
|
||||
<%= f.hidden_field :email %>
|
||||
<%= f.hidden_field :password %>
|
||||
<% if params[:redir].present? %>
|
||||
<%= hidden_field_tag :redir, params[:redir] %>
|
||||
<% end %>
|
||||
<%= render 'otp_form', **local_assigns %>
|
||||
<div class="form-control">
|
||||
<%= f.button button_title(title: t('sign_in'), disabled_with: t('signing_in')), class: 'base-button' %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
@@ -54,19 +54,29 @@
|
||||
<p class="text-2xl font-bold mt-8 mb-4">
|
||||
<%= t('change_password') %>
|
||||
</p>
|
||||
<%= form_for current_user, url: update_password_settings_profile_index_path, method: :patch, html: { autocomplete: 'off', class: 'space-y-4' } do |f| %>
|
||||
<div class="form-control">
|
||||
<%= f.label :password, t('new_password'), class: 'label' %>
|
||||
<%= f.password_field :password, autocomplete: 'off', class: 'base-input' %>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<%= f.label :password_confirmation, t('confirm_password'), class: 'label' %>
|
||||
<%= f.password_field :password_confirmation, autocomplete: 'off', class: 'base-input' %>
|
||||
</div>
|
||||
<div class="form-control pt-2">
|
||||
<%= f.button button_title(title: t('update'), disabled_with: t('updating')), class: 'base-button' %>
|
||||
<%= form_for current_user, url: update_password_settings_profile_index_path, method: :patch, html: { autocomplete: 'off' } do |f| %>
|
||||
<%= f.label :password, t('new_password'), class: 'label' %>
|
||||
<%= f.password_field :password, autocomplete: 'off', class: 'base-input peer w-full', required: true %>
|
||||
<div class="<%= 'peer-invalid:hidden' if current_user.errors.blank? %> space-y-4 mt-4">
|
||||
<div class="form-control">
|
||||
<%= f.label :password_confirmation, t('confirm_password'), class: 'label' %>
|
||||
<%= f.password_field :password_confirmation, autocomplete: 'off', class: 'base-input' %>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<%= f.label :current_password, t('current_password'), class: 'label' %>
|
||||
<%= f.password_field :current_password, autocomplete: 'current-password', class: 'base-input' %>
|
||||
<% if Accounts.can_send_emails?(current_account) %>
|
||||
<span class="label-text-alt mt-1">
|
||||
<%= t('dont_remember_your_current_password_click_here_to_reset_it_html') %>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<%= f.button button_title(title: t('update'), disabled_with: t('updating')), class: 'base-button' %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= button_to nil, user_send_reset_password_path(current_user), id: 'resend_password_button', method: :put, class: 'hidden', data: { turbo_confirm: t('are_you_sure_') } %>
|
||||
<p class="text-2xl font-bold mt-8 mb-4">
|
||||
<%= t('two_factor_authentication') %>
|
||||
</p>
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
<input id="api_key" type="text" value="<%= token %>" class="input font-mono input-bordered w-full" autocomplete="off" readonly>
|
||||
<%= render 'shared/clipboard_copy', icon: 'copy', text: token, class: 'base-button', icon_class: 'w-6 h-6 text-white', copy_title: t('copy'), copied_title: t('copied') %>
|
||||
@@ -0,0 +1,14 @@
|
||||
<%= render 'shared/turbo_modal', title: t('reveal_api_key') do %>
|
||||
<%= form_tag settings_reveal_access_token_path, enctype: 'multipart/form-data', data: { turbo_frame: :_top } do %>
|
||||
<div class="form-control">
|
||||
<%= label_tag :password, t('enter_your_password_to_reveal_the_api_key'), class: 'label' %>
|
||||
<%= password_field_tag :password, nil, class: 'base-input', autocomplete: 'current-password', required: true, autofocus: true, placeholder: t('password') %>
|
||||
<% if local_assigns[:error_message].present? %>
|
||||
<span class="label-text-alt text-red-400 mt-1"><%= local_assigns[:error_message] %></span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="form-control mt-4">
|
||||
<%= submit_tag t('submit'), class: 'base-button' %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
@@ -56,6 +56,8 @@
|
||||
<%= link_to 'API', settings_api_index_path, class: 'text-base hover:bg-base-300' %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if Docuseal.demo? || !Docuseal.multitenant? || (current_user != true_user && !current_account.testing?) %>
|
||||
<% if can?(:read, WebhookUrl) %>
|
||||
<li>
|
||||
<%= link_to 'Webhooks', settings_webhooks_path, class: 'text-base hover:bg-base-300' %>
|
||||
@@ -70,7 +72,7 @@
|
||||
<% end %>
|
||||
</li>
|
||||
<% end %>
|
||||
<% if !Docuseal.demo? && can?(:manage, EncryptedConfig) && (current_user != true_user || !current_account.testing?) %>
|
||||
<% if !Docuseal.demo? && can?(:manage, EncryptedConfig) && (current_user == true_user || current_account.testing?) %>
|
||||
<li>
|
||||
<%= link_to Docuseal.multitenant? ? console_redirect_index_path(redir: "#{Docuseal::CONSOLE_URL}#{'/test' if current_account.testing?}/api") : "#{Docuseal::CONSOLE_URL}/on_premises", class: 'text-base hover:bg-base-300', data: { prefetch: false } do %>
|
||||
<% if Docuseal.multitenant? %> API <% else %> <%= t('console') %> <% end %>
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
</div>
|
||||
<%= form_for '', url: start_form_path(@template.slug), method: :put, html: { class: 'space-y-4', id: 'code_form' } do |f| %>
|
||||
<div dir="auto" class="form-control !mt-0">
|
||||
<%= f.hidden_field 'resubmit', value: params[:resubmit] %>
|
||||
<%= f.hidden_field 'submitter[name]', value: params[:name] || @submitter&.name %>
|
||||
<%= f.hidden_field 'submitter[email]', value: params[:email] || @submitter&.email %>
|
||||
<%= f.hidden_field 'submitter[phone]', value: params[:phone] || @submitter&.phone %>
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
<%= render 'submissions/annotation', annot: %>
|
||||
<% end %>
|
||||
<% fields_index.dig(document.uuid, index)&.each do |(area, field)| %>
|
||||
<% value = values[field['uuid']].presence || (field['default_value'] != '{{date}}' && field['readonly'] == true && field['default_value'].present? ? Submitters::SubmitValues.template_default_value_for_submitter(field['default_value'], @submission.submitters.find { |e| e.uuid == field['submitter_uuid'] }, with_time: false) : nil) %>
|
||||
<% value = values[field['uuid']].presence || (field['default_value'] != '{{date}}' && field['readonly'] == true && field['conditions'].blank? && field['default_value'].present? ? Submitters::SubmitValues.template_default_value_for_submitter(field['default_value'], @submission.submitters.find { |e| e.uuid == field['submitter_uuid'] }, with_time: false) : nil) %>
|
||||
<% value ||= field['default_value'] if field['type'] == 'heading' %>
|
||||
<% next if value.blank? %>
|
||||
<% submitter = submitters_index[field['submitter_uuid']] %>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<% filter_params = params.permit(:q, *Submissions::Filter::ALLOWED_PARAMS) %>
|
||||
<%= render 'shared/turbo_modal', title: t('export'), close_after_submit: false do %>
|
||||
<div class="space-y-2">
|
||||
<%= button_to template_submissions_export_index_path(@template), params: { format: :xlsx }, method: :get, data: { turbo_frame: :_top } do %>
|
||||
<%= button_to template_submissions_export_index_path(@template), params: { format: :xlsx, **filter_params }, method: :get, data: { turbo_frame: :_top } do %>
|
||||
<div class="flex items-center p-4 text-left rounded-2xl border border-neutral-300 hover:cursor-pointer hover:bg-neutral hover:text-gray-300">
|
||||
<div class="enabled">
|
||||
<%= svg_icon('download', class: 'w-12 h-12 stroke-2 mr-2') %>
|
||||
@@ -14,7 +15,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= button_to template_submissions_export_index_path(@template), params: { format: :csv }, method: :get, data: { turbo_frame: :_top } do %>
|
||||
<%= button_to template_submissions_export_index_path(@template), params: { format: :csv, **filter_params }, method: :get, data: { turbo_frame: :_top } do %>
|
||||
<div class="flex items-center text-left p-4 rounded-2xl border border-neutral-300 hover:cursor-pointer hover:bg-neutral hover:text-gray-300">
|
||||
<div class="enabled">
|
||||
<%= svg_icon('download', class: 'w-12 h-12 stroke-2 mr-2') %>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
<% if params[:q].present? || params[:status].present? || filter_params.present? || @pagy.pages > 1 %>
|
||||
<%= render 'shared/search_input', title_selector: 'h2' %>
|
||||
<% end %>
|
||||
<%= link_to new_template_submissions_export_path(@template), class: 'hidden md:flex btn btn-ghost text-base', data: { turbo_frame: 'modal' } do %>
|
||||
<%= link_to new_template_submissions_export_path(@template, params.permit(:q, *Submissions::Filter::ALLOWED_PARAMS)), class: 'hidden md:flex btn btn-ghost text-base', data: { turbo_frame: 'modal' } do %>
|
||||
<%= svg_icon('download', class: 'w-6 h-6 stroke-2') %>
|
||||
<span><%= t('export') %></span>
|
||||
<% end %>
|
||||
|
||||
@@ -1,22 +1,37 @@
|
||||
<%= form_for user, html: { class: 'space-y-4' }, data: { turbo_frame: :_top } do |f| %>
|
||||
<div class="space-y-2">
|
||||
<div class="form-control">
|
||||
<%= f.label :first_name, t('first_name'), class: 'label' %>
|
||||
<%= f.text_field :first_name, required: true, class: 'base-input', dir: 'auto' %>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<%= f.label :last_name, t('last_name'), class: 'label' %>
|
||||
<%= f.text_field :last_name, required: true, class: 'base-input', dir: 'auto' %>
|
||||
<div class="flex space-x-4">
|
||||
<div class="w-full">
|
||||
<%= f.label :first_name, t('first_name'), class: 'label' %>
|
||||
<%= f.text_field :first_name, required: true, class: 'base-input w-full', dir: 'auto' %>
|
||||
</div>
|
||||
<div class="w-full">
|
||||
<%= f.label :last_name, t('last_name'), class: 'label' %>
|
||||
<%= f.text_field :last_name, required: true, class: 'base-input w-full', dir: 'auto' %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<%= f.label :email, t('email'), class: 'label' %>
|
||||
<%= f.email_field :email, required: true, class: 'base-input' %>
|
||||
<% if user.persisted? && Accounts.can_send_emails?(current_account) %>
|
||||
<span class="label-text-alt mt-2 mx-1">
|
||||
<%= t('click_here_to_send_a_reset_password_email_html') %>
|
||||
</span>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<%= f.label :password, t('password'), class: 'label' %>
|
||||
<%= f.password_field :password, required: user.new_record?, class: 'base-input' %>
|
||||
</div>
|
||||
<% if user.new_record? && !Docuseal.multitenant? %>
|
||||
<div class="form-control">
|
||||
<%= f.label :password, t('password'), class: 'label' %>
|
||||
<%= f.password_field :password, class: 'base-input' %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% if f.object != current_user %>
|
||||
<% if user.otp_required_for_login %>
|
||||
<div class="form-control">
|
||||
<%= f.label :otp_required_for_login, t('two_factor_authentication'), class: 'label' %>
|
||||
<%= f.select :otp_required_for_login, [[t('enabled'), true], [t('disabled'), false]], { include_blank: false }, class: 'base-select' %>
|
||||
</div>
|
||||
<% end %>
|
||||
<%= render 'role_select', f: %>
|
||||
<% end %>
|
||||
<% if local_assigns[:extra_fields_html].present? %>
|
||||
@@ -27,3 +42,6 @@
|
||||
<%= f.button button_title, class: 'base-button' %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% if user.persisted? %>
|
||||
<%= button_to nil, user_send_reset_password_path(user), id: 'resend_password_button', method: :put, class: 'hidden', data: { turbo_confirm: t('are_you_sure_'), turbo_frame: :_top } %>
|
||||
<% end %>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="flex flex-col gap-2 md:flex-row md:justify-between md:items-center mb-4">
|
||||
<h1 class="text-4xl font-bold">Webhook</h1>
|
||||
<div class="flex flex-col gap-2 md:flex-row md:justify-between md:items-center">
|
||||
<% if params[:action] == 'index' %>
|
||||
<% if params[:action] == 'index' && (current_user == true_user || current_account.testing?) %>
|
||||
<%= render 'shared/test_mode_toggle' %>
|
||||
<% end %>
|
||||
<% if @webhook_url.persisted? && params[:action] == 'index' %>
|
||||
@@ -84,7 +84,7 @@
|
||||
<h2 id="log" class="text-3xl font-bold"><%= t('events_log') %></h2>
|
||||
<div class="tabs border-b mt-4">
|
||||
<%= link_to t('all'), url_for(params.to_unsafe_h.except(:status)), style: 'margin-bottom: -1px', class: "tab h-10 text-base #{params[:status].blank? ? 'tab-active tab-bordered' : 'pb-[3px]'}" %>
|
||||
<%= link_to t('successed'), url_for(params.to_unsafe_h.merge(status: 'success')), style: 'margin-bottom: -1px', class: "tab h-10 text-base #{params[:status] == 'success' ? 'tab-active tab-bordered' : 'pb-[3px]'}" %>
|
||||
<%= link_to t('succeeded'), url_for(params.to_unsafe_h.merge(status: 'success')), style: 'margin-bottom: -1px', class: "tab h-10 text-base #{params[:status] == 'success' ? 'tab-active tab-bordered' : 'pb-[3px]'}" %>
|
||||
<%= link_to t('failed'), url_for(params.to_unsafe_h.merge(status: 'error')), style: 'margin-bottom: -1px', class: "tab h-10 text-base #{params[:status] == 'error' ? 'tab-active tab-bordered' : 'pb-[3px]'}" %>
|
||||
</div>
|
||||
<% if @webhook_events.present? %>
|
||||
|
||||
+116
-7
@@ -24,8 +24,12 @@ en: &en
|
||||
thanks: Thanks
|
||||
private: Private
|
||||
select: Select
|
||||
enabled: Enabled
|
||||
disabled: Disabled
|
||||
party: Party
|
||||
click_here_to_send_a_reset_password_email_html: '<label class="link" for="resend_password_button">Click here</label> to send a reset password email.'
|
||||
edit_order: Edit Order
|
||||
expirable_file_download_links: Expirable file download links
|
||||
invite_form_fields: Invite form fields
|
||||
default_parties: Default parties
|
||||
authenticate_embedded_form_preview_with_token: Authenticate embedded form preview with token
|
||||
@@ -36,13 +40,14 @@ en: &en
|
||||
bcc_recipients: BCC recipients
|
||||
resend_pending: Re-send pending
|
||||
always_enforce_signing_order: Always enforce the signing order
|
||||
create_templates_with_private_access_by_default: Create templates with private access by default
|
||||
ensure_unique_recipients: Ensure unique recipients
|
||||
edit_per_party: Edit per party
|
||||
reply_to: Reply to
|
||||
pending_by_me: Pending by me
|
||||
partially_completed: Partially completed
|
||||
require_phone_2fa_to_open: Require phone 2FA to open
|
||||
the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: The sender has requested a two factor authentication via one time password sent to your <b>%{phone}</b> phone number.
|
||||
the_sender_has_requested_a_two_factor_authentication_via_one_time_password_sent_to_your_html: The sender has requested two-factor authentication via a one-time password sent to your <b>%{phone}</b> phone number.
|
||||
send_verification_code: Send verification code
|
||||
code_has_been_resent: Code has been re-sent
|
||||
invalid_code: Invalid code
|
||||
@@ -767,7 +772,7 @@ en: &en
|
||||
at_least_one_field_must_be_displayed_in_the_form: At least one field must be displayed in the form.
|
||||
this_template_has_multiple_parties_which_prevents_the_use_of_a_sharing_link: This template has multiple parties, which prevents the use of a shared link as it's unclear which party is responsible for specific fields. To resolve this, define the default party details.
|
||||
events_log: Events Log
|
||||
successed: Successed
|
||||
succeeded: Succeeded
|
||||
failed: Failed
|
||||
there_are_no_events: There are no events
|
||||
resend: Resend
|
||||
@@ -794,6 +799,17 @@ en: &en
|
||||
template_name_has_been_completed_by_submitters_html: '"<strong>{template.name}</strong>" has been completed by <strong>{submission.submitters}</strong>'
|
||||
please_check_the_copy_of_your_template_name_in_the_email_attachments_html: 'Please check the copy of your "<strong>{template.name}</strong>" in the email attachments.'
|
||||
you_have_been_invited_to_sign_the_template_name_html: 'You have been invited to sign the "<strong>{template.name}</strong>".'
|
||||
reveal_api_key: Reveal API Key
|
||||
enter_your_password_to_reveal_the_api_key: Enter your password to reveal the API key
|
||||
wrong_password: Wrong password.
|
||||
current_password: Current password
|
||||
dont_remember_your_current_password_click_here_to_reset_it_html: 'Don''t remember your current password? <label class="link" for="resend_password_button">Click here</label> to reset it.'
|
||||
an_email_with_password_reset_instructions_has_been_sent: An email with password reset instructions has been sent.
|
||||
api_key_access_code: API key access code
|
||||
use_otp_code_to_access_the_api_key_html: Use <b>%{code}</b> code to access the API key.
|
||||
please_reply_to_this_email_if_you_dont_recognize_this_request: Please reply to this email if you don't recognize this request.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Your user account has been archived. Contact your administrator to restore access to your account.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: Your email could not be reached. This may happen if there was a typo in your address or if your mailbox is not available. Please contact support@docuseal.com to log in.
|
||||
submission_sources:
|
||||
api: API
|
||||
bulk: Bulk Send
|
||||
@@ -900,6 +916,10 @@ en: &en
|
||||
range_without_total: "%{from}-%{to} events"
|
||||
|
||||
es: &es
|
||||
enabled: Habilitado
|
||||
disabled: Deshabilitado
|
||||
expirable_file_download_links: Enlaces de descarga de archivos con vencimiento
|
||||
create_templates_with_private_access_by_default: Crear plantillas con acceso privado por defecto
|
||||
party: Parte
|
||||
edit_order: Edita Pedido
|
||||
select: Seleccionar
|
||||
@@ -1647,7 +1667,7 @@ es: &es
|
||||
at_least_one_field_must_be_displayed_in_the_form: Al menos un campo debe mostrarse en el formulario.
|
||||
this_template_has_multiple_parties_which_prevents_the_use_of_a_sharing_link: Esta plantilla tiene varias partes, lo que impide el uso de un enlace compartido porque no está claro qué parte es responsable de campos específicos. Para resolverlo, define los detalles predeterminados de la parte.
|
||||
events_log: Registro de eventos
|
||||
successed: Exitoso
|
||||
succeeded: Exitoso
|
||||
failed: Fallido
|
||||
there_are_no_events: No hay eventos
|
||||
resend: Reenviar
|
||||
@@ -1674,6 +1694,17 @@ es: &es
|
||||
template_name_has_been_completed_by_submitters_html: '"<strong>{template.name}</strong>" ha sido completado por <strong>{submission.submitters}</strong>'
|
||||
please_check_the_copy_of_your_template_name_in_the_email_attachments_html: 'Por favor, revisa la copia de tu "<strong>{template.name}</strong>" en los archivos adjuntos del correo electrónico.'
|
||||
you_have_been_invited_to_sign_the_template_name_html: 'Has sido invitado a firmar el "<strong>{template.name}</strong>".'
|
||||
reveal_api_key: Revelar clave API
|
||||
enter_your_password_to_reveal_the_api_key: Introduce tu contraseña para revelar la clave API
|
||||
wrong_password: Contraseña incorrecta.
|
||||
current_password: Contraseña actual
|
||||
dont_remember_your_current_password_click_here_to_reset_it_html: '¿No recuerdas tu contraseña actual? <label class="link" for="resend_password_button">Haz clic aquí</label> para restablecerla.'
|
||||
an_email_with_password_reset_instructions_has_been_sent: Se enviará un correo electrónico con las instrucciones para restablecer tu contraseña en unos minutos.
|
||||
api_key_access_code: Código de acceso de la clave API
|
||||
use_otp_code_to_access_the_api_key_html: Usa el código <b>%{code}</b> para acceder a la clave API.
|
||||
please_reply_to_this_email_if_you_dont_recognize_this_request: Responde a este correo si no reconoces esta solicitud.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Tu cuenta de usuario ha sido archivada. Contacta a tu administrador para restaurar el acceso a tu cuenta.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: No se pudo acceder a tu correo electrónico. Esto puede ocurrir si hubo un error tipográfico en tu dirección o si tu buzón no está disponible. Por favor, contacta a support@docuseal.com para iniciar sesión.
|
||||
submission_sources:
|
||||
api: API
|
||||
bulk: Envío masivo
|
||||
@@ -1780,6 +1811,11 @@ es: &es
|
||||
range_without_total: "%{from}-%{to} eventos"
|
||||
|
||||
it: &it
|
||||
click_here_to_send_a_reset_password_email_html: '<label class="link" for="resend_password_button">Clicca qui</label> per inviare una email per reimpostare la password.'
|
||||
enabled: Abilitato
|
||||
disabled: Disabilitato
|
||||
expirable_file_download_links: Link di download di file con scadenza
|
||||
create_templates_with_private_access_by_default: Crea modelli con accesso privato per impostazione predefinita
|
||||
party: Parte
|
||||
edit_order: Modifica Ordine
|
||||
select: Seleziona
|
||||
@@ -2526,7 +2562,7 @@ it: &it
|
||||
at_least_one_field_must_be_displayed_in_the_form: Almeno un campo deve essere visualizzato nel modulo.
|
||||
this_template_has_multiple_parties_which_prevents_the_use_of_a_sharing_link: Questo modello ha più parti, il che impedisce l’uso di un link di condivisione perché non è chiaro quale parte sia responsabile di campi specifici. Per risolvere, definisci i dettagli predefiniti della parte.
|
||||
events_log: Registro eventi
|
||||
successed: Riuscito
|
||||
succeeded: Riuscito
|
||||
failed: Fallito
|
||||
there_are_no_events: Nessun evento
|
||||
resend: Invia di nuovo
|
||||
@@ -2554,6 +2590,17 @@ it: &it
|
||||
template_name_has_been_completed_by_submitters_html: '"<strong>{template.name}</strong>" è stato completato da <strong>{submission.submitters}</strong>'
|
||||
please_check_the_copy_of_your_template_name_in_the_email_attachments_html: 'Per favore, controlla la copia del tuo "<strong>{template.name}</strong>" negli allegati dell''email.'
|
||||
you_have_been_invited_to_sign_the_template_name_html: 'Sei stato invitato a firmare il "<strong>{template.name}</strong>".'
|
||||
reveal_api_key: Mostra chiave API
|
||||
enter_your_password_to_reveal_the_api_key: Inserisci la tua password per mostrare la chiave API
|
||||
wrong_password: Password errata.
|
||||
current_password: Password attuale
|
||||
dont_remember_your_current_password_click_here_to_reset_it_html: 'Non ricordi la tua password attuale? <label class="link" for="resend_password_button">Clicca qui</label> per reimpostarla.'
|
||||
an_email_with_password_reset_instructions_has_been_sent: Un'email con le istruzioni per reimpostare la password ti è stata inviata e arriverà entro pochi minuti.
|
||||
api_key_access_code: Codice di accesso della chiave API
|
||||
use_otp_code_to_access_the_api_key_html: Usa il codice <b>%{code}</b> per accedere alla chiave API.
|
||||
please_reply_to_this_email_if_you_dont_recognize_this_request: Rispondi a questa email se non riconosci questa richiesta.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Il tuo account utente è stato archiviato. Contatta il tuo amministratore per ripristinare l'accesso al tuo account.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: Non è stato possibile raggiungere la tua email. Questo può accadere se c'è stato un errore di digitazione nell'indirizzo o se la tua casella di posta non è disponibile. Contatta support@docuseal.com per accedere.
|
||||
submission_sources:
|
||||
api: API
|
||||
bulk: Invio massivo
|
||||
@@ -2660,6 +2707,11 @@ it: &it
|
||||
range_without_total: "%{from}-%{to} eventi"
|
||||
|
||||
fr: &fr
|
||||
click_here_to_send_a_reset_password_email_html: '<label class="link" for="resend_password_button">Cliquez ici</label> pour envoyer un e-mail de réinitialisation du mot de passe.'
|
||||
enabled: Activé
|
||||
disabled: Désactivé
|
||||
expirable_file_download_links: Liens de téléchargement de fichiers expirables
|
||||
create_templates_with_private_access_by_default: Créer des modèles avec un accès privé par défaut
|
||||
party: Partie
|
||||
edit_order: Modifier la commande
|
||||
select: Sélectionner
|
||||
@@ -3409,7 +3461,7 @@ fr: &fr
|
||||
at_least_one_field_must_be_displayed_in_the_form: Au moins un champ doit être affiché dans le formulaire.
|
||||
this_template_has_multiple_parties_which_prevents_the_use_of_a_sharing_link: Ce modèle contient plusieurs parties, ce qui empêche l’utilisation d’un lien de partage car il n’est pas clair quelle partie est responsable de certains champs. Pour résoudre cela, définissez les détails de la partie par défaut.
|
||||
events_log: Journal des événements
|
||||
successed: Réussi
|
||||
succeeded: Réussi
|
||||
failed: Échoué
|
||||
there_are_no_events: Aucun événement
|
||||
resend: Renvoyer
|
||||
@@ -3437,6 +3489,17 @@ fr: &fr
|
||||
template_name_has_been_completed_by_submitters_html: '"<strong>{template.name}</strong>" a été complété par <strong>{submission.submitters}</strong>'
|
||||
please_check_the_copy_of_your_template_name_in_the_email_attachments_html: 'Veuillez vérifier la copie de votre "<strong>{template.name}</strong>" dans les pièces jointes de l’e-mail.'
|
||||
you_have_been_invited_to_sign_the_template_name_html: 'Vous avez été invité à signer le "<strong>{template.name}</strong>".'
|
||||
reveal_api_key: Révéler la clé API
|
||||
enter_your_password_to_reveal_the_api_key: Entrez votre mot de passe pour révéler la clé API
|
||||
wrong_password: Mot de passe incorrect.
|
||||
current_password: Mot de passe actuel
|
||||
dont_remember_your_current_password_click_here_to_reset_it_html: 'Vous ne vous souvenez plus de votre mot de passe actuel ? <label class="link" for="resend_password_button">Cliquez ici</label> pour le réinitialiser.'
|
||||
an_email_with_password_reset_instructions_has_been_sent: Un e-mail contenant les instructions pour réinitialiser votre mot de passe vous sera envoyé dans quelques minutes.
|
||||
api_key_access_code: Code d'accès de la clé API
|
||||
use_otp_code_to_access_the_api_key_html: Utilisez le code <b>%{code}</b> pour accéder à la clé API.
|
||||
please_reply_to_this_email_if_you_dont_recognize_this_request: Veuillez répondre à cet e-mail si vous ne reconnaissez pas cette demande.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Votre compte utilisateur a été archivé. Contactez votre administrateur pour rétablir l'accès à votre compte.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: Votre e-mail n'a pas pu être atteint. Cela peut arriver s'il y a eu une faute de frappe dans votre adresse ou si votre boîte aux lettres n'est pas disponible. Veuillez contacter support@docuseal.com pour vous connecter.
|
||||
submission_sources:
|
||||
api: API
|
||||
bulk: Envoi en masse
|
||||
@@ -3543,6 +3606,11 @@ fr: &fr
|
||||
range_without_total: "%{from} à %{to} événements"
|
||||
|
||||
pt: &pt
|
||||
click_here_to_send_a_reset_password_email_html: '<label class="link" for="resend_password_button">Clique aqui</label> para enviar um e-mail de redefinição de senha.'
|
||||
enabled: Ativado
|
||||
disabled: Desativado
|
||||
expirable_file_download_links: Links de download de arquivos com expiração
|
||||
create_templates_with_private_access_by_default: Criar modelos com acesso privado por padrão
|
||||
party: Parte
|
||||
edit_order: Edita Pedido
|
||||
select: Selecionar
|
||||
@@ -4291,7 +4359,7 @@ pt: &pt
|
||||
at_least_one_field_must_be_displayed_in_the_form: Pelo menos um campo deve ser exibido no formulário.
|
||||
this_template_has_multiple_parties_which_prevents_the_use_of_a_sharing_link: Este modelo tem várias partes, o que impede o uso de um link de compartilhamento, pois não está claro qual parte é responsável por campos específicos. Para resolver isso, defina os detalhes padrão da parte.
|
||||
events_log: Registro de eventos
|
||||
successed: Sucesso
|
||||
succeeded: Sucesso
|
||||
failed: Falhou
|
||||
there_are_no_events: Nenhum evento
|
||||
resend: Reenviar
|
||||
@@ -4318,6 +4386,17 @@ pt: &pt
|
||||
template_name_has_been_completed_by_submitters_html: '"<strong>{template.name}</strong>" foi concluído por <strong>{submission.submitters}</strong>'
|
||||
please_check_the_copy_of_your_template_name_in_the_email_attachments_html: 'Por favor, verifique a cópia do seu "<strong>{template.name}</strong>" nos anexos do e-mail.'
|
||||
you_have_been_invited_to_sign_the_template_name_html: 'Você foi convidado a assinar o "<strong>{template.name}</strong>".'
|
||||
reveal_api_key: Revelar chave API
|
||||
enter_your_password_to_reveal_the_api_key: Insira sua senha para revelar a chave API
|
||||
wrong_password: Senha incorreta.
|
||||
current_password: Senha atual
|
||||
dont_remember_your_current_password_click_here_to_reset_it_html: 'Não se lembra da sua senha atual? <label class="link" for="resend_password_button">Clique aqui</label> para redefini-la.'
|
||||
an_email_with_password_reset_instructions_has_been_sent: Um e-mail com instruções para redefinir sua senha será enviado em alguns minutos.
|
||||
api_key_access_code: Código de acesso da chave API
|
||||
use_otp_code_to_access_the_api_key_html: Use o código <b>%{code}</b> para acessar a chave API.
|
||||
please_reply_to_this_email_if_you_dont_recognize_this_request: Responda a este e-mail se você não reconhecer esta solicitação.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Sua conta de usuário foi arquivada. Entre em contato com o administrador para restaurar o acesso à sua conta.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: Seu e-mail não pôde ser acessado. Isso pode acontecer se houve um erro de digitação no endereço ou se sua caixa de correio não estiver disponível. Entre em contato com support@docuseal.com para fazer login.
|
||||
submission_sources:
|
||||
api: API
|
||||
bulk: Envio em massa
|
||||
@@ -4424,6 +4503,11 @@ pt: &pt
|
||||
range_without_total: "%{from}-%{to} eventos"
|
||||
|
||||
de: &de
|
||||
click_here_to_send_a_reset_password_email_html: '<label class="link" for="resend_password_button">Klicken Sie hier</label>, um eine E-Mail zum Zurücksetzen des Passworts zu senden.'
|
||||
enabled: Aktiviert
|
||||
disabled: Deaktiviert
|
||||
expirable_file_download_links: Ablaufbare Datei-Download-Links
|
||||
create_templates_with_private_access_by_default: Vorlagen standardmäßig mit privatem Zugriff erstellen
|
||||
party: Partei
|
||||
edit_order: Bestellung bearbeiten
|
||||
select: Auswählen
|
||||
@@ -5172,7 +5256,7 @@ de: &de
|
||||
at_least_one_field_must_be_displayed_in_the_form: Mindestens ein Feld muss im Formular angezeigt werden.
|
||||
this_template_has_multiple_parties_which_prevents_the_use_of_a_sharing_link: Diese Vorlage enthält mehrere Parteien, was die Verwendung eines Freigabelinks verhindert, da unklar ist, welche Partei für bestimmte Felder verantwortlich ist. Um dies zu beheben, definieren Sie die Standardparteidetails.
|
||||
events_log: Ereignisprotokoll
|
||||
successed: Erfolgreich
|
||||
succeeded: Erfolgreich
|
||||
failed: Fehlgeschlagen
|
||||
there_are_no_events: Keine Ereignisse vorhanden
|
||||
resend: Erneut senden
|
||||
@@ -5199,6 +5283,15 @@ de: &de
|
||||
template_name_has_been_completed_by_submitters_html: '"<strong>{template.name}</strong>" wurde von <strong>{submission.submitters}</strong> abgeschlossen'
|
||||
please_check_the_copy_of_your_template_name_in_the_email_attachments_html: 'Bitte prüfen Sie die Kopie Ihres "<strong>{template.name}</strong>" in den E-Mail-Anhängen.'
|
||||
you_have_been_invited_to_sign_the_template_name_html: 'Du wurdest eingeladen, "<strong>{template.name}</strong>" zu unterschreiben.'
|
||||
reveal_api_key: API-Schlüssel anzeigen
|
||||
enter_your_password_to_reveal_the_api_key: Gib dein Passwort ein, um den API-Schlüssel anzuzeigen
|
||||
wrong_password: Falsches Passwort.
|
||||
current_password: Aktuelles Passwort
|
||||
dont_remember_your_current_password_click_here_to_reset_it_html: 'Sie erinnern sich nicht an Ihr aktuelles Passwort? <label class="link" for="resend_password_button">Klicken Sie hier</label>, um es zurückzusetzen.'
|
||||
an_email_with_password_reset_instructions_has_been_sent: Eine E-Mail mit Anweisungen zum Zurücksetzen Ihres Passworts wurde Ihnen in wenigen Minuten zugesendet.
|
||||
api_key_access_code: API-Schlüssel-Zugangscode
|
||||
use_otp_code_to_access_the_api_key_html: Verwenden Sie den Code <b>%{code}</b>, um auf den API-Schlüssel zuzugreifen.
|
||||
please_reply_to_this_email_if_you_dont_recognize_this_request: Bitte antworten Sie auf diese E-Mail, wenn Sie diese Anfrage nicht erkennen.
|
||||
submission_sources:
|
||||
api: API
|
||||
bulk: Massenversand
|
||||
@@ -5392,6 +5485,8 @@ pl:
|
||||
email_verification: Weryfikacja e-mail
|
||||
your_verification_code_to_access_the_name: 'Twój kod weryfikacyjny do uzyskania dostępu do "%{name}":'
|
||||
please_reply_to_this_email_if_you_didnt_request_this: Odpowiedz na ten e-mail, jeśli nie prosiłeś o to.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Twoje konto użytkownika zostało zarchiwizowane. Skontaktuj się z administratorem, aby przywrócić dostęp do konta.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: Nie udało się uzyskać dostępu do Twojego adresu e-mail. Może to być spowodowane literówką w adresie lub niedostępnością skrzynki. Skontaktuj się z support@docuseal.com, aby się zalogować.
|
||||
|
||||
uk:
|
||||
require_phone_2fa_to_open: Вимагати двофакторну автентифікацію через телефон для відкриття
|
||||
@@ -5481,6 +5576,8 @@ uk:
|
||||
email_verification: Підтвердження електронної пошти
|
||||
your_verification_code_to_access_the_name: 'Ваш код доступу до "%{name}":'
|
||||
please_reply_to_this_email_if_you_didnt_request_this: Відповідайте на цей лист, якщо ви цього не запитували.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Ваш обліковий запис було архівовано. Зверніться до адміністратора, щоб відновити доступ.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: Не вдалося отримати доступ до вашої електронної пошти. Це може статися, якщо була допущена помилка в адресі або ваша скринька недоступна. Зверніться до support@docuseal.com, щоб увійти.
|
||||
|
||||
cs:
|
||||
require_phone_2fa_to_open: Vyžadovat otevření pomocí telefonního 2FA
|
||||
@@ -5570,6 +5667,8 @@ cs:
|
||||
email_verification: Ověření e-mailu
|
||||
your_verification_code_to_access_the_name: 'Váš ověřovací kód pro přístup k "%{name}":'
|
||||
please_reply_to_this_email_if_you_didnt_request_this: Odpovězte na tento e-mail, pokud jste o to nežádali.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Váš uživatelský účet byl archivován. Kontaktujte svého administrátora pro obnovení přístupu.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: Nepodařilo se dosáhnout na váš e-mail. To se může stát, pokud je v adrese překlep nebo vaše schránka není dostupná. Kontaktujte support@docuseal.com pro přihlášení.
|
||||
|
||||
he:
|
||||
require_phone_2fa_to_open: דרוש אימות דו-שלבי באמצעות טלפון לפתיחה
|
||||
@@ -5659,6 +5758,8 @@ he:
|
||||
email_verification: 'אימות דוא"ל'
|
||||
your_verification_code_to_access_the_name: 'קוד האימות שלך לגישה ל-%{name}:'
|
||||
please_reply_to_this_email_if_you_didnt_request_this: 'השב למייל זה אם לא ביקשת זאת.'
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: החשבון שלך הועבר לארכיון. פנה למנהל המערכת כדי לשחזר את הגישה.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: לא ניתן היה לגשת לדוא"ל שלך. ייתכן שזה קרה עקב שגיאת כתיב בכתובת או אם תיבת הדואר אינה זמינה. אנא פנה ל־support@docuseal.com כדי להתחבר.
|
||||
|
||||
nl:
|
||||
require_phone_2fa_to_open: Vereis telefoon 2FA om te openen
|
||||
@@ -5748,6 +5849,8 @@ nl:
|
||||
email_verification: E-mailverificatie
|
||||
your_verification_code_to_access_the_name: 'Je verificatiecode voor toegang tot "%{name}":'
|
||||
please_reply_to_this_email_if_you_didnt_request_this: Reageer op deze e-mail als je dit niet hebt aangevraagd.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: Je gebruikersaccount is gearchiveerd. Neem contact op met je beheerder om de toegang te herstellen.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: Je e-mailadres kon niet worden bereikt. Dit kan gebeuren door een typefout in je adres of als je mailbox niet beschikbaar is. Neem contact op met support@docuseal.com om in te loggen.
|
||||
|
||||
ar:
|
||||
require_phone_2fa_to_open: "تطلب فتح عبر تحقق الهاتف ذو العاملين"
|
||||
@@ -5837,6 +5940,8 @@ ar:
|
||||
email_verification: 'التحقق من البريد الإلكتروني'
|
||||
your_verification_code_to_access_the_name: 'رمز التحقق الخاص بك للوصول إلى "%{name}":'
|
||||
please_reply_to_this_email_if_you_didnt_request_this: 'يرجى الرد على هذا البريد إذا لم تطلب ذلك.'
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: تم أرشفة حسابك. يرجى التواصل مع المسؤول لاستعادة الوصول إلى حسابك.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: تعذّر الوصول إلى بريدك الإلكتروني. قد يحدث هذا في حال وجود خطأ في العنوان أو إذا كانت صندوق البريد غير متاح. يرجى التواصل مع support@docuseal.com لتسجيل الدخول.
|
||||
|
||||
ko:
|
||||
require_phone_2fa_to_open: 휴대폰 2FA를 열 때 요구함
|
||||
@@ -5926,6 +6031,8 @@ ko:
|
||||
email_verification: 이메일 인증
|
||||
your_verification_code_to_access_the_name: '"%{name}"에 액세스하기 위한 인증 코드:'
|
||||
please_reply_to_this_email_if_you_didnt_request_this: 요청하지 않았다면 이 이메일에 회신하세요.
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: 사용자 계정이 보관되었습니다. 계정 접근을 복원하려면 관리자에게 문의하세요.
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: 이메일에 접근할 수 없습니다. 주소에 오타가 있거나 메일박스가 사용 불가능한 경우 발생할 수 있습니다. 로그인하려면 support@docuseal.com에 문의하세요.
|
||||
|
||||
ja:
|
||||
require_phone_2fa_to_open: 電話による2段階認証が必要です
|
||||
@@ -6015,6 +6122,8 @@ ja:
|
||||
email_verification: メール認証
|
||||
your_verification_code_to_access_the_name: '"%{name}"へのアクセスコード:'
|
||||
please_reply_to_this_email_if_you_didnt_request_this: このリクエストを行っていない場合は、このメールに返信してください。
|
||||
your_user_account_has_been_archived_contact_your_administrator_to_restore_access_to_your_account: あなたのユーザーアカウントはアーカイブされました。アクセスを復元するには管理者に連絡してください。
|
||||
your_email_could_not_be_reached_this_may_happen_if_there_was_a_typo_in_your_address_or_if_your_mailbox_is_not_available_please_contact_support_email_to_log_in: メールにアクセスできませんでした。アドレスの入力ミスやメールボックスが利用できない場合に発生することがあります。ログインするには support@docuseal.com に連絡してください。
|
||||
|
||||
en-US:
|
||||
<<: *en
|
||||
|
||||
+4
-1
@@ -65,7 +65,9 @@ Rails.application.routes.draw do
|
||||
resources :setup, only: %i[index create]
|
||||
resource :newsletter, only: %i[show update]
|
||||
resources :enquiries, only: %i[create]
|
||||
resources :users, only: %i[new create edit update destroy]
|
||||
resources :users, only: %i[new create edit update destroy] do
|
||||
resource :send_reset_password, only: %i[update], controller: 'users_send_reset_password'
|
||||
end
|
||||
resource :user_signature, only: %i[edit update destroy]
|
||||
resource :user_initials, only: %i[edit update destroy]
|
||||
resources :submissions_archived, only: %i[index], path: 'submissions/archived'
|
||||
@@ -179,6 +181,7 @@ Rails.application.routes.draw do
|
||||
defaults: { status: :integration }
|
||||
resource :personalization, only: %i[show create], controller: 'personalization_settings'
|
||||
resources :api, only: %i[index create], controller: 'api_settings'
|
||||
resource :reveal_access_token, only: %i[show create], controller: 'reveal_access_token'
|
||||
resources :webhooks, only: %i[index show new create update destroy], controller: 'webhook_settings' do
|
||||
post :resend
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
disk:
|
||||
service: Disk
|
||||
root: <%= ENV['WORKDIR'] || '.' %>/attachments
|
||||
public: true
|
||||
public: <%= ENV['ACTIVE_STORAGE_PUBLIC'] == 'true' %>
|
||||
|
||||
aws_s3:
|
||||
service: S3
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class PopulateExpireLinkConfigs < ActiveRecord::Migration[8.0]
|
||||
disable_ddl_transaction!
|
||||
|
||||
class MigrationAccount < ActiveRecord::Base
|
||||
self.table_name = 'accounts'
|
||||
end
|
||||
|
||||
class MigrationAccountConfig < ActiveRecord::Base
|
||||
self.table_name = 'account_configs'
|
||||
|
||||
serialize :value, coder: JSON
|
||||
end
|
||||
|
||||
def up
|
||||
MigrationAccount.find_each do |account|
|
||||
config = MigrationAccountConfig.find_or_initialize_by(key: 'download_links_expire', account_id: account.id)
|
||||
|
||||
next if config.persisted?
|
||||
|
||||
config.value = false
|
||||
config.save!
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
nil
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class AddVerificationMethodToCompletedSubmitters < ActiveRecord::Migration[8.0]
|
||||
def change
|
||||
add_column :completed_submitters, :verification_method, :string
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,9 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class AddTemplateVariables < ActiveRecord::Migration[8.0]
|
||||
def change
|
||||
add_column :templates, :variables_schema, :text
|
||||
add_column :submissions, :variables_schema, :text
|
||||
add_column :submissions, :variables, :text
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class CreateLockEvents < ActiveRecord::Migration[8.0]
|
||||
def change
|
||||
create_table :lock_events do |t|
|
||||
t.string :key, index: true, null: false
|
||||
t.string :event_name, null: false
|
||||
|
||||
t.index %i[event_name key], unique: true, where: "event_name IN ('start', 'complete')"
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
||||
+14
-1
@@ -10,7 +10,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[8.0].define(version: 2025_07_18_121133) do
|
||||
ActiveRecord::Schema[8.0].define(version: 2025_09_15_060548) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "btree_gin"
|
||||
enable_extension "plpgsql"
|
||||
@@ -117,6 +117,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_07_18_121133) do
|
||||
t.datetime "completed_at", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.string "verification_method"
|
||||
t.index ["account_id"], name: "index_completed_submitters_on_account_id"
|
||||
t.index ["submitter_id"], name: "index_completed_submitters_on_submitter_id", unique: true
|
||||
end
|
||||
@@ -216,6 +217,15 @@ ActiveRecord::Schema[8.0].define(version: 2025_07_18_121133) do
|
||||
t.index ["user_id"], name: "index_encrypted_user_configs_on_user_id"
|
||||
end
|
||||
|
||||
create_table "lock_events", force: :cascade do |t|
|
||||
t.string "key", null: false
|
||||
t.string "event_name", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["event_name", "key"], name: "index_lock_events_on_event_name_and_key", unique: true, where: "((event_name)::text = ANY ((ARRAY['start'::character varying, 'complete'::character varying])::text[]))"
|
||||
t.index ["key"], name: "index_lock_events_on_key"
|
||||
end
|
||||
|
||||
create_table "oauth_access_grants", force: :cascade do |t|
|
||||
t.bigint "resource_owner_id", null: false
|
||||
t.bigint "application_id", null: false
|
||||
@@ -304,6 +314,8 @@ ActiveRecord::Schema[8.0].define(version: 2025_07_18_121133) do
|
||||
t.bigint "account_id", null: false
|
||||
t.datetime "expire_at"
|
||||
t.text "name"
|
||||
t.text "variables_schema"
|
||||
t.text "variables"
|
||||
t.index ["account_id", "id"], name: "index_submissions_on_account_id_and_id"
|
||||
t.index ["account_id", "template_id", "id"], name: "index_submissions_on_account_id_and_template_id_and_id", where: "(archived_at IS NULL)"
|
||||
t.index ["account_id", "template_id", "id"], name: "index_submissions_on_account_id_and_template_id_and_id_archived", where: "(archived_at IS NOT NULL)"
|
||||
@@ -388,6 +400,7 @@ ActiveRecord::Schema[8.0].define(version: 2025_07_18_121133) do
|
||||
t.string "external_id"
|
||||
t.text "preferences", null: false
|
||||
t.boolean "shared_link", default: false, null: false
|
||||
t.text "variables_schema"
|
||||
t.index ["account_id", "folder_id", "id"], name: "index_templates_on_account_id_and_folder_id_and_id", where: "(archived_at IS NULL)"
|
||||
t.index ["account_id", "id"], name: "index_templates_on_account_id_and_id_archived", where: "(archived_at IS NOT NULL)"
|
||||
t.index ["account_id"], name: "index_templates_on_account_id"
|
||||
|
||||
+703
-37
@@ -523,6 +523,15 @@ var response = client.Execute(request);
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -598,14 +607,45 @@ var response = client.Execute(request);
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1025,10 +1065,6 @@ var response = client.Execute(request);
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1038,6 +1074,15 @@ var response = client.Execute(request);
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1105,14 +1150,45 @@ var response = client.Execute(request);
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1775,6 +1851,46 @@ var response = client.Execute(request);
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2253,7 +2369,7 @@ var response = client.Execute(request);
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```csharp
|
||||
@@ -2531,6 +2647,15 @@ var response = client.Execute(request);
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2593,14 +2718,45 @@ var response = client.Execute(request);
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -2946,6 +3102,15 @@ var response = client.Execute(request);
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3008,14 +3173,45 @@ var response = client.Execute(request);
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3323,6 +3519,46 @@ var response = client.Execute(request);
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3439,3 +3675,433 @@ var response = client.Execute(request);
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```csharp
|
||||
var client = new RestClient("https://api.docuseal.com/submissions/docx");
|
||||
var request = new RestRequest("", Method.Post);
|
||||
request.AddHeader("X-Auth-Token", "API_KEY");
|
||||
request.AddHeader("content-type", "application/json");
|
||||
request.AddParameter("application/json", "{\"name\":\"Test Submission Document\",\"variables\":{\"variable_name\":\"value\"},\"documents\":[{\"name\":\"string\",\"file\":\"base64\"}],\"submitters\":[{\"role\":\"First Party\",\"email\":\"john.doe@example.com\"}]}", ParameterType.RequestBody);
|
||||
var response = client.Execute(request);
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+726
-37
@@ -653,6 +653,15 @@ func main() {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -728,14 +737,45 @@ func main() {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1285,10 +1325,6 @@ func main() {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1298,6 +1334,15 @@ func main() {
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1365,14 +1410,45 @@ func main() {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -2148,6 +2224,46 @@ func main() {
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2672,7 +2788,7 @@ func main() {
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```go
|
||||
@@ -2973,6 +3089,15 @@ func main() {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3035,14 +3160,45 @@ func main() {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3411,6 +3567,15 @@ func main() {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3473,14 +3638,45 @@ func main() {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3811,6 +4007,46 @@ func main() {
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3927,3 +4163,456 @@ func main() {
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"net/http"
|
||||
"io"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
url := "https://api.docuseal.com/submissions/docx"
|
||||
|
||||
payload := strings.NewReader("{\"name\":\"Test Submission Document\",\"variables\":{\"variable_name\":\"value\"},\"documents\":[{\"name\":\"string\",\"file\":\"base64\"}],\"submitters\":[{\"role\":\"First Party\",\"email\":\"john.doe@example.com\"}]}")
|
||||
|
||||
req, _ := http.NewRequest("POST", url, payload)
|
||||
|
||||
req.Header.Add("X-Auth-Token", "API_KEY")
|
||||
req.Header.Add("content-type", "application/json")
|
||||
|
||||
res, _ := http.DefaultClient.Do(req)
|
||||
|
||||
defer res.Body.Close()
|
||||
body, _ := io.ReadAll(res.Body)
|
||||
|
||||
fmt.Println(res)
|
||||
fmt.Println(string(body))
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+702
-37
@@ -517,6 +517,15 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/submissio
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -592,14 +601,45 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/submissio
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1013,10 +1053,6 @@ HttpResponse<String> response = Unirest.put("https://api.docuseal.com/submitters
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1026,6 +1062,15 @@ HttpResponse<String> response = Unirest.put("https://api.docuseal.com/submitters
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1093,14 +1138,45 @@ HttpResponse<String> response = Unirest.put("https://api.docuseal.com/submitters
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1758,6 +1834,46 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/templates
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2234,7 +2350,7 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/templates
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```java
|
||||
@@ -2511,6 +2627,15 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/submissio
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2573,14 +2698,45 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/submissio
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -2925,6 +3081,15 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/submissio
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2987,14 +3152,45 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/submissio
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3301,6 +3497,46 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/templates
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3417,3 +3653,432 @@ HttpResponse<String> response = Unirest.post("https://api.docuseal.com/templates
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```java
|
||||
HttpResponse<String> response = Unirest.post("https://api.docuseal.com/submissions/docx")
|
||||
.header("X-Auth-Token", "API_KEY")
|
||||
.header("content-type", "application/json")
|
||||
.body("{\"name\":\"Test Submission Document\",\"variables\":{\"variable_name\":\"value\"},\"documents\":[{\"name\":\"string\",\"file\":\"base64\"}],\"submitters\":[{\"role\":\"First Party\",\"email\":\"john.doe@example.com\"}]}")
|
||||
.asString();
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+719
-37
@@ -537,6 +537,15 @@ const submission = await docuseal.createSubmission({
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -612,14 +621,45 @@ const submission = await docuseal.createSubmission({
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1052,10 +1092,6 @@ const submitter = await docuseal.updateSubmitter(500001, {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1065,6 +1101,15 @@ const submitter = await docuseal.updateSubmitter(500001, {
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1132,14 +1177,45 @@ const submitter = await docuseal.updateSubmitter(500001, {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1826,6 +1902,46 @@ const template = await docuseal.createTemplateFromDocx({
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2330,7 +2446,7 @@ const template = await docuseal.mergeTemplates({
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```javascript
|
||||
@@ -2635,6 +2751,15 @@ const submission = await docuseal.createSubmissionFromPdf({
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2697,14 +2822,45 @@ const submission = await docuseal.createSubmissionFromPdf({
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3071,6 +3227,15 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3133,14 +3298,45 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3469,6 +3665,46 @@ const template = await docuseal.createTemplateFromPdf({
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3585,3 +3821,449 @@ const template = await docuseal.createTemplateFromPdf({
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```javascript
|
||||
const docuseal = require("@docuseal/api");
|
||||
|
||||
docuseal.configure({ key: "API_KEY", url: "https://api.docuseal.com" });
|
||||
|
||||
const submission = await docuseal.createSubmissionFromDocx({
|
||||
name: "Test Submission Document",
|
||||
variables: {
|
||||
variable_name: "value"
|
||||
},
|
||||
documents: [
|
||||
{
|
||||
name: "string",
|
||||
file: "base64"
|
||||
}
|
||||
],
|
||||
submitters: [
|
||||
{
|
||||
role: "First Party",
|
||||
email: "john.doe@example.com"
|
||||
}
|
||||
]
|
||||
});
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+725
-37
@@ -569,6 +569,15 @@ const submitters = await resp.json();
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -644,14 +653,45 @@ const submitters = await resp.json();
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1116,10 +1156,6 @@ const submitter = await resp.json();
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1129,6 +1165,15 @@ const submitter = await resp.json();
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1196,14 +1241,45 @@ const submitter = await resp.json();
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1919,6 +1995,46 @@ const template = await resp.json();
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2435,7 +2551,7 @@ const template = await resp.json();
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```nodejs
|
||||
@@ -2746,6 +2862,15 @@ const submission = await resp.json();
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2808,14 +2933,45 @@ const submission = await resp.json();
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3188,6 +3344,15 @@ const submission = await resp.json();
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3250,14 +3415,45 @@ const submission = await resp.json();
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3592,6 +3788,46 @@ const template = await resp.json();
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3708,3 +3944,455 @@ const template = await resp.json();
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```nodejs
|
||||
const fetch = require("node-fetch");
|
||||
|
||||
const resp = await fetch("https://api.docuseal.com/submissions/docx", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"X-Auth-Token": "API_KEY"
|
||||
},
|
||||
body: JSON.stringify({
|
||||
name: "Test Submission Document",
|
||||
variables: {
|
||||
variable_name: "value"
|
||||
},
|
||||
documents: [
|
||||
{
|
||||
name: "string",
|
||||
file: "base64"
|
||||
}
|
||||
],
|
||||
submitters: [
|
||||
{
|
||||
role: "First Party",
|
||||
email: "john.doe@example.com"
|
||||
}
|
||||
]
|
||||
})
|
||||
});
|
||||
|
||||
const submitters = await resp.json();
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+717
-37
@@ -525,6 +525,15 @@ $docuseal->createSubmission([
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -600,14 +609,45 @@ $docuseal->createSubmission([
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1028,10 +1068,6 @@ $docuseal->updateSubmitter(500001, [
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1041,6 +1077,15 @@ $docuseal->updateSubmitter(500001, [
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1108,14 +1153,45 @@ $docuseal->updateSubmitter(500001, [
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1792,6 +1868,46 @@ $docuseal->createTemplateFromDocx([
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2292,7 +2408,7 @@ $docuseal->mergeTemplates([
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```php
|
||||
@@ -2595,6 +2711,15 @@ $docuseal->createSubmissionFromPdf([
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2657,14 +2782,45 @@ $docuseal->createSubmissionFromPdf([
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3029,6 +3185,15 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3091,14 +3256,45 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3425,6 +3621,46 @@ $docuseal->createTemplateFromPdf([
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3541,3 +3777,447 @@ $docuseal->createTemplateFromPdf([
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```php
|
||||
$docuseal = new \Docuseal\Api('API_KEY', 'https://api.docuseal.com');
|
||||
|
||||
$docuseal->createSubmissionFromDocx([
|
||||
'name' => 'Test Submission Document',
|
||||
'variables' => [
|
||||
'variable_name' => 'value'
|
||||
],
|
||||
'documents' => [
|
||||
[
|
||||
'name' => 'string',
|
||||
'file' => 'base64'
|
||||
]
|
||||
],
|
||||
'submitters' => [
|
||||
[
|
||||
'role' => 'First Party',
|
||||
'email' => 'john.doe@example.com'
|
||||
]
|
||||
]
|
||||
]);
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+720
-37
@@ -543,6 +543,15 @@ docuseal.create_submission({
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -618,14 +627,45 @@ docuseal.create_submission({
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1064,10 +1104,6 @@ docuseal.update_submitter(500001, {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1077,6 +1113,15 @@ docuseal.update_submitter(500001, {
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1144,14 +1189,45 @@ docuseal.update_submitter(500001, {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1843,6 +1919,46 @@ docuseal.create_template_from_docx({
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2349,7 +2465,7 @@ docuseal.merge_templates({
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```python
|
||||
@@ -2655,6 +2771,15 @@ docuseal.create_submission_from_pdf({
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2717,14 +2842,45 @@ docuseal.create_submission_from_pdf({
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3092,6 +3248,15 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3154,14 +3319,45 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3491,6 +3687,46 @@ docuseal.create_template_from_pdf({
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3607,3 +3843,450 @@ docuseal.create_template_from_pdf({
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```python
|
||||
from docuseal import docuseal
|
||||
|
||||
docuseal.key = "API_KEY"
|
||||
docuseal.url = "https://api.docuseal.com"
|
||||
|
||||
docuseal.create_submission_from_docx({
|
||||
"name": "Test Submission Document",
|
||||
"variables": {
|
||||
"variable_name": "value"
|
||||
},
|
||||
"documents": [
|
||||
{
|
||||
"name": "string",
|
||||
"file": "base64"
|
||||
}
|
||||
],
|
||||
"submitters": [
|
||||
{
|
||||
"role": "First Party",
|
||||
"email": "john.doe@example.com"
|
||||
}
|
||||
]
|
||||
})
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+720
-37
@@ -543,6 +543,15 @@ Docuseal.create_submission({
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -618,14 +627,45 @@ Docuseal.create_submission({
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1064,10 +1104,6 @@ Docuseal.update_submitter(500001, {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1077,6 +1113,15 @@ Docuseal.update_submitter(500001, {
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1144,14 +1189,45 @@ Docuseal.update_submitter(500001, {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1843,6 +1919,46 @@ Docuseal.create_template_from_docx({
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2349,7 +2465,7 @@ Docuseal.merge_templates({
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```ruby
|
||||
@@ -2655,6 +2771,15 @@ Docuseal.create_submission_from_pdf({
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2717,14 +2842,45 @@ Docuseal.create_submission_from_pdf({
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3092,6 +3248,15 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3154,14 +3319,45 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3491,6 +3687,46 @@ Docuseal.create_template_from_pdf({
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3607,3 +3843,450 @@ Docuseal.create_template_from_pdf({
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```ruby
|
||||
require "docuseal"
|
||||
|
||||
Docuseal.key = ENV["DOCUSEAL_API_KEY"]
|
||||
Docuseal.url = "https://api.docuseal.com"
|
||||
|
||||
Docuseal.create_submission_from_docx({
|
||||
name: "Test Submission Document",
|
||||
variables: {
|
||||
variable_name: "value"
|
||||
},
|
||||
documents: [
|
||||
{
|
||||
name: "string",
|
||||
file: "base64"
|
||||
}
|
||||
],
|
||||
submitters: [
|
||||
{
|
||||
role: "First Party",
|
||||
email: "john.doe@example.com"
|
||||
}
|
||||
]
|
||||
})
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+702
-37
@@ -517,6 +517,15 @@ curl --request POST \
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -592,14 +601,45 @@ curl --request POST \
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1013,10 +1053,6 @@ curl --request PUT \
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1026,6 +1062,15 @@ curl --request PUT \
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1093,14 +1138,45 @@ curl --request PUT \
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1758,6 +1834,46 @@ curl --request POST \
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2234,7 +2350,7 @@ curl --request POST \
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```shell
|
||||
@@ -2511,6 +2627,15 @@ curl --request POST \
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2573,14 +2698,45 @@ curl --request POST \
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -2925,6 +3081,15 @@ curl --request POST \
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2987,14 +3152,45 @@ curl --request POST \
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3301,6 +3497,46 @@ curl --request POST \
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3417,3 +3653,432 @@ curl --request POST \
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```shell
|
||||
curl --request POST \
|
||||
--url https://api.docuseal.com/submissions/docx \
|
||||
--header 'X-Auth-Token: API_KEY' \
|
||||
--header 'content-type: application/json' \
|
||||
--data '{"name":"Test Submission Document","variables":{"variable_name":"value"},"documents":[{"name":"string","file":"base64"}],"submitters":[{"role":"First Party","email":"john.doe@example.com"}]}'
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
+719
-37
@@ -537,6 +537,15 @@ const submission = await docuseal.createSubmission({
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -612,14 +621,45 @@ const submission = await docuseal.createSubmission({
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1052,10 +1092,6 @@ const submitter = await docuseal.updateSubmitter(500001, {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
@@ -1065,6 +1101,15 @@ const submitter = await docuseal.updateSubmitter(500001, {
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -1132,14 +1177,45 @@ const submitter = await docuseal.updateSubmitter(500001, {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -1826,6 +1902,46 @@ const template = await docuseal.createTemplateFromDocx({
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -2330,7 +2446,7 @@ const template = await docuseal.mergeTemplates({
|
||||
|
||||
### Create a submission from PDF
|
||||
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF or DOCX file. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
The API endpoint provides the functionality to create one-off submission request from a PDF. Use <code>{{Field Name;role=Signer1;type=date}}</code> text tags to define fillable fields in the document. See <a href="https://www.docuseal.com/examples/fieldtags.pdf" target="_blank" class="link font-bold">https://www.docuseal.com/examples/fieldtags.pdf</a> for more text tag formats. Or specify the exact pixel coordinates of the document fields using `fields` param.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
|
||||
```typescript
|
||||
@@ -2635,6 +2751,15 @@ const submission = await docuseal.createSubmissionFromPdf({
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -2697,14 +2822,45 @@ const submission = await docuseal.createSubmissionFromPdf({
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3071,6 +3227,15 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
@@ -3133,14 +3298,45 @@ and typesetting industry</p>
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation_pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"invalid_message": {
|
||||
"type": "string",
|
||||
"description": "A custom message to display on pattern validation failure."
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
@@ -3469,6 +3665,46 @@ const template = await docuseal.createTemplateFromPdf({
|
||||
"Option B"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -3585,3 +3821,449 @@ const template = await docuseal.createTemplateFromPdf({
|
||||
}
|
||||
```
|
||||
|
||||
### Create a submission from DOCX
|
||||
|
||||
The API endpoint provides functionality to create a one-off submission request from a DOCX file with dynamic content variables. Use <code>[[variable_name]]</code> text tags to define dynamic content variables in the document. See <a href="https://www.docuseal.com/examples/demo_template.docx" target="_blank" class="link font-bold">https://www.docuseal.com/examples/demo_template.docx</a> for the specific text variable syntax, including dynamic content tables and list. You can also use the <code>{{signature}}</code> fillable field syntax to define fillable fields, as in a PDF.<br><b>Related Guides</b><br><a href="https://www.docuseal.com/guides/use-embedded-text-field-tags-in-the-pdf-to-create-a-fillable-form" class="link">Use embedded text field tags to create a fillable form</a>
|
||||
|
||||
```typescript
|
||||
import docuseal from "@docuseal/api";
|
||||
|
||||
docuseal.configure({ key: "API_KEY", url: "https://api.docuseal.com" });
|
||||
|
||||
const submission = await docuseal.createSubmissionFromDocx({
|
||||
name: "Test Submission Document",
|
||||
variables: {
|
||||
variable_name: "value"
|
||||
},
|
||||
documents: [
|
||||
{
|
||||
name: "string",
|
||||
file: "base64"
|
||||
}
|
||||
],
|
||||
submitters: [
|
||||
{
|
||||
role: "First Party",
|
||||
email: "john.doe@example.com"
|
||||
}
|
||||
]
|
||||
});
|
||||
```
|
||||
|
||||
```json
|
||||
{
|
||||
"security": [
|
||||
{
|
||||
"AuthToken": []
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"Submissions"
|
||||
],
|
||||
"summary": "Create a submission from DOCX",
|
||||
"operationId": "createSubmissionFromDocx",
|
||||
"parameters": [],
|
||||
"requestBody": {
|
||||
"required": true,
|
||||
"content": {
|
||||
"application/json": {
|
||||
"schema": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"documents",
|
||||
"submitters"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document submission.",
|
||||
"example": "Test Submission Document"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object",
|
||||
"example": {
|
||||
"variable_name": "value"
|
||||
}
|
||||
},
|
||||
"order": {
|
||||
"type": "string",
|
||||
"description": "Pass 'random' to send signature request emails to all parties right away. The order is 'preserved' by default so the second party will receive a signature request email only after the document is signed by the first party.",
|
||||
"default": "preserved",
|
||||
"enum": [
|
||||
"preserved",
|
||||
"random"
|
||||
]
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Specify URL to redirect to after the submission completion."
|
||||
},
|
||||
"bcc_completed": {
|
||||
"type": "string",
|
||||
"description": "Specify BCC address to send signed documents to after the completion."
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails."
|
||||
},
|
||||
"expire_at": {
|
||||
"type": "string",
|
||||
"description": "Specify the expiration date and time after which the submission becomes unavailable for signature.",
|
||||
"example": "2024-09-01 12:00:00 UTC"
|
||||
},
|
||||
"template_ids": {
|
||||
"type": "array",
|
||||
"description": "An optional array of template IDs to use in the submission along with the provided documents. This can be used to create multi-document submissions when some of the required documents exist within templates.",
|
||||
"items": {
|
||||
"type": "integer",
|
||||
"description": "The ID of the template to use for the submission."
|
||||
}
|
||||
},
|
||||
"documents": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name",
|
||||
"file"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the document."
|
||||
},
|
||||
"file": {
|
||||
"example": "base64",
|
||||
"type": "string",
|
||||
"format": "base64",
|
||||
"description": "Base64-encoded content of the PDF or DOCX file or downloadable file URL."
|
||||
},
|
||||
"position": {
|
||||
"type": "integer",
|
||||
"description": "Document position in the submission. If not specified, the document will be added in the order it appears in the documents array."
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"submitters": {
|
||||
"type": "array",
|
||||
"description": "The list of submitters for the submission.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"email"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "The name of the submitter."
|
||||
},
|
||||
"role": {
|
||||
"type": "string",
|
||||
"description": "The role name or title of the submitter.",
|
||||
"example": "First Party"
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "The email address of the submitter.",
|
||||
"format": "email",
|
||||
"example": "john.doe@example.com"
|
||||
},
|
||||
"phone": {
|
||||
"type": "string",
|
||||
"description": "The phone number of the submitter, formatted according to the E.164 standard.",
|
||||
"example": "+1234567890"
|
||||
},
|
||||
"values": {
|
||||
"type": "object",
|
||||
"description": "An object with pre-filled values for the submission. Use field names for keys of the object. For more configurations see `fields` param."
|
||||
},
|
||||
"external_id": {
|
||||
"type": "string",
|
||||
"description": "Your application-specific unique string key to identify this submitter within your app."
|
||||
},
|
||||
"completed": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `true` to mark submitter as completed and auto-signed via API."
|
||||
},
|
||||
"metadata": {
|
||||
"type": "object",
|
||||
"description": "Metadata object with additional submitter information.",
|
||||
"example": "{ \"customField\": \"value\" }"
|
||||
},
|
||||
"send_email": {
|
||||
"type": "boolean",
|
||||
"description": "Set `false` to disable signature request emails sending only for this submitter.",
|
||||
"default": true
|
||||
},
|
||||
"send_sms": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to send signature request via phone number and SMS.",
|
||||
"default": false
|
||||
},
|
||||
"reply_to": {
|
||||
"type": "string",
|
||||
"description": "Specify Reply-To address to use in the notification emails for this submitter."
|
||||
},
|
||||
"completed_redirect_url": {
|
||||
"type": "string",
|
||||
"description": "Submitter specific URL to redirect to after the submission completion."
|
||||
},
|
||||
"order": {
|
||||
"type": "integer",
|
||||
"description": "The order of the submitter in the workflow (e.g., 0 for the first signer, 1 for the second, etc.). Use the same order number to create order groups. By default, submitters are ordered as in the submitters array."
|
||||
},
|
||||
"require_phone_2fa": {
|
||||
"type": "boolean",
|
||||
"description": "Set to `true` to require phone 2FA verification via a one-time code sent to the phone number in order to access the documents.",
|
||||
"default": false
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"description": "A list of configurations for document form fields.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"name"
|
||||
],
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Document field name.",
|
||||
"example": "First Name"
|
||||
},
|
||||
"default_value": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
},
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"description": "Default value of the field. Use base64 encoded file or a public URL to the image file to set default signature or image fields.",
|
||||
"example": "Acme"
|
||||
},
|
||||
"readonly": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make it impossible for the submitter to edit predefined field value.",
|
||||
"default": false
|
||||
},
|
||||
"required": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to make the field required."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Field title displayed to the user instead of the name, shown on the signing form. Supports Markdown."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Field description displayed on the signing form. Supports Markdown."
|
||||
},
|
||||
"validation": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"pattern": {
|
||||
"type": "string",
|
||||
"description": "HTML field validation pattern string based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern specification.",
|
||||
"example": "[A-Z]{4}"
|
||||
},
|
||||
"message": {
|
||||
"type": "string",
|
||||
"description": "A custom error message to display on validation failure."
|
||||
},
|
||||
"min": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Minimum allowed number value or date depending on field type."
|
||||
},
|
||||
"max": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "number"
|
||||
},
|
||||
{
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"description": "Maximum allowed number value or date depending on field type."
|
||||
},
|
||||
"step": {
|
||||
"type": "number",
|
||||
"description": "Increment step for number field. Pass 1 to accept only integers, or 0.01 to accept decimal currency."
|
||||
}
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"font_size": {
|
||||
"type": "integer",
|
||||
"description": "Font size of the field value in pixels.",
|
||||
"example": 12
|
||||
},
|
||||
"font_type": {
|
||||
"type": "string",
|
||||
"description": "Font type of the field value.",
|
||||
"enum": [
|
||||
"bold",
|
||||
"italic",
|
||||
"bold_italic"
|
||||
]
|
||||
},
|
||||
"font": {
|
||||
"type": "string",
|
||||
"description": "Font family of the field value.",
|
||||
"enum": [
|
||||
"Times",
|
||||
"Helvetica",
|
||||
"Courier"
|
||||
]
|
||||
},
|
||||
"color": {
|
||||
"type": "string",
|
||||
"description": "Font color of the field value.",
|
||||
"enum": [
|
||||
"black",
|
||||
"white",
|
||||
"blue"
|
||||
],
|
||||
"default": "black"
|
||||
},
|
||||
"align": {
|
||||
"type": "string",
|
||||
"description": "Horizontal alignment of the field text value.",
|
||||
"enum": [
|
||||
"left",
|
||||
"center",
|
||||
"right"
|
||||
],
|
||||
"default": "left"
|
||||
},
|
||||
"valign": {
|
||||
"type": "string",
|
||||
"description": "Vertical alignment of the field text value.",
|
||||
"enum": [
|
||||
"top",
|
||||
"center",
|
||||
"bottom"
|
||||
],
|
||||
"default": "center"
|
||||
},
|
||||
"format": {
|
||||
"type": "string",
|
||||
"description": "The data format for different field types.<br>- Date field: accepts formats such as DD/MM/YYYY (default: MM/DD/YYYY).<br>- Signature field: accepts drawn, typed, drawn_or_typed (default), or upload.<br>- Number field: accepts currency formats such as usd, eur, gbp.",
|
||||
"example": "DD/MM/YYYY"
|
||||
},
|
||||
"price": {
|
||||
"type": "number",
|
||||
"description": "Price value of the payment field. Only for payment fields.",
|
||||
"example": 99.99
|
||||
},
|
||||
"currency": {
|
||||
"type": "string",
|
||||
"description": "Currency value of the payment field. Only for payment fields.",
|
||||
"enum": [
|
||||
"USD",
|
||||
"EUR",
|
||||
"GBP",
|
||||
"CAD",
|
||||
"AUD"
|
||||
],
|
||||
"default": "USD"
|
||||
},
|
||||
"mask": {
|
||||
"description": "Set `true` to make sensitive data masked on the document.",
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "integer"
|
||||
},
|
||||
{
|
||||
"type": "boolean"
|
||||
}
|
||||
],
|
||||
"default": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"roles": {
|
||||
"type": "array",
|
||||
"description": "A list of roles for the submitter. Use this param to merge multiple roles into one submitter.",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"message": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"subject": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email subject."
|
||||
},
|
||||
"body": {
|
||||
"type": "string",
|
||||
"description": "Custom signature request email body. Can include the following variables: {{submission.name}}, {{submitter.link}}, {{account.name}}."
|
||||
}
|
||||
}
|
||||
},
|
||||
"merge_documents": {
|
||||
"type": "boolean",
|
||||
"description": "Set `true` to merge the documents into a single PDF file.",
|
||||
"default": false
|
||||
},
|
||||
"remove_tags": {
|
||||
"type": "boolean",
|
||||
"description": "Pass `false` to disable the removal of {{text}} tags from the PDF. This can be used along with transparent text tags for faster and more robust PDF processing.",
|
||||
"default": true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -450,6 +450,11 @@ const token = jwt.sign({
|
||||
"default": false,
|
||||
"description": "Set `true` to display field name placeholders instead of the field type icons."
|
||||
},
|
||||
"withSignatureId": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"description": "Set to `true` to enable Signature ID by default for newly added fields. If set to `false`, the Signature ID toggle will be displayed under field settings, with the Signature ID turned off by default."
|
||||
},
|
||||
"onlyDefinedFields": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
@@ -462,6 +467,12 @@ const token = jwt.sign({
|
||||
"default": false,
|
||||
"description": "Show template in preview mode without ability to edit it."
|
||||
},
|
||||
"inputMode": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Open template in data input mode to prefill fields with default values."
|
||||
},
|
||||
"autosave": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
|
||||
@@ -414,12 +414,23 @@
|
||||
"default": false,
|
||||
"description": "Set `true` to display field name placeholders instead of the field type icons."
|
||||
},
|
||||
"data-with-signature-id": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"description": "Set to `true` to enable Signature ID by default for newly added fields. If set to `false`, the Signature ID toggle will be displayed under field settings, with the Signature ID turned off by default."
|
||||
},
|
||||
"data-preview": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Show template in preview mode without ability to edit it."
|
||||
},
|
||||
"data-input-mode": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Open template in data input mode to prefill fields with default values."
|
||||
},
|
||||
"data-only-defined-fields": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
|
||||
@@ -441,6 +441,11 @@ const token = jwt.sign({
|
||||
"default": false,
|
||||
"description": "Set `true` to display field name placeholders instead of the field type icons."
|
||||
},
|
||||
"withSignatureId": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"description": "Set to `true` to enable Signature ID by default for newly added fields. If set to `false`, the Signature ID toggle will be displayed under field settings, with the Signature ID turned off by default."
|
||||
},
|
||||
"onlyDefinedFields": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
@@ -453,6 +458,12 @@ const token = jwt.sign({
|
||||
"default": false,
|
||||
"description": "Show template in preview mode without ability to edit it."
|
||||
},
|
||||
"inputMode": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Open template in data input mode to prefill fields with default values."
|
||||
},
|
||||
"autosave": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
|
||||
@@ -456,6 +456,11 @@ const token = jwt.sign({
|
||||
"default": false,
|
||||
"description": "Set `true` to display field name placeholders instead of the field type icons."
|
||||
},
|
||||
"with-signature-id": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"description": "Set to `true` to enable Signature ID by default for newly added fields. If set to `false`, the Signature ID toggle will be displayed under field settings, with the Signature ID turned off by default."
|
||||
},
|
||||
"autosave": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
@@ -468,6 +473,12 @@ const token = jwt.sign({
|
||||
"default": false,
|
||||
"description": "Show template in preview mode without ability to edit it."
|
||||
},
|
||||
"input-mode": {
|
||||
"type": "boolean",
|
||||
"required": false,
|
||||
"default": false,
|
||||
"description": "Open template in data input mode to prefill fields with default values."
|
||||
},
|
||||
"language": {
|
||||
"type": "string",
|
||||
"required": false,
|
||||
|
||||
@@ -7,12 +7,14 @@
|
||||
|
||||
<docuseal-form
|
||||
id="docusealForm"
|
||||
data-src="https://docuseal.com/d/{{template_slug}}"
|
||||
data-email="{{signer_email}}">
|
||||
data-src="https://docuseal.com/d/{{ template_slug }}"
|
||||
data-email="{{ signer_email }}">
|
||||
</docuseal-form>
|
||||
|
||||
<script>
|
||||
window.docusealForm.addEventListener('completed', (e) => e.detail)
|
||||
window.docusealForm.addEventListener('completed', (e) => {
|
||||
console.log(e.detail)
|
||||
})
|
||||
</script>
|
||||
|
||||
```
|
||||
|
||||
+1101
-34
File diff suppressed because it is too large
Load Diff
@@ -146,6 +146,10 @@ During the form filling and signing process, 3 types of events may occur and are
|
||||
"type": "string",
|
||||
"description": "The submission URL."
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object."
|
||||
},
|
||||
"created_at": {
|
||||
"type": "string",
|
||||
"description": "The submission creation date.",
|
||||
|
||||
@@ -216,6 +216,10 @@ Get submission creation, completion, expiration, and archiving notifications usi
|
||||
}
|
||||
}
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Dynamic content variables object."
|
||||
},
|
||||
"created_by_user": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Accounts
|
||||
LINK_EXPIRES_AT = 40.minutes
|
||||
|
||||
module_function
|
||||
|
||||
def create_duplicate(account)
|
||||
@@ -185,4 +187,11 @@ module Accounts
|
||||
rescue TZInfo::InvalidTimezoneIdentifier
|
||||
'UTC'
|
||||
end
|
||||
|
||||
def link_expires_at(account)
|
||||
return if AccountConfig.find_or_initialize_by(account: account,
|
||||
key: AccountConfig::DOWNLOAD_LINKS_EXPIRE_KEY).value == false
|
||||
|
||||
LINK_EXPIRES_AT.from_now
|
||||
end
|
||||
end
|
||||
|
||||
@@ -102,6 +102,7 @@ module ReplaceEmailVariables
|
||||
return unless submitter
|
||||
|
||||
value = submitter.try(field_name)
|
||||
expires_at = nil
|
||||
|
||||
if value_name
|
||||
field = (submission.template_fields || submission.template.fields).find { |e| e['name'] == value_name }
|
||||
@@ -114,7 +115,11 @@ module ReplaceEmailVariables
|
||||
|
||||
attachment = submitter.attachments.find { |e| e.uuid == attachment_uuid }
|
||||
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob) if attachment
|
||||
if attachment
|
||||
expires_at ||= Accounts.link_expires_at(Account.new(id: submission.account_id))
|
||||
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:)
|
||||
end
|
||||
else
|
||||
value[field&.dig('uuid')]
|
||||
end
|
||||
|
||||
+2
-1
@@ -70,6 +70,7 @@ module Submissions
|
||||
|
||||
def update_template_fields!(submission)
|
||||
submission.template_fields = submission.template.fields
|
||||
submission.variables_schema = submission.template.variables_schema
|
||||
submission.template_schema = submission.template.schema
|
||||
submission.template_submitters = submission.template.submitters if submission.template_submitters.blank?
|
||||
|
||||
@@ -239,7 +240,7 @@ module Submissions
|
||||
|
||||
item['conditions'].each_with_object([]) do |condition, acc|
|
||||
result =
|
||||
if fields_index[condition['field_uuid']]['submitter_uuid'] == include_submitter_uuid
|
||||
if fields_index.dig(condition['field_uuid'], 'submitter_uuid') == include_submitter_uuid
|
||||
submitter_conditions_acc << condition if submitter_conditions_acc
|
||||
|
||||
true
|
||||
|
||||
@@ -22,6 +22,7 @@ module Submissions
|
||||
account_id: user.account_id,
|
||||
preferences: set_submission_preferences,
|
||||
name: with_template ? attrs[:name] : (attrs[:name] || template.name),
|
||||
variables: attrs[:variables] || {},
|
||||
expire_at:,
|
||||
template_submitters: [], submitters_order:)
|
||||
|
||||
@@ -139,9 +140,11 @@ module Submissions
|
||||
end
|
||||
|
||||
if template_fields != (submission.template_fields || submission.template.fields) ||
|
||||
submitters_attrs.any? { |e| e[:completed].present? } || !with_template
|
||||
submitters_attrs.any? { |e| e[:completed].present? } || !with_template || submission.variables.present?
|
||||
submission.template_fields = template_fields
|
||||
submission.template_schema = submission.template.schema if submission.template_schema.blank?
|
||||
submission.variables_schema = submission.template.variables_schema if submission.template_id &&
|
||||
submission.variables_schema.blank?
|
||||
end
|
||||
|
||||
submission
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Submissions
|
||||
module EnsureAuditGenerated
|
||||
WAIT_FOR_RETRY = 2.seconds
|
||||
CHECK_EVENT_INTERVAL = 1.second
|
||||
CHECK_COMPLETE_TIMEOUT = 90.seconds
|
||||
KEY_PREFIX = 'audit_trail'
|
||||
|
||||
WaitForCompleteTimeout = Class.new(StandardError)
|
||||
NotCompletedYet = Class.new(StandardError)
|
||||
|
||||
module_function
|
||||
|
||||
def call(submission)
|
||||
return nil unless submission
|
||||
|
||||
raise NotCompletedYet unless submission.submitters.all?(&:completed_at?)
|
||||
|
||||
key = [KEY_PREFIX, submission.id].join(':')
|
||||
|
||||
if ApplicationRecord.uncached { LockEvent.exists?(key:, event_name: :complete) }
|
||||
return submission.audit_trail_attachment
|
||||
end
|
||||
|
||||
events = ApplicationRecord.uncached { LockEvent.where(key:).order(:id).to_a }
|
||||
|
||||
if events.present? && events.last.event_name.in?(%w[start retry])
|
||||
wait_for_complete_or_fail(submission)
|
||||
else
|
||||
LockEvent.create!(key:, event_name: events.present? ? :retry : :start)
|
||||
|
||||
result = Submissions::GenerateAuditTrail.call(submission)
|
||||
|
||||
LockEvent.create!(key:, event_name: :complete)
|
||||
|
||||
result
|
||||
end
|
||||
rescue ActiveRecord::RecordNotUnique
|
||||
sleep WAIT_FOR_RETRY
|
||||
|
||||
retry
|
||||
rescue StandardError => e
|
||||
Rollbar.error(e) if defined?(Rollbar)
|
||||
Rails.logger.error(e)
|
||||
|
||||
LockEvent.create!(key:, event_name: :fail)
|
||||
|
||||
raise
|
||||
end
|
||||
|
||||
def wait_for_complete_or_fail(submission)
|
||||
total_wait_time = 0
|
||||
|
||||
loop do
|
||||
sleep CHECK_EVENT_INTERVAL
|
||||
total_wait_time += CHECK_EVENT_INTERVAL
|
||||
|
||||
last_event =
|
||||
ApplicationRecord.uncached do
|
||||
LockEvent.where(key: [KEY_PREFIX, submission.id].join(':')).order(:id).last
|
||||
end
|
||||
|
||||
if last_event.event_name.in?(%w[complete fail])
|
||||
break ApplicationRecord.uncached do
|
||||
ActiveStorage::Attachment.find_by(record: submission, name: 'audit_trail')
|
||||
end
|
||||
end
|
||||
|
||||
raise WaitForCompleteTimeout if total_wait_time > CHECK_COMPLETE_TIMEOUT
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,74 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Submissions
|
||||
module EnsureCombinedGenerated
|
||||
WAIT_FOR_RETRY = 2.seconds
|
||||
CHECK_EVENT_INTERVAL = 1.second
|
||||
CHECK_COMPLETE_TIMEOUT = 90.seconds
|
||||
KEY_PREFIX = 'combined_document'
|
||||
|
||||
WaitForCompleteTimeout = Class.new(StandardError)
|
||||
NotCompletedYet = Class.new(StandardError)
|
||||
|
||||
module_function
|
||||
|
||||
def call(submitter)
|
||||
return nil unless submitter
|
||||
|
||||
raise NotCompletedYet unless submitter.completed_at?
|
||||
|
||||
key = [KEY_PREFIX, submitter.id].join(':')
|
||||
|
||||
if ApplicationRecord.uncached { LockEvent.exists?(key:, event_name: :complete) }
|
||||
return submitter.submission.combined_document_attachment
|
||||
end
|
||||
|
||||
events = ApplicationRecord.uncached { LockEvent.where(key:).order(:id).to_a }
|
||||
|
||||
if events.present? && events.last.event_name.in?(%w[start retry])
|
||||
wait_for_complete_or_fail(submitter)
|
||||
else
|
||||
LockEvent.create!(key:, event_name: events.present? ? :retry : :start)
|
||||
|
||||
result = Submissions::GenerateCombinedAttachment.call(submitter)
|
||||
|
||||
LockEvent.create!(key:, event_name: :complete)
|
||||
|
||||
result
|
||||
end
|
||||
rescue ActiveRecord::RecordNotUnique
|
||||
sleep WAIT_FOR_RETRY
|
||||
|
||||
retry
|
||||
rescue StandardError => e
|
||||
Rollbar.error(e) if defined?(Rollbar)
|
||||
Rails.logger.error(e)
|
||||
|
||||
LockEvent.create!(key:, event_name: :fail)
|
||||
|
||||
raise
|
||||
end
|
||||
|
||||
def wait_for_complete_or_fail(submitter)
|
||||
total_wait_time = 0
|
||||
|
||||
loop do
|
||||
sleep CHECK_EVENT_INTERVAL
|
||||
total_wait_time += CHECK_EVENT_INTERVAL
|
||||
|
||||
last_event =
|
||||
ApplicationRecord.uncached do
|
||||
LockEvent.where(key: [KEY_PREFIX, submitter.id].join(':')).order(:id).last
|
||||
end
|
||||
|
||||
if last_event.event_name.in?(%w[complete fail])
|
||||
break ApplicationRecord.uncached do
|
||||
ActiveStorage::Attachment.find_by(record: submitter.submission, name: 'combined_document')
|
||||
end
|
||||
end
|
||||
|
||||
raise WaitForCompleteTimeout if total_wait_time > CHECK_COMPLETE_TIMEOUT
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -16,21 +16,20 @@ module Submissions
|
||||
|
||||
raise NotCompletedYet unless submitter.completed_at?
|
||||
|
||||
return submitter.documents if ApplicationRecord.uncached { submitter.document_generation_events.complete.exists? }
|
||||
key = ['result_attachments', submitter.id].join(':')
|
||||
|
||||
events =
|
||||
ApplicationRecord.uncached do
|
||||
DocumentGenerationEvent.where(submitter:).order(:created_at).to_a
|
||||
end
|
||||
return submitter.documents if ApplicationRecord.uncached { LockEvent.exists?(key:, event_name: :complete) }
|
||||
|
||||
events = ApplicationRecord.uncached { LockEvent.where(key:).order(:id).to_a }
|
||||
|
||||
if events.present? && events.last.event_name.in?(%w[start retry])
|
||||
wait_for_complete_or_fail(submitter)
|
||||
else
|
||||
submitter.document_generation_events.create!(event_name: events.present? ? :retry : :start)
|
||||
LockEvent.create!(key:, event_name: events.present? ? :retry : :start)
|
||||
|
||||
documents = GenerateResultAttachments.call(submitter)
|
||||
|
||||
submitter.document_generation_events.create!(event_name: :complete)
|
||||
LockEvent.create!(key:, event_name: :complete)
|
||||
|
||||
documents
|
||||
end
|
||||
@@ -42,7 +41,7 @@ module Submissions
|
||||
Rollbar.error(e) if defined?(Rollbar)
|
||||
Rails.logger.error(e)
|
||||
|
||||
submitter.document_generation_events.create!(event_name: :fail)
|
||||
LockEvent.create!(key:, event_name: :fail)
|
||||
|
||||
raise
|
||||
end
|
||||
@@ -56,7 +55,7 @@ module Submissions
|
||||
|
||||
last_event =
|
||||
ApplicationRecord.uncached do
|
||||
DocumentGenerationEvent.where(submitter:).order(:created_at).last
|
||||
LockEvent.where(key: ['result_attachments', submitter.id].join(':')).order(:id).last
|
||||
end
|
||||
|
||||
break submitter.documents.reload if last_event.event_name.in?(%w[complete fail])
|
||||
|
||||
@@ -113,11 +113,13 @@ module Submissions
|
||||
|
||||
configs = submission.account.account_configs.where(key: [AccountConfig::WITH_AUDIT_VALUES_KEY,
|
||||
AccountConfig::WITH_SIGNATURE_ID,
|
||||
AccountConfig::WITH_FILE_LINKS_KEY,
|
||||
AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY])
|
||||
|
||||
last_submitter = submission.submitters.select(&:completed_at).max_by(&:completed_at)
|
||||
|
||||
with_signature_id = configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID }&.value == true
|
||||
with_file_links = configs.find { |c| c.key == AccountConfig::WITH_FILE_LINKS_KEY }&.value == true
|
||||
with_audit_values = configs.find { |c| c.key == AccountConfig::WITH_AUDIT_VALUES_KEY }&.value != false
|
||||
with_submitter_timezone = configs.find { |c| c.key == AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY }&.value == true
|
||||
|
||||
@@ -196,7 +198,7 @@ module Submissions
|
||||
|
||||
composer.draw_box(divider)
|
||||
|
||||
documents_data = Submitters.select_attachments_for_download(last_submitter).map do |document|
|
||||
documents_data = select_attachments(last_submitter).map do |document|
|
||||
original_documents = submission.schema_documents.select do |e|
|
||||
e.uuid == (document.metadata['original_uuid'] || document.uuid)
|
||||
end.presence
|
||||
@@ -391,8 +393,13 @@ module Submissions
|
||||
composer.formatted_text_box(
|
||||
Array.wrap(value).map do |uuid|
|
||||
attachment = submitter.attachments.find { |a| a.uuid == uuid }
|
||||
|
||||
link =
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob)
|
||||
if with_file_links
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob)
|
||||
else
|
||||
r.submissions_preview_url(submission.slug, **Docuseal.default_url_options)
|
||||
end
|
||||
|
||||
{ link:, text: "#{attachment.filename}\n", style: :link }
|
||||
end,
|
||||
@@ -472,6 +479,16 @@ module Submissions
|
||||
'Signed with DocuSeal.com'
|
||||
end
|
||||
|
||||
def select_attachments(submitter)
|
||||
original_documents = submitter.submission.schema_documents.preload(:blob)
|
||||
is_more_than_two_images = original_documents.count(&:image?) > 1
|
||||
|
||||
submitter.documents.preload(:blob).reject do |attachment|
|
||||
is_more_than_two_images &&
|
||||
original_documents.find { |a| a.uuid == (attachment.metadata['original_uuid'] || attachment.uuid) }&.image?
|
||||
end
|
||||
end
|
||||
|
||||
def maybe_add_background(_canvas, _submission, _page_size); end
|
||||
|
||||
def show_verify?(submission)
|
||||
@@ -489,6 +506,10 @@ module Submissions
|
||||
padding: [5, 0, 0, 8],
|
||||
position: :float, text_align: :left)
|
||||
end
|
||||
|
||||
def r
|
||||
Rails.application.routes.url_helpers
|
||||
end
|
||||
# rubocop:enable Metrics
|
||||
end
|
||||
end
|
||||
|
||||
@@ -6,8 +6,8 @@ module Submissions
|
||||
|
||||
module_function
|
||||
|
||||
def call(submissions, format: :csv)
|
||||
rows = build_table_rows(submissions)
|
||||
def call(submissions, format: :csv, expires_at: nil)
|
||||
rows = build_table_rows(submissions, expires_at:)
|
||||
|
||||
if format.to_sym == :csv
|
||||
rows_to_csv(rows)
|
||||
@@ -57,7 +57,7 @@ module Submissions
|
||||
headers.map { |key| row.find { |e| e[:name] == key }&.dig(:value) }
|
||||
end
|
||||
|
||||
def build_table_rows(submissions)
|
||||
def build_table_rows(submissions, expires_at: nil)
|
||||
submissions.preload(submitters: [attachments_attachments: :blob, documents_attachments: :blob])
|
||||
.find_each.map do |submission|
|
||||
submission_data = []
|
||||
@@ -69,7 +69,7 @@ module Submissions
|
||||
|
||||
submission_data += build_submission_data(submitter, submitter_name, submitters_count)
|
||||
|
||||
submission_data += submitter_formatted_fields(submitter).map do |field|
|
||||
submission_data += submitter_formatted_fields(submitter, expires_at:).map do |field|
|
||||
{
|
||||
name: column_name(field[:name], submitter_name, submitters_count),
|
||||
value: field[:value]
|
||||
@@ -81,7 +81,7 @@ module Submissions
|
||||
submission_data += submitter.documents.map.with_index(1) do |attachment, index|
|
||||
{
|
||||
name: "#{I18n.t('document')} #{index}",
|
||||
value: ActiveStorage::Blob.proxy_url(attachment.blob)
|
||||
value: ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:)
|
||||
}
|
||||
end
|
||||
end
|
||||
@@ -123,7 +123,7 @@ module Submissions
|
||||
submitters_count > 1 ? "#{submitter_name} - #{name}" : name
|
||||
end
|
||||
|
||||
def submitter_formatted_fields(submitter)
|
||||
def submitter_formatted_fields(submitter, expires_at: nil)
|
||||
fields = submitter.submission.template_fields || submitter.submission.template.fields
|
||||
|
||||
template_fields = fields.select { |f| f['submitter_uuid'] == submitter.uuid }
|
||||
@@ -142,11 +142,13 @@ module Submissions
|
||||
value =
|
||||
if template_field_type.in?(%w[image signature])
|
||||
attachment = attachments_index[submitter_value]
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob) if attachment
|
||||
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:) if attachment
|
||||
elsif template_field_type == 'file'
|
||||
Array.wrap(submitter_value).compact_blank.filter_map do |e|
|
||||
attachment = attachments_index[e]
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob) if attachment
|
||||
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:) if attachment
|
||||
end
|
||||
else
|
||||
submitter_value
|
||||
|
||||
@@ -15,9 +15,11 @@ module Submissions
|
||||
configs = submission.account.account_configs.where(key: [AccountConfig::FLATTEN_RESULT_PDF_KEY,
|
||||
AccountConfig::WITH_SIGNATURE_ID,
|
||||
AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY,
|
||||
AccountConfig::WITH_FILE_LINKS_KEY,
|
||||
AccountConfig::WITH_SIGNATURE_ID_REASON_KEY])
|
||||
|
||||
with_signature_id = configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID }&.value == true
|
||||
with_file_links = configs.find { |c| c.key == AccountConfig::WITH_FILE_LINKS_KEY }&.value == true
|
||||
is_flatten = configs.find { |c| c.key == AccountConfig::FLATTEN_RESULT_PDF_KEY }&.value != false
|
||||
with_submitter_timezone = configs.find { |c| c.key == AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY }&.value == true
|
||||
with_signature_id_reason =
|
||||
@@ -34,7 +36,7 @@ module Submissions
|
||||
submitters.preload(attachments_attachments: :blob).each_with_index do |s, index|
|
||||
GenerateResultAttachments.fill_submitter_fields(s, submission.account, pdfs_index,
|
||||
with_signature_id:, is_flatten:, with_headings: index.zero?,
|
||||
with_submitter_timezone:,
|
||||
with_submitter_timezone:, with_file_links:,
|
||||
with_signature_id_reason:)
|
||||
end
|
||||
|
||||
|
||||
@@ -139,12 +139,14 @@ module Submissions
|
||||
def generate_pdfs(submitter)
|
||||
configs = submitter.account.account_configs.where(key: [AccountConfig::FLATTEN_RESULT_PDF_KEY,
|
||||
AccountConfig::WITH_SIGNATURE_ID,
|
||||
AccountConfig::WITH_FILE_LINKS_KEY,
|
||||
AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY,
|
||||
AccountConfig::WITH_SIGNATURE_ID_REASON_KEY])
|
||||
|
||||
with_signature_id = configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID }&.value == true
|
||||
is_flatten = configs.find { |c| c.key == AccountConfig::FLATTEN_RESULT_PDF_KEY }&.value != false
|
||||
with_submitter_timezone = configs.find { |c| c.key == AccountConfig::WITH_SUBMITTER_TIMEZONE_KEY }&.value == true
|
||||
with_file_links = configs.find { |c| c.key == AccountConfig::WITH_FILE_LINKS_KEY }&.value == true
|
||||
with_signature_id_reason =
|
||||
configs.find { |c| c.key == AccountConfig::WITH_SIGNATURE_ID_REASON_KEY }&.value != false
|
||||
|
||||
@@ -192,22 +194,25 @@ module Submissions
|
||||
|
||||
fill_submitter_fields(submitter, submitter.account, pdfs_index, with_signature_id:, is_flatten:,
|
||||
with_submitter_timezone:,
|
||||
with_file_links:,
|
||||
with_signature_id_reason:)
|
||||
end
|
||||
|
||||
def fill_submitter_fields(submitter, account, pdfs_index, with_signature_id:, is_flatten:, with_headings: nil,
|
||||
with_submitter_timezone: false, with_signature_id_reason: true)
|
||||
with_submitter_timezone: false, with_signature_id_reason: true, with_file_links: nil)
|
||||
cell_layouter = HexaPDF::Layout::TextLayouter.new(text_valign: :center, text_align: :center)
|
||||
|
||||
attachments_data_cache = {}
|
||||
|
||||
return pdfs_index if submitter.submission.template_fields.blank?
|
||||
submission = submitter.submission
|
||||
|
||||
with_headings = find_last_submitter(submitter.submission, submitter:).blank? if with_headings.nil?
|
||||
return pdfs_index if submission.template_fields.blank?
|
||||
|
||||
with_headings = find_last_submitter(submission, submitter:).blank? if with_headings.nil?
|
||||
|
||||
locale = submitter.metadata.fetch('lang', account.locale)
|
||||
|
||||
submitter.submission.template_fields.each do |field|
|
||||
submission.template_fields.each do |field|
|
||||
next if field['type'] == 'heading' && !with_headings
|
||||
next if field['submitter_uuid'] != submitter.uuid && field['type'] != 'heading'
|
||||
|
||||
@@ -224,7 +229,7 @@ module Submissions
|
||||
|
||||
page[:Annots] ||= []
|
||||
page[:Annots] = page[:Annots].try(:reject) do |e|
|
||||
next if e.is_a?(Integer)
|
||||
next if e.is_a?(Integer) || e.is_a?(Symbol)
|
||||
|
||||
e.present? && e[:A] && e[:A][:URI].to_s.starts_with?('file:///docuseal_field')
|
||||
end || page[:Annots]
|
||||
@@ -464,6 +469,13 @@ module Submissions
|
||||
|
||||
diff = ((area['h'] * height) / 2) - (lines.sum(&:height) / 2)
|
||||
|
||||
url =
|
||||
if with_file_links
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob)
|
||||
else
|
||||
r.submissions_preview_url(submission.slug, **Docuseal.default_url_options)
|
||||
end
|
||||
|
||||
page[:Annots] << pdf.add(
|
||||
{
|
||||
Type: :Annot, Subtype: :Link,
|
||||
@@ -475,8 +487,7 @@ module Submissions
|
||||
height - (area['y'] * height) - lines[..next_index].sum(&:height) +
|
||||
height_diff - (height_diff.zero? ? diff : 0)
|
||||
],
|
||||
A: { Type: :Action, S: :URI,
|
||||
URI: ActiveStorage::Blob.proxy_url(attachment.blob) }
|
||||
A: { Type: :Action, S: :URI, URI: url }
|
||||
}
|
||||
)
|
||||
|
||||
@@ -747,11 +758,15 @@ module Submissions
|
||||
def maybe_rotate_pdf(pdf)
|
||||
return pdf if pdf.pages.size > MAX_PAGE_ROTATE
|
||||
|
||||
is_pages_rotated = pdf.pages.root[:Rotate].present? && pdf.pages.root[:Rotate] != 0
|
||||
|
||||
pdf.pages.root[:Rotate] = 0 if is_pages_rotated
|
||||
|
||||
is_rotated = pdf.pages.filter_map do |page|
|
||||
page.rotate(0, flatten: true) if page[:Rotate] != 0
|
||||
end.present?
|
||||
|
||||
return pdf unless is_rotated
|
||||
return pdf if !is_rotated && !is_pages_rotated
|
||||
|
||||
io = StringIO.new
|
||||
|
||||
@@ -873,7 +888,7 @@ module Submissions
|
||||
end
|
||||
end
|
||||
|
||||
def h
|
||||
def r
|
||||
Rails.application.routes.url_helpers
|
||||
end
|
||||
end
|
||||
|
||||
@@ -4,7 +4,6 @@ module Submissions
|
||||
module SerializeForApi
|
||||
SERIALIZE_PARAMS = {
|
||||
only: %i[id name slug source submitters_order expire_at created_at updated_at archived_at],
|
||||
methods: %i[audit_log_url combined_document_url],
|
||||
include: {
|
||||
submitters: { only: %i[id] },
|
||||
template: { only: %i[id name external_id created_at updated_at],
|
||||
@@ -15,23 +14,24 @@ module Submissions
|
||||
|
||||
module_function
|
||||
|
||||
def call(submission, submitters = nil, params = {}, with_events: true, with_documents: true, with_values: true)
|
||||
def call(submission, submitters = nil, params = {}, with_events: true, with_documents: true, with_values: true,
|
||||
expires_at: Accounts.link_expires_at(Account.new(id: submission.account_id)))
|
||||
submitters ||= submission.submitters.preload(documents_attachments: :blob, attachments_attachments: :blob)
|
||||
|
||||
serialized_submitters = submitters.map do |submitter|
|
||||
Submitters::SerializeForApi.call(submitter, with_documents:, with_events: false, with_values:, params:)
|
||||
Submitters::SerializeForApi.call(submitter, with_documents:, with_events: false, with_values:, params:,
|
||||
expires_at:)
|
||||
end
|
||||
|
||||
json = submission.as_json(SERIALIZE_PARAMS)
|
||||
|
||||
json['variables'] = (submission.variables || {}).as_json
|
||||
json['created_by_user'] ||= nil
|
||||
|
||||
if with_events
|
||||
json['submission_events'] = Submitters::SerializeForApi.serialize_events(submission.submission_events)
|
||||
end
|
||||
|
||||
json['combined_document_url'] ||= maybe_build_combined_url(submitters, submission, params)
|
||||
|
||||
if submitters.all?(&:completed_at?)
|
||||
last_submitter = submitters.max_by(&:completed_at)
|
||||
|
||||
@@ -39,10 +39,16 @@ module Submissions
|
||||
json['documents'] = serialized_submitters.find { |e| e['id'] == last_submitter.id }['documents']
|
||||
end
|
||||
|
||||
json['audit_log_url'] = submission.audit_log_url(expires_at:)
|
||||
json['combined_document_url'] = submission.combined_document_url(expires_at:)
|
||||
json['combined_document_url'] ||= maybe_build_combined_url(submitters, submission, params, expires_at:)
|
||||
|
||||
json['status'] = 'completed'
|
||||
json['completed_at'] = last_submitter.completed_at.as_json
|
||||
else
|
||||
json['documents'] = [] if with_documents
|
||||
json['audit_log_url'] = nil
|
||||
json['combined_document_url'] = nil
|
||||
json['status'] = build_status(submission, submitters)
|
||||
json['completed_at'] = nil
|
||||
end
|
||||
@@ -60,7 +66,7 @@ module Submissions
|
||||
end
|
||||
end
|
||||
|
||||
def maybe_build_combined_url(submitters, submission, params)
|
||||
def maybe_build_combined_url(submitters, submission, params, expires_at: nil)
|
||||
return unless submitters.all?(&:completed_at?)
|
||||
|
||||
attachment = submission.combined_document_attachment
|
||||
@@ -68,10 +74,10 @@ module Submissions
|
||||
if !attachment && params[:include].to_s.include?('combined_document_url')
|
||||
submitter = submitters.max_by(&:completed_at)
|
||||
|
||||
attachment = Submissions::GenerateCombinedAttachment.call(submitter)
|
||||
attachment = Submissions::EnsureCombinedGenerated.call(submitter)
|
||||
end
|
||||
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob) if attachment
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:) if attachment
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+3
-2
@@ -94,8 +94,9 @@ module Submitters
|
||||
def select_attachments_for_download(submitter)
|
||||
if AccountConfig.exists?(account_id: submitter.submission.account_id,
|
||||
key: AccountConfig::COMBINE_PDF_RESULT_KEY,
|
||||
value: true) && submitter.submission.combined_document_attachment
|
||||
return [submitter.submission.combined_document_attachment]
|
||||
value: true) &&
|
||||
submitter.submission.submitters.all?(&:completed_at?)
|
||||
return [submitter.submission.combined_document_attachment || Submissions::EnsureCombinedGenerated.call(submitter)]
|
||||
end
|
||||
|
||||
original_documents = submitter.submission.schema_documents.preload(:blob)
|
||||
|
||||
@@ -11,7 +11,7 @@ module Submitters
|
||||
module_function
|
||||
|
||||
def call(submitter, with_template: false, with_events: false, with_documents: true, with_urls: false,
|
||||
with_values: true, params: {})
|
||||
with_values: true, params: {}, expires_at: Accounts.link_expires_at(Account.new(id: submitter.account_id)))
|
||||
ActiveRecord::Associations::Preloader.new(
|
||||
records: [submitter],
|
||||
associations: if with_documents
|
||||
@@ -24,15 +24,19 @@ module Submitters
|
||||
additional_attrs = {}
|
||||
|
||||
if params[:include].to_s.include?('fields')
|
||||
additional_attrs['fields'] = SerializeForWebhook.build_fields_array(submitter)
|
||||
additional_attrs['fields'] = SerializeForWebhook.build_fields_array(submitter, expires_at:)
|
||||
end
|
||||
|
||||
if with_template
|
||||
additional_attrs['template'] = submitter.submission.template.as_json(only: %i[id name created_at updated_at])
|
||||
end
|
||||
|
||||
additional_attrs['values'] = SerializeForWebhook.build_values_array(submitter) if with_values
|
||||
additional_attrs['documents'] = SerializeForWebhook.build_documents_array(submitter) if with_documents
|
||||
additional_attrs['values'] = SerializeForWebhook.build_values_array(submitter, expires_at:) if with_values
|
||||
|
||||
if with_documents
|
||||
additional_attrs['documents'] = SerializeForWebhook.build_documents_array(submitter, expires_at:)
|
||||
end
|
||||
|
||||
additional_attrs['preferences'] = submitter.preferences.except('default_values')
|
||||
additional_attrs['submission_events'] = serialize_events(submitter.submission_events) if with_events
|
||||
|
||||
|
||||
@@ -10,13 +10,13 @@ module Submitters
|
||||
|
||||
module_function
|
||||
|
||||
def call(submitter)
|
||||
def call(submitter, expires_at: Accounts.link_expires_at(Account.new(id: submitter.account_id)))
|
||||
ActiveRecord::Associations::Preloader.new(
|
||||
records: [submitter], associations: [documents_attachments: :blob, attachments_attachments: :blob]
|
||||
).call
|
||||
|
||||
values = build_values_array(submitter)
|
||||
documents = build_documents_array(submitter)
|
||||
values = build_values_array(submitter, expires_at:)
|
||||
documents = build_documents_array(submitter, expires_at:)
|
||||
|
||||
submission = submitter.submission
|
||||
|
||||
@@ -32,23 +32,23 @@ module Submitters
|
||||
'preferences' => submitter.preferences.except('default_values'),
|
||||
'values' => values,
|
||||
'documents' => documents,
|
||||
'audit_log_url' => submitter.submission.audit_log_url,
|
||||
'audit_log_url' => submitter.submission.audit_log_url(expires_at:),
|
||||
'submission_url' => r.submissions_preview_url(submission.slug, **Docuseal.default_url_options),
|
||||
'template' => submission.template.as_json(
|
||||
only: %i[id name external_id created_at updated_at],
|
||||
methods: %i[folder_name]
|
||||
only: %i[id name external_id created_at updated_at], methods: %i[folder_name]
|
||||
),
|
||||
'submission' => {
|
||||
'id' => submission.id,
|
||||
'audit_log_url' => submission.audit_log_url,
|
||||
'combined_document_url' => submission.combined_document_url,
|
||||
'audit_log_url' => submission.audit_log_url(expires_at:),
|
||||
'combined_document_url' => submission.combined_document_url(expires_at:),
|
||||
'status' => build_submission_status(submission),
|
||||
'url' => r.submissions_preview_url(submission.slug, **Docuseal.default_url_options),
|
||||
'variables' => (submission.variables || {}).as_json,
|
||||
'created_at' => submission.created_at.as_json
|
||||
})
|
||||
end
|
||||
|
||||
def build_values_array(submitter)
|
||||
def build_values_array(submitter, expires_at: nil)
|
||||
fields = submitter.submission.template_fields.presence || submitter.submission&.template&.fields || []
|
||||
attachments_index = submitter.attachments.index_by(&:uuid)
|
||||
submitter_field_counters = Hash.new { 0 }
|
||||
@@ -64,13 +64,13 @@ module Submitters
|
||||
|
||||
next if !submitter.values.key?(field['uuid']) && !submitter.completed_at?
|
||||
|
||||
value = fetch_field_value(field, submitter.values[field['uuid']], attachments_index)
|
||||
value = fetch_field_value(field, submitter.values[field['uuid']], attachments_index, expires_at:)
|
||||
|
||||
{ 'field' => field_name, 'value' => value }
|
||||
end
|
||||
end
|
||||
|
||||
def build_fields_array(submitter)
|
||||
def build_fields_array(submitter, expires_at: nil)
|
||||
fields = submitter.submission.template_fields.presence || submitter.submission&.template&.fields || []
|
||||
attachments_index = submitter.attachments.index_by(&:uuid)
|
||||
submitter_field_counters = Hash.new { 0 }
|
||||
@@ -86,7 +86,7 @@ module Submitters
|
||||
|
||||
next if !submitter.values.key?(field['uuid']) && !submitter.completed_at?
|
||||
|
||||
value = fetch_field_value(field, submitter.values[field['uuid']], attachments_index)
|
||||
value = fetch_field_value(field, submitter.values[field['uuid']], attachments_index, expires_at:)
|
||||
|
||||
{ 'name' => field_name, 'uuid' => field['uuid'], 'value' => value, 'readonly' => field['readonly'] == true }
|
||||
end
|
||||
@@ -104,26 +104,26 @@ module Submitters
|
||||
end
|
||||
end
|
||||
|
||||
def build_documents_array(submitter)
|
||||
def build_documents_array(submitter, expires_at: nil)
|
||||
submitter.documents.map do |attachment|
|
||||
{ 'name' => attachment.filename.base, 'url' => rails_storage_proxy_url(attachment) }
|
||||
{ 'name' => attachment.filename.base, 'url' => rails_storage_proxy_url(attachment, expires_at:) }
|
||||
end
|
||||
end
|
||||
|
||||
def fetch_field_value(field, value, attachments_index)
|
||||
def fetch_field_value(field, value, attachments_index, expires_at: nil)
|
||||
if field['type'].in?(%w[image signature initials stamp payment])
|
||||
rails_storage_proxy_url(attachments_index[value])
|
||||
rails_storage_proxy_url(attachments_index[value], expires_at:)
|
||||
elsif field['type'] == 'file'
|
||||
Array.wrap(value).compact_blank.filter_map { |e| rails_storage_proxy_url(attachments_index[e]) }
|
||||
Array.wrap(value).compact_blank.filter_map { |e| rails_storage_proxy_url(attachments_index[e], expires_at:) }
|
||||
else
|
||||
value
|
||||
end
|
||||
end
|
||||
|
||||
def rails_storage_proxy_url(attachment)
|
||||
def rails_storage_proxy_url(attachment, expires_at: nil)
|
||||
return if attachment.blank?
|
||||
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob)
|
||||
ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:)
|
||||
end
|
||||
|
||||
def r
|
||||
|
||||
@@ -37,6 +37,10 @@ module Templates
|
||||
hash
|
||||
end
|
||||
|
||||
def maybe_assign_access(_template)
|
||||
nil
|
||||
end
|
||||
|
||||
def search(current_user, templates, keyword)
|
||||
if Docuseal.fulltext_search?
|
||||
fulltext_search(current_user, templates, keyword)
|
||||
|
||||
@@ -10,6 +10,7 @@ module Templates
|
||||
pdf.pages.flat_map.with_index do |page, index|
|
||||
(page[:Annots] || []).filter_map do |annot|
|
||||
next if annot.blank?
|
||||
next if annot.is_a?(Integer) || annot.is_a?(Symbol)
|
||||
next if annot[:A].blank? || annot[:A][:URI].blank?
|
||||
next unless annot[:Subtype] == :Link
|
||||
next if !annot[:A][:URI].starts_with?('https://') && !annot[:A][:URI].starts_with?('http://')
|
||||
|
||||
@@ -14,7 +14,8 @@ module Templates
|
||||
|
||||
module_function
|
||||
|
||||
def call(template, schema_documents = template.schema_documents.preload(:blob), preview_image_attachments = nil)
|
||||
def call(template, schema_documents: template.schema_documents.preload(:blob), preview_image_attachments: nil,
|
||||
expires_at: Accounts.link_expires_at(Account.new(id: template.account_id)))
|
||||
json = template.as_json(SERIALIZE_PARAMS)
|
||||
|
||||
preview_image_attachments ||=
|
||||
@@ -40,8 +41,8 @@ module Templates
|
||||
{
|
||||
'id' => attachment.id,
|
||||
'uuid' => attachment.uuid,
|
||||
'url' => ActiveStorage::Blob.proxy_url(attachment.blob),
|
||||
'preview_image_url' => first_page_blob && ActiveStorage::Blob.proxy_url(first_page_blob),
|
||||
'url' => ActiveStorage::Blob.proxy_url(attachment.blob, expires_at:),
|
||||
'preview_image_url' => first_page_blob && ActiveStorage::Blob.proxy_url(first_page_blob, expires_at:),
|
||||
'filename' => attachment.filename
|
||||
}
|
||||
end
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
FactoryBot.define do
|
||||
factory :email_event do
|
||||
account
|
||||
event_type { 'bounce' }
|
||||
message_id { SecureRandom.uuid }
|
||||
tag { 'submitter_invitation' }
|
||||
email { Faker::Internet.email }
|
||||
event_datetime { 1.hour.ago }
|
||||
end
|
||||
end
|
||||
@@ -298,6 +298,7 @@ describe 'Submission API' do
|
||||
completed_at: nil,
|
||||
created_at: submission.created_at,
|
||||
updated_at: submission.updated_at,
|
||||
variables: {},
|
||||
archived_at: nil,
|
||||
status: 'pending',
|
||||
submitters:,
|
||||
@@ -358,6 +359,7 @@ describe 'Submission API' do
|
||||
completed_at: nil,
|
||||
created_at: submission.created_at,
|
||||
updated_at: submission.updated_at,
|
||||
variables: {},
|
||||
archived_at: nil,
|
||||
submitters:,
|
||||
template: {
|
||||
|
||||
@@ -8,6 +8,10 @@ describe 'Templates API' do
|
||||
let(:folder) { create(:template_folder, account:) }
|
||||
let(:template_preferences) { { 'request_email_subject' => 'Subject text', 'request_email_body' => 'Body Text' } }
|
||||
|
||||
before do
|
||||
allow(Accounts).to receive(:link_expires_at).and_return(Accounts::LINK_EXPIRES_AT)
|
||||
end
|
||||
|
||||
describe 'GET /api/templates' do
|
||||
it 'returns a list of templates' do
|
||||
templates = [
|
||||
@@ -211,8 +215,8 @@ describe 'Templates API' do
|
||||
{
|
||||
id: template.documents.first.id,
|
||||
uuid: template.documents.first.uuid,
|
||||
url: ActiveStorage::Blob.proxy_url(attachment.blob),
|
||||
preview_image_url: ActiveStorage::Blob.proxy_url(first_page_blob),
|
||||
url: ActiveStorage::Blob.proxy_url(attachment.blob, expires_at: Accounts::LINK_EXPIRES_AT),
|
||||
preview_image_url: ActiveStorage::Blob.proxy_url(first_page_blob, expires_at: Accounts::LINK_EXPIRES_AT),
|
||||
filename: 'sample-document.pdf'
|
||||
}
|
||||
],
|
||||
@@ -235,7 +239,7 @@ describe 'Templates API' do
|
||||
folder_name: folder.name,
|
||||
source: 'native',
|
||||
external_id: template.external_id,
|
||||
application_key: template.external_id # Backward compatibility
|
||||
application_key: template.external_id
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
@@ -14,4 +14,26 @@ RSpec.describe 'API Settings' do
|
||||
token = user.access_token.token
|
||||
expect(page).to have_field('X-Auth-Token', with: token.sub(token[5..], '*' * token[5..].size))
|
||||
end
|
||||
|
||||
it 'reveals API key with correct password' do
|
||||
find('#api_key').click
|
||||
|
||||
within('.modal') do
|
||||
fill_in 'password', with: user.password
|
||||
click_button 'Submit'
|
||||
end
|
||||
|
||||
expect(page).to have_field('X-Auth-Token', with: user.access_token.token)
|
||||
end
|
||||
|
||||
it 'shows error with incorrect password' do
|
||||
find('#api_key').click
|
||||
|
||||
within('.modal') do
|
||||
fill_in 'password', with: 'wrong_password'
|
||||
click_button 'Submit'
|
||||
end
|
||||
|
||||
expect(page).to have_content('Wrong password')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,6 +5,9 @@ RSpec.describe 'Profile Settings' do
|
||||
|
||||
before do
|
||||
sign_in(user)
|
||||
|
||||
allow(Accounts).to receive(:can_send_emails?).and_return(true)
|
||||
|
||||
visit settings_profile_index_path
|
||||
end
|
||||
|
||||
@@ -16,7 +19,6 @@ RSpec.describe 'Profile Settings' do
|
||||
|
||||
expect(page).to have_content('Change Password')
|
||||
expect(page).to have_field('user[password]')
|
||||
expect(page).to have_field('user[password_confirmation]')
|
||||
end
|
||||
|
||||
context 'when changes contact information' do
|
||||
@@ -47,6 +49,7 @@ RSpec.describe 'Profile Settings' do
|
||||
it 'updates password' do
|
||||
fill_in 'New password', with: 'newpassword'
|
||||
fill_in 'Confirm new password', with: 'newpassword'
|
||||
fill_in 'Current password', with: 'password'
|
||||
|
||||
all(:button, 'Update')[1].click
|
||||
|
||||
@@ -56,10 +59,51 @@ RSpec.describe 'Profile Settings' do
|
||||
it 'does not update if password confirmation does not match' do
|
||||
fill_in 'New password', with: 'newpassword'
|
||||
fill_in 'Confirm new password', with: 'newpassword1'
|
||||
fill_in 'Current password', with: 'password'
|
||||
|
||||
all(:button, 'Update')[1].click
|
||||
|
||||
expect(page).to have_content("Password confirmation doesn't match Password")
|
||||
end
|
||||
|
||||
it 'does not update if current password is incorrect' do
|
||||
fill_in 'New password', with: 'newpassword'
|
||||
fill_in 'Confirm new password', with: 'newpassword'
|
||||
fill_in 'Current password', with: 'wrongpassword'
|
||||
|
||||
all(:button, 'Update')[1].click
|
||||
|
||||
expect(page).to have_content('Current password is invalid')
|
||||
end
|
||||
|
||||
it 'resets password and signs in with new password', sidekiq: :inline do
|
||||
fill_in 'New password', with: 'newpassword'
|
||||
accept_confirm('Are you sure?') do
|
||||
find('label', text: 'Click here').click
|
||||
end
|
||||
|
||||
expect(page).to have_content('An email with password reset instructions has been sent.')
|
||||
|
||||
email = ActionMailer::Base.deliveries.last
|
||||
reset_password_url = email.body
|
||||
.encoded[/href="([^"]+)"/, 1]
|
||||
.sub(%r{https?://(.*?)/}, "#{Capybara.current_session.server.base_url}/")
|
||||
|
||||
visit reset_password_url
|
||||
|
||||
fill_in 'New password', with: 'new_strong_password'
|
||||
fill_in 'Confirm new password', with: 'new_strong_password'
|
||||
click_button 'Change my password'
|
||||
|
||||
expect(page).to have_content('Your password has been changed successfully. You are now signed in.')
|
||||
|
||||
visit new_user_session_path
|
||||
|
||||
fill_in 'Email', with: user.email
|
||||
fill_in 'Password', with: 'new_strong_password'
|
||||
click_button 'Sign In'
|
||||
|
||||
expect(page).to have_content('Signed in successfully')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -115,7 +115,6 @@ RSpec.describe 'Team Settings' do
|
||||
fill_in 'First name', with: 'Adam'
|
||||
fill_in 'Last name', with: 'Meier'
|
||||
fill_in 'Email', with: 'adam.meier@example.com'
|
||||
fill_in 'Password', with: 'new_password'
|
||||
|
||||
expect do
|
||||
click_button 'Submit'
|
||||
|
||||
Reference in New Issue
Block a user