Skip to navigation

Create bulk job

View as Markdown

Create a new job, give presigned URLs back, the client will upload to Azure Blob Store directly.

Important Upload Workflow:

  1. Call this endpoint to create a job and receive upload URLs
  2. For each document in the response’s _embedded.documents array, extract the upload_document URL from _actions
  3. Upload your document file to each URL using an HTTP PUT request with the document content as binary data
  4. After all documents are uploaded, call the /actions/complete endpoint to finalize the job
  5. Use the GET endpoint to monitor job progress

Example response structure:

{
"_embedded": {
"documents": [
{
"id": "8c566d26-e7fb-4b7e-870c-1d0fb8df9084",
"sequence": 1,
"_actions": {
"upload_document": "https://docupstoragewestwu3dsto.blob.core.windows.net/..."
}
}
]
}
}

Azure Blob Storage Upload Instructions:

Use the pre-signed URL from step 2 to upload your document directly to Azure Blob Storage:

PUT [pre-signed URL from _actions.upload_document]
Headers:
x-ms-blob-type: BlockBlob (Required)
x-ms-meta-filename: YourDocumentName.pdf (Recommended)
Content-Type: application/pdf (Required)
x-ms-meta-metadata: <stringified JSON metadata> (Optional)
Body: [Your document binary data]

Important Notes:

  • The upload_document URLs are pre-signed Azure Blob Storage URLs with time-limited validity (8 hours)
  • No Auth header is needed
  • The x-ms-meta-filename header should contain your original document filename
  • The x-ms-blob-type must be set to BlockBlob
  • Setting the Content-Type header is recommended to match your document type
  • If Content-Type is not specified, Azure defaults to application/octet-stream
  • The x-ms-meta-metadata header is optional and allows you to attach metadata to the newly created agreement at upload time. See Applying Metadata to Agreements below for details

Applying Metadata to Agreements:

You may include metadata alongside the document bytes during upload. This metadata will be directly applied to the newly created agreement. To do this, include the x-ms-meta-metadata header on the PUT operation with a stringified JSON value.

The JSON schema for this header follows the same structure as the standard Agreement PATCH request body.

Example metadata JSON:

{
"provisions": {
"jurisdiction": "California",
"payment_terms_due_date": "OTHER"
},
"custom_provisions": {
"c_ClientId": "value"
},
"linked_data": [
{
"application_name": "Salesforce",
"object_name": "Account",
"record_id": "579386BF-C8EA-4673-AE0E-E2F922B09DC5"
},
{
"application_name": "Dynamics",
"object_name": "Account",
"record_id": "514CEAFB-1AC7-43FF-9E88-24CB15150963"
}
]
}

Stringified header value:

The JSON must be stringified before being set as the header value. For example, the above JSON would become:

x-ms-meta-metadata: "{\"provisions\":{\"jurisdiction\":\"California\",\"payment_terms_due_date\":\"OTHER\"},\"custom_provisions\":{\"c_ClientId\":\"value\"},\"linked_data\":[{\"application_name\":\"Salesforce\",\"object_name\":\"Account\",\"record_id\":\"579386BF-C8EA-4673-AE0E-E2F922B09DC5\"},{\"application_name\":\"Dynamics\",\"object_name\":\"Account\",\"record_id\":\"514CEAFB-1AC7-43FF-9E88-24CB15150963\"}]}"

Metadata Notes:

  • The x-ms-meta-metadata header is entirely optional. If omitted, the agreement is created with AI-extracted values only
  • The JSON must be stringified (serialized to a single string) before being placed in the header value
  • The metadata payload follows the same schema as the Agreement PATCH endpoint request body
  • Values provided via metadata will be applied to the agreement after creation, overriding any AI-extracted values for the same fields

Firewall & Network Configuration:

If your organization uses firewalls or network restrictions, you may need to whitelist the following Azure Blob Storage domains to ensure successful document uploads. The upload URLs returned by this API will use one of these domains based on your account’s geographic region:

Primary Storage Endpoints:

  • https://docupstorageaustauepsto.blob.core.windows.net/
  • https://docupstoragecanacacpsto.blob.core.windows.net/
  • https://docupstoragecentcuspsto.blob.core.windows.net/
  • https://docupstorageeasteu2psto.blob.core.windows.net/
  • https://docupstorageeasteusdsto.blob.core.windows.net/ (Demo)
  • https://docupstoragejapajpepsto.blob.core.windows.net/
  • https://docupstoragenortneupsto.blob.core.windows.net/
  • https://docupstoragewestweupsto.blob.core.windows.net/
  • https://docupstoragewestwu3dsto.blob.core.windows.net/ (Demo)

