Skip to content

E-Signatures

FoxCLM has a built-in public e-signature flow. No external service required. When a contract reaches Approved, click Send for Signature - FoxCLM generates a share token, emails every party with requires_signature: true, and opens the public signing page at https://<viewer-host>/sign/<token>.

Configuring parties

Before sending for signature, make sure each party who needs to sign is set up correctly in the Parties tab:

Parties tab

For each signing party:

  • Display name - exact legal name preferred
  • Kind - client, company, staff, or external
  • External email - required if kind is external
  • Signing order - lower values first on the signing page
  • Requires signature - must be on for the party to appear on the signing page

Parties without requires_signature are informational only (witnesses, observers).

The Send for Signature action

From any Approved contract, the Send for Signature button does four things:

  1. Creates a shares row with type='contract' and a UUID token.

  2. Moves the contract to Out for Signature (editing locks).

  3. Fires the share_contract workflow action if configured.

  4. Emails each signing party a link:

    https://<viewer-host>/sign/<token>?party=<party_id>

Each email is pre-scoped to that party via the party query parameter so they can't accidentally sign as the other counterparty.

The public signing page

When a signer opens their link:

Public signer - contract view

The top area shows:

  • Contract title and number
  • Status (Out for Signature)
  • Signed count (e.g. "1 of 2 signed")
  • Language selector

The contract body renders below using the designer's layout.

Scrolling down reveals the signing form:

Signature pad

Fields:

  • Signing as dropdown - auto-selected if the URL includes ?party=, otherwise the signer picks their party
  • Your full legal name - text input, must match their legal name
  • Type / Draw toggle:
    • Type - name is typed; signature is stored as text + rendered in a script font
    • Draw - canvas pad; the signer draws with mouse or touch; stored as base64 PNG
  • Agreement checkbox - "By signing, I agree that this electronic signature has the same legal effect as a handwritten signature, that my IP address and user-agent will be recorded, and I have reviewed the contract content above."
  • Sign and submit - green button; disabled until name is filled and checkbox is ticked
  • Decline - red button; opens a prompt for optional reason

What happens on sign

When Sign and submit is clicked, FoxCLM:

  1. Creates a contract_signatures row with:
    • Party reference, signer name, signature type (typed / drawn), signature data
    • signed_at timestamp (UTC)
    • Signer's IP address and user-agent (audit trail)
    • Share token used
  2. Increments the share's view_count
  3. Checks if all parties with requires_signature have signed
  4. If yes, sets the contract's signed_at and fires any signed_at is_not_null workflow condition (typically auto-transitions to Active)
  5. Reloads the public page showing "Signed!" and the updated signed count

What happens on decline

When Decline is clicked:

  1. A prompt asks for an optional reason
  2. No signature is stored
  3. The signer's decline is logged (audit trail)
  4. The contract stays in Out for Signature so you can send to a different party or revise

Workflow actions for declines are not auto-fired; you can manually revert to Draft or reassign.

If you need to cancel, open the contract and click Unshare (or fire the unshare_contract workflow action on a status transition). The existing link 404s.

Then click Send for Signature again to generate a new link.

Every signature captures:

  • Signer's IP address
  • Signer's user-agent
  • Exact contract content at signing time (stored in the signatures table, not re-rendered)
  • Timestamp in UTC

On top of that, FoxCLM maintains three independent integrity proofs covering the document, the workflow rules in force at each event, and the log of events itself. See Audit Trail & Tamper Detection for what each layer protects and what it doesn't. Consult your legal counsel on regional requirements (US ESIGN Act, EU eIDAS, HK ETO, etc.).

Workflow actions for signing

Common action setup:

TransitionAction
Approved -> Out for Signatureshare_contract (creates the share token, emails signing links)
Out for Signature -> Active (auto, condition signed_at is_not_null)send_contract_approved_email (confirms to all parties the contract is executed)
Any -> Terminatedunshare_contract (invalidate any lingering signing links)

Next steps

FoxCLM Documentation