Skip to main content
Glama

Create Public Link

create_link
Destructive

Create a NEW reusable public signing link from a PDF already uploaded with upload_file. Nothing existing is changed or removed and Formify sends no invitations to anyone: the only effect is a new link in your account, live the moment this returns at a public URL that anyone on the internet who holds it can open and sign, until you call disable_link. Share the returned linkUrl yourself. With the AI assistant enabled the link starts as status processing with linkUrl null, and goes live once get_link reports status active. THIS COSTS CREDITS. On the credits pricing model every live link is a billed instance, charged pro rata for the rest of the current period and renewed each period while it stays active. ALWAYS confirm with the user before calling this. Insufficient credits returns 402 and creates nothing; a suspended subscription returns 403. Requires the publicLinksCreate capability. signeeDetails here describes SIGNATURE SLOTS, not people: there are no recipients, so no email, phone, delivery method or signing order. signatureBox is required for every slot placed on an existing page, because there is no template to inherit coordinates from. BEFORE calling, ask the user: (1) the language signers should see, (2) whether the AI assistant should be enabled — only if get_account_capabilities confirms aiAssistant, (3) confirmation that a billed link may be created.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "fileId": "<fileId>",
      "signeeDetails": "<signeeDetails>"
    },
    "name": "create_link"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNoName of the link. Shown in Formify, not to signers.
fileIdYesFile ID from upload_file
languageNoLanguage of the signing experience shown to whoever opens the link (default en)
aiAssistantNoOptional AI assistant that helps signees while reviewing the document. Requires the aiAssistant capability.
signeeDetailsYesThe signature slots on the link. At least one is required.
sharingSettingNoWho on the account may administer the link: private (default) or shared (requires the accessLevels capability). This does not affect who may SIGN it — a public link is public by definition.
disablePrintingNoPrevent signers from printing the document.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
      Previous value: -"Required when signatureType is 'digital_ink_id_scan', unused otherwise. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API."New value: +"Required when signatureType is 'digital_ink_id_scan', unused otherwise. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API. The scanned front side is then placed in the signed document at this position, so the sender needs a legal basis for keeping a copy of the identity document there (see signatureType)."
    • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
      Previous value: -"Signature method for this slot. Same values and capability requirements as on a document: digital_ink (default), bankid_identification (signatureBankId), digital_ink_id_scan (signatureIdScan), face_liveness (signatureFaceLiveness). Call get_account_capabilities before using a non-default type. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."New value: +"Signature method for this slot. Same values and capability requirements as on a document: digital_ink (default), bankid_identification (signatureBankId), digital_ink_id_scan (signatureIdScan), face_liveness (signatureFaceLiveness). Call get_account_capabilities before using a non-default type. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API. digital_ink_id_scan additionally places an image of the signer's identity document (front side) in the signed document, at the idScanBox position. Reproducing a copy of an identity document requires the sender's own legal basis: before selecting this method, tell the user that a copy of the ID document will be embedded in the signed document and get an explicit yes. Suggest another signing method if they do not need a copy of the identity document in the document."
  2. Changed4 schema fields changed
    • changedInput schema / properties / signeeDetails / items / properties / hidePersonalNumber / description
      Previous value: -"Leave the signer's personal number out of the rendered signature. Only meaningful for signature types that collect one."New value: +"Leave the signer's national identity number off the rendered signature. Only meaningful for bankid_identification: the signer's BankID identification supplies that number to Formify's signing page, which prints it beside the signature by default. The number is handled by the signing page alone — it is never sent to, returned by or stored through this API."
    • changedInput schema / properties / signeeDetails / items / properties / idScanBox / description
      Previous value: -"Required when signatureType is 'digital_ink_id_scan', unused otherwise."New value: +"Required when signatureType is 'digital_ink_id_scan', unused otherwise. The ID document itself is captured and read on Formify's signing page; only the placeholder's position is configured here, and no image or document data passes through this API."
    • changedInput schema / properties / signeeDetails / items / properties / paymentLink / description
      Previous value: -"Collect a payment before this slot can be signed. Payment links are set up in the Formify client, not through this API — do not invent an id. The link must allow multiple use, since one public link is signed by many people. Requires the signAndPay capability."New value: +"Require a payment before this slot can be signed, by referencing a payment link that already exists on the account. Payment links are set up in the Formify client, not through this API — do not invent an id. The payment itself is taken on Formify's signing page: no card or payment data is collected, transmitted or stored by this API. The link must allow multiple use, since one public link is signed by many people. Requires the signAndPay capability."
    • changedInput schema / properties / signeeDetails / items / properties / signatureType / description
      Previous value: -"Signature method for this slot. Same values and capability requirements as on a document: digital_ink (default), bankid_identification (signatureBankId), digital_ink_id_scan (signatureIdScan), face_liveness (signatureFaceLiveness). Call get_account_capabilities before using a non-default type."New value: +"Signature method for this slot. Same values and capability requirements as on a document: digital_ink (default), bankid_identification (signatureBankId), digital_ink_id_scan (signatureIdScan), face_liveness (signatureFaceLiveness). Call get_account_capabilities before using a non-default type. Identity verification for bankid_identification, digital_ink_id_scan and face_liveness is performed by Formify's signing page in the signer's browser, after the invitation is sent. This parameter only selects the method: no identity document, biometric data or national identity number is sent to, returned by or stored through this API."
  3. Added

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: discloses that no invitations are sent, that the link is publicly live the instant it returns, the async processing→active transition when the AI assistant is enabled, pro-rata credit billing with per-period renewal, error semantics (402 creates nothing, 403 suspended), and capability requirements. This is exactly the financial and exposure context destructiveHint/openWorldHint can only gesture at.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose, then effects, then cost, then the pre-call checklist — a sensible order. It is long and the capitalized warnings plus the checklist repeat some ground already covered, so it is dense but not maximally tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a 7-parameter, nested, mutating, billed, open-world tool: prerequisites, side effects, failure modes, async states, capability gates and the pre-call user confirmations are all present. With no output schema, it still tells the agent what comes back (linkUrl, status) and that it may be null.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real conceptual value: signeeDetails describes signature SLOTS not people (no email, phone, delivery method or signing order), and signatureBox is mandatory because a link has no template to inherit coordinates from. It doesn't add much on the remaining parameters (name, sharingSetting, disablePrinting), which the schema already covers well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Create a NEW reusable public signing link from a PDF already uploaded with upload_file") and immediately scopes it away from siblings like create_document/create_template by noting there are no recipients and nothing is inherited from a template. An agent can distinguish this from create_document or duplicate_link without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit prerequisites (file must come from upload_file, publicLinksCreate capability, aiAssistant capability confirmed via get_account_capabilities), an explicit when-not (ask the user first, always confirm the billed link), and names the terminating sibling (disable_link) as well as get_link for status. The numbered pre-call checklist (language, AI assistant, billing confirmation) leaves almost nothing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources