> ## Documentation Index
> Fetch the complete documentation index at: https://docs.supercycle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# E-signatures

> Require customers to sign rental contracts online or in store before you fulfill a rental

<Info>
  E-signatures are in beta. Turn on **Contracts** under <Icon icon="shopify" iconType="solid" /> **[Beta features](https://admin.shopify.com/apps/supercycle/settings/features)** first.
</Info>

E-signatures attach signed contracts to rentals. You write contract templates with Liquid, Supercycle sends them when an order is placed, and customers sign online or in person on Shopify POS. Contract templates live under <Icon icon="shopify" iconType="solid" /> **[Risk](https://admin.shopify.com/apps/supercycle/settings/risk)**.

<Note>
  Supercycle charges \$0.75 per completed e-signature. A signature is counted when a customer signs a contract. Generating and sending a contract is free.
</Note>

***

## How it works

* **Contract templates.** Write any rental contract as HTML, CSS, and Liquid.
* **Several contracts per rental.** Require more than one template on a rental option, for example a rental agreement plus a damage waiver.
* **Several ways to sign.** Customers sign on the thank you page, from their account, from an emailed link, or in store on POS.
* **Automation.** A `contract_signed` usage event fires once every contract on a rental is signed, ready to use in [Automations](/documentation/manage/automation/automation).
* **Compliance.** Signatures meet ESIGN, UETA, and eIDAS, with an audit trail and a certificate of completion attached to every signed contract.

***

## Set up e-signatures

<Steps>
  <Step title="Turn on the beta feature">
    On <Icon icon="shopify" iconType="solid" /> **[Beta features](https://admin.shopify.com/apps/supercycle/settings/features)**, turn on **Contracts**.
  </Step>

  <Step title="Create a contract template">
    On <Icon icon="shopify" iconType="solid" /> **[Risk](https://admin.shopify.com/apps/supercycle/settings/risk)**, under **Contract templates**, add a template with a name, a body (HTML with Liquid), and styles (CSS). Select **Preview** to render the template against sample data before saving.
  </Step>

  <Step title="Attach the template to a rental option">
    Open the method option on the product (calendar, subscription, membership, or resale) and select one or more contract templates to require at checkout. To attach templates to many options at once, use the **Apply contracts** [bulk action](/documentation/manage/products/managing-method-options#bulk-actions) on the options table.
  </Step>

  <Step title="Generate contracts on draft orders (optional)">
    Still under **Contract templates**, turn on **Generate contracts for draft orders** to create unsigned contracts while a draft is open. See [Contracts on draft orders](#contracts-on-draft-orders).
  </Step>
</Steps>

***

## Template variables

Contract templates are HTML styled with CSS and rendered with [Liquid](https://shopify.github.io/liquid/). Three variables are available:

* **`rentals`.** The rentals included in the contract, each with the properties below.
* **`customer`.** The signing customer.
* **`customer_signature`.** Replaced with the customer's signature when the document is signed. Required if you want the signature to render in the PDF.

<AccordionGroup>
  <Accordion title="Rental">
    <ResponseField name="product_title" type="string">
      The title of the rented product.
    </ResponseField>

    <ResponseField name="variant_title" type="string">
      The title of the rented variant.
    </ResponseField>

    <ResponseField name="sku" type="string">
      The SKU of the rented item.
    </ResponseField>

    <ResponseField name="serial" type="string">
      The serial number of the rented item.
    </ResponseField>

    <ResponseField name="condition" type="string">
      The condition of the rented item.
    </ResponseField>

    <ResponseField name="start_date" type="date">
      The rental start date.
    </ResponseField>

    <ResponseField name="end_date" type="date">
      The rental end date.
    </ResponseField>

    <ResponseField name="minimum_term" type="string">
      The minimum rental term.
    </ResponseField>

    <ResponseField name="minimum_term_end" type="date">
      The date the minimum rental term ends.
    </ResponseField>

    <ResponseField name="price" type="integer">
      The rental price in cents.
    </ResponseField>

    <ResponseField name="subscription" type="object">
      The subscription associated with the rental, if any.

      <Expandable title="subscription properties">
        <ResponseField name="start_date" type="date">
          The subscription start date.
        </ResponseField>

        <ResponseField name="end_date" type="date">
          The subscription end date.
        </ResponseField>

        <ResponseField name="price" type="string">
          The formatted subscription price.
        </ResponseField>

        <ResponseField name="amount" type="integer">
          The subscription amount in cents.
        </ResponseField>

        <ResponseField name="frequency" type="string">
          The billing frequency of the subscription.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Accordion>

  <Accordion title="Customer">
    <ResponseField name="full_name" type="string">
      The customer's full name.
    </ResponseField>

    <ResponseField name="display_name" type="string">
      The customer's display name.
    </ResponseField>

    <ResponseField name="first_name" type="string">
      The customer's first name.
    </ResponseField>

    <ResponseField name="last_name" type="string">
      The customer's last name.
    </ResponseField>

    <ResponseField name="email" type="string">
      The customer's email address.
    </ResponseField>
  </Accordion>
</AccordionGroup>

See [Shopify's Liquid reference](https://shopify.dev/docs/api/liquid) for tags and filters.

***

## What the customer sees

Once an order is placed, Supercycle generates one contract per template and tells the customer. They can sign from any of these places:

* **Thank you page.** Add the **Checkout requirements** block to your thank you page, the same block used for [ID verification](/documentation/configuration/risk/identity-verification). When the order includes rentals that require contracts, a **Sign your contract** row appears with a button to the signing page. The signing page renders inside your theme, and its buttons use the **Button class** from **Methods style** in the Supercycle Engine app embed. See [theme setup](/documentation/setup/theme-setup#update-style-settings).
* **Customer accounts.** Add the **Account requirements** page from the Supercycle customer account extensions. Unsigned contracts appear on the **Requirements** page with a **Sign contract** button for each template, alongside any outstanding ID verification prompts. Edit those strings under **Requirements** in [language settings](/documentation/online-store/languages#edit-wording).
* **Email link.** Supercycle emails the customer a signing link when the order is placed. You can resend the link from the order at any time.
* **Shopify POS.** Staff open the order in POS and either hand the device to the customer to sign on screen, or show a QR code for the customer to scan and sign on their own phone.

***

## Contracts on draft orders

By default, contracts are created when the order is placed. Turn on **Generate contracts for draft orders** under **Contract templates** on <Icon icon="shopify" iconType="solid" /> **[Risk](https://admin.shopify.com/apps/supercycle/settings/risk)** to create unsigned contracts as soon as rental lines are added to a Shopify [draft order](https://help.shopify.com/en/manual/fulfillment/managing-orders/create-orders). Customers can then sign before checkout completes, which suits POS saved carts and admin draft orders that sit unpaid for a while.

* A draft with a customer and rental lines that require contracts gets one unsigned contract per template.
* The same templates and Liquid variables apply, so one template serves both draft and placed orders.
* When the draft becomes an order, Supercycle reuses those contracts instead of creating duplicates.
* The ready-to-sign email isn't sent automatically for draft contracts. Send the signing link or email from the draft when the customer is ready, including from [Shopify POS](/documentation/point-of-sale/pos-overview#contracts-on-draft-orders).
* Drafts without a customer, and completed drafts, are skipped.

<Info>
  **Generate contracts for draft orders** appears when draft-order contracts are turned on for your store. If you don't see it, contact support from the app.
</Info>

***

## Contract status

Each contract has one of two statuses:

| Status     | Meaning                                                                         |
| ---------- | ------------------------------------------------------------------------------- |
| `unsigned` | The contract has been generated but the customer hasn't signed.                 |
| `signed`   | The contract has been signed and the rendered PDF is stored against the rental. |

When every contract on a rental is `signed`, Supercycle emits a `contract_signed` usage event you can use as a trigger in [workflows](/documentation/manage/automation/create-workflow).

***

## Compliance and audit trails

Supercycle e-signatures are legally binding under the ESIGN Act (US), UETA (US), and eIDAS (EU). Every signed contract includes:

* **Audit trail.** A tamper-evident record of every action on the contract, including when it was generated, viewed, and signed, with the signer's IP address and timestamps.
* **Certificate of completion.** A signed certificate attached to the contract PDF documenting the signing parties, signature events, and audit history, admissible as evidence of intent and consent.

***

## E-signatures FAQs

<AccordionGroup>
  <Accordion title="How much do e-signatures cost?">
    Supercycle charges \$0.75 per completed e-signature. Generating or sending a contract is free. You only pay when a customer signs.
  </Accordion>

  <Accordion title="Which rental methods support e-signatures?">
    Calendar, subscription, membership, and resale options can all require contract templates.
  </Accordion>

  <Accordion title="Can I require more than one contract per rental?">
    Yes. Assign several templates to a rental option and Supercycle generates one contract per template. The rental is fully signed only once every contract is signed.
  </Accordion>

  <Accordion title="Where is the signed PDF stored?">
    Once a contract is signed, Supercycle stores the rendered PDF against the contract record. Download it from the order in Supercycle.
  </Accordion>

  <Accordion title="Can the customer sign on their own device in store?">
    Yes. On POS, show the QR code on the POS device and the customer scans it to sign on their phone. The POS screen updates once they finish.
  </Accordion>

  <Accordion title="Can customers sign before the order is placed?">
    Yes. Turn on **Generate contracts for draft orders** under **Risk**. Unsigned contracts are created on the draft, and staff can share a QR code, a signing link, or an email from the draft or from POS. See [Contracts on draft orders](#contracts-on-draft-orders).
  </Accordion>
</AccordionGroup>