Secondary Storage Endpoints (for redundancy/failover):

  • https://docupstorageaustauepsto-secondary.blob.core.windows.net/
  • https://docupstoragecanacacpsto-secondary.blob.core.windows.net/
  • https://docupstoragecentcuspsto-secondary.blob.core.windows.net/
  • https://docupstorageeasteu2psto-secondary.blob.core.windows.net/
  • https://docupstorageeasteusdsto-secondary.blob.core.windows.net/ (Demo)
  • https://docupstoragejapajpepsto-secondary.blob.core.windows.net/
  • https://docupstoragenortneupsto-secondary.blob.core.windows.net/
  • https://docupstoragewestweupsto-secondary.blob.core.windows.net/
  • https://docupstoragewestwu3dsto-secondary.blob.core.windows.net/ (Demo)

Note: You may whitelist all domains listed above, or contact your DocuSign administrator to determine which specific region(s) your account uses to minimize the whitelist scope.

Supported File Formats & Content Types:

The table below shows common file formats and their recommended Content-Type headers. Note: For the most up-to-date list of supported formats, headers, and constraints, always refer to the _action_templates object in the API response, which provides dynamic configuration including:

  • allowed_formats: Current list of supported file extensions
  • headers: Required HTTP headers with examples
  • constraints: Maximum file size and other limits
  • success_status_code: Expected response code for successful uploads
FormatExtensionContent-Type
PDF.pdfapplication/pdf
Word Document (2007+).docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
Word Document (Legacy).docapplication/msword
PowerPoint Presentation (2007+).pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
PowerPoint Presentation (Legacy).pptapplication/vnd.ms-powerpoint
PowerPoint Slideshow.ppsxapplication/vnd.openxmlformats-officedocument.presentationml.slideshow
Excel Workbook (2007+).xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Excel Workbook (Legacy).xlsapplication/vnd.ms-excel
Excel Binary Workbook.xlsbapplication/vnd.ms-excel.sheet.binary.macroenabled.12
Rich Text Format.rtftext/rtf
WordPerfect Document.wpdapplication/vnd.wordperfect
HTML.html, .htmtext/html
JPEG Image.jpg, .jpegimage/jpeg
PNG Image.pngimage/png
TIFF Image.tif, .tiffimage/tiff

Example Upload Requests:

PDF Document (with optional metadata):

PUT https://storage.blob.core.windows.net/container/doc-id?signature=...
Content-Type: application/pdf
x-ms-blob-type: BlockBlob
x-ms-meta-filename: contract.pdf
x-ms-meta-metadata: "{\"provisions\":{\"jurisdiction\":\"California\"},\"custom_provisions\":{\"c_ClientId\":\"value\"}}"
[Binary PDF data]

Word Document:

PUT https://storage.blob.core.windows.net/container/doc-id?signature=...
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
x-ms-blob-type: BlockBlob
x-ms-meta-filename: agreement.docx
[Binary DOCX data]

Image:

PUT https://storage.blob.core.windows.net/container/doc-id?signature=...
Content-Type: image/jpeg
x-ms-blob-type: BlockBlob
x-ms-meta-filename: signed-page.jpg
[Binary JPEG data]

Authentication

AuthorizationBearer

Path parameters

accountIdstringRequiredformat: "^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$"

Request

This endpoint expects an object.
expected_number_of_docsintegerRequired1-10000

Number of docs this job will have. Will use provided document_requests size if there is a mismatch.

job_namestringOptional1-256 characters

Name for the new job to be created. If empty, server will auto-create name for the job.

languagestringOptional

Language for the user, such as en-US, en-GB, if not provided will default to en-US.

Response

Job created successfully
idstringformat: "uuid"
Id for job
namestring
User provided name for this job
statusenum

Job lifecycle states:

  • OPEN - Job created and accepting documents
  • UPLOAD_COMPLETE - All documents have been received, and processing has not yet started
  • IN_PROGRESS - Documents are being processed (AI extraction)
  • COMPLETE - The full e2e process is complete
  • FAILED - System error prevented job execution
  • CANCELED - User initiated request to cancel a job
status_enumlist of strings
created_atstringformat: "date-time"
modified_atstringformat: "date-time"
expires_atstringformat: "date-time"
metadataobject

Properties about THIS request/response, not the job resource itself

external_job_idstringOptionalformat: "uuid"
User provided reference ID for this job
ttl_periodstringOptional
ISO 8601 duration for job validity
upload_settingsobjectOptional
Upload configuration settings for the bulk job
ai_processingobjectOptional

AI processing status for BULK_API_INGESTION jobs. Always present; resume_ai_triggered_at is set only for jobs where resume-AI processing was triggered.

summaryobjectOptional

Aggregate document counts. Always present in the job status response alongside _embedded.documents (when include_document_details=true) or as the sole count source (when false).

_embeddedobjectOptional
Contains detailed information about the BulkJob including presigned upload links, document IDs, etc
_action_templatesobjectOptional
constraintsobjectOptional
Describes the limits of a bulk job, or an action associated with a bulk job
messagestringOptional

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
429
Too Many Requests Error
500
Internal Server Error