getsign_create_template
Create a Getsign template via a two-phase presigned upload — call this tool TWICE.
Call 1 (omit storage_key): pass file_name + content_type (required here).
Returns data.url (presigned PUT) and data.storage_key. PUT the raw file
bytes straight from disk to data.url with a shell command — curl -X PUT
--data-binary @path -H "Content-Type: <type>" (or curl -T path) — never by
reading the file into chat/base64 first, since that defeats the point of
this flow for anything but tiny files.
It must be a PUT and must send Content-Type as its only header. Dropping
-X PUT makes curl send a POST and S3 answers 403 SignatureDoesNotMatch.
Adding any x-amz-* header, including a correctly computed
x-amz-checksum-crc32, answers 403 AccessDenied. The x-amz-checksum-crc32
already in data.url is an empty-body checksum and needs no action. Keep the
error body on failure — a 403 from S3 means the request was malformed, not
that storage is unreachable.
Call 2 (same file_name/content_type/board_id/envelope_id/item_id, plus
storage_key=data.storage_key from call 1): registers the uploaded file as
a template.
Auto-attaches to a workflow item only if BOTH envelope_id and item_id are
passed together on call 2 — the file then shows up in
getsign_list_envelope_documents with envelopeId/boardId/itemId already
set, no separate select-template call needed. Passing only board_id (or
envelope_id alone, without item_id) registers the file as a standalone
template unattached to any workflow — follow up with
getsign_select_template_for_workflow before editor/send tools will see it.
Only pass item_id when you mean a specific Monday item (>0). A falsy
item_id is omitted from the payload.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| item_id | No | ||
| board_id | No | ||
| file_name | Yes | ||
| envelope_id | No | ||
| storage_key | No | ||
| content_type | No |