Skip to contentPostalForm

Content

Cancel a Recent Solar Contract API reference

Screen a recent residential solar purchase, lease, PPA, or related financing agreement for the supported FTC or contract-stated mail cancellation lane; collect one signer, exact seller cancellation recipient, controlling contract pages, and structured agreement facts; then generate a Certified Mail packet. Do not use after installation starts or for disputes, fraud, loan invalidation, liens, checks, notarization, originals, portal-only submission, in-person delivery, physical returns, or multiple required signers.

Published Jul 18, 2026

Workflow slug: solar-contract-cancellation. Workflow version: 1. Live schema · Markdown reference.

How it works

Step 1

Fill out form

Complete the guided fields online.

Step 2

Preview PDF

Review the generated PDF before mailing.

Step 3

Mail

We print and mail it via USPS.

How does an agent prepare this form?

PostalForm uses the same workflow definition for this API reference and its guided browser form. Fetch the live schema, collect the active required fields and attachments, and validate the completed request. Review the generated PDF, resolved recipient, mailing service and price with the owner before authorizing payment.

Submission and recipient rules

Setting Current workflow value
Form slug solar-contract-cancellation
Recipient mode user
Certified Mail required
Base U.S. mail service USPS First-Class Mail (mail_class="standard" in the API); not USPS Marketing Mail
Attachment total limit 12 MB
Validate without payment POST /api/machine/orders/validate or POST /api/machine/mpp/orders/validate
Machine order POST /api/machine/orders (x402) or POST /api/machine/mpp/orders (MPP)

Send a top-level form instead of pdf or letter; those three document sources are mutually exclusive. Workflow forms are letters, not postcards. The machine envelope requires buyer, sender and recipient fields. For predefined or computed recipients, the server binds the final recipient to the workflow rules. Inspect the resolved recipient returned by validation; do not substitute a convenient office address.

The template below is structural, not ready to submit: replace every placeholder, complete the active fields, omit unused optional attachments, and use the field options and visibility rules in the schema. Empty strings and unchecked checkboxes are not user answers. Never infer a signature, legal eligibility, factual declaration or consent from a default value.

JSON request template

{
  "request_id": "<new UUID; preserve on retry>",
  "buyer_name": "<buyer name>",
  "buyer_email": "<buyer email>",
  "sender_name": "<sender name>",
  "sender_address_type": "Manual",
  "sender_address_manual": {
    "line1": "<street address>",
    "city": "<city>",
    "state": "<state or region>",
    "zip": "<postal code>",
    "countryCode": "US"
  },
  "recipient_name": "<confirmed recipient name>",
  "recipient_address_type": "Manual",
  "recipient_address_manual": {
    "line1": "<street address>",
    "city": "<city>",
    "state": "<state or region>",
    "zip": "<postal code>",
    "countryCode": "US"
  },
  "mail_class": "standard",
  "double_sided": true,
  "color": false,
  "certified": true,
  "form": {
    "slug": "solar-contract-cancellation",
    "fields": {
      "cancellation_lane": "",
      "agreement_signed_date": "",
      "transaction_location": "",
      "agreement_total": "",
      "salesperson_physically_present": "",
      "personal_household_use": "",
      "emergency_work_requested": "",
      "contract_has_written_cancellation_right": "",
      "contract_deadline": "",
      "contract_accepts_mail": "",
      "installation_status": "",
      "required_signer_count": "",
      "requires_original": "",
      "requires_notary": "",
      "requires_in_person": "",
      "requires_portal_only": "",
      "requires_physical_return": "",
      "requires_seller_form": "",
      "sender_name": "",
      "sender_address": "",
      "property_address": "",
      "phone": "",
      "email": "",
      "letter_date": "",
      "agreement_or_account_number": "",
      "agreement_type": "",
      "recipient_name": "",
      "recipient_address": "",
      "signature": "",
      "controlling_pages_confirmed": false,
      "facts_reviewed": false
    },
    "attachments": [
      {
        "id": "controlling_contract_pages",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      }
    ]
  }
}

Field reference

Field ID Label Type Required when active Choices
cancellation_lane Cancellation right you are relying on select Yes FTC Cooling-Off Rule, Contract cancellation right
agreement_signed_date Agreement signed date date Yes See schema
transaction_location Where the in-person sale happened select Yes Customer residence, Workplace, Temporary sales location, Seller's regular place of business, Online or telephone only, Another location
agreement_total Total agreement amount text Yes See schema
salesperson_physically_present Was a salesperson physically present for the solicitation and sale? select Yes Yes, No
personal_household_use Was the solar agreement primarily for personal, family, or household use? select Yes Yes, No
emergency_work_requested Did you request immediate work for a personal emergency? select Yes No, Yes
contract_has_written_cancellation_right Does the signed agreement explicitly give you a cancellation right that is still open? select Yes Yes, No, Unsure
contract_deadline Cancellation deadline printed in the agreement date Yes See schema
contract_accepts_mail Does the agreement accept mailed written notice at the address you will enter? select Yes Yes, No, Unsure
installation_status Installation status select Yes Not started, Site visit or preliminary work only, Installation started, Installation completed
required_signer_count How many people must sign the cancellation notice? select Yes One, More than one, Unsure
requires_original Does the agreement require an original document rather than a printed copy? select Yes No, Yes, Unsure
requires_notary Does the agreement require notarization? select Yes No, Yes, Unsure
requires_in_person Does the agreement require in-person delivery? select Yes No, Yes, Unsure
requires_portal_only Does the agreement require a portal-only or online-only submission? select Yes No, Yes, Unsure
requires_physical_return Does cancellation require returning equipment, documents, or another physical item? select Yes No, Yes, Unsure
requires_seller_form Does the agreement require a separate seller-provided cancellation form? select Yes No, Yes, Unsure
sender_name Your full legal name text Yes See schema
sender_address Your mailing address address Yes See schema
property_address Property address covered by the solar agreement text Yes See schema
phone Phone number text No See schema
email Email address text No See schema
letter_date Date on the notice date Yes See schema
agreement_or_account_number Agreement or account number text No See schema
agreement_type Agreement type select Yes Solar purchase, Solar lease, Power purchase agreement (PPA), Solar purchase with related financing, Other residential solar agreement
recipient_name Solar company and cancellation recipient text Yes See schema
recipient_address Exact cancellation mailing address from the agreement address Yes See schema
signature Signature signature Yes See schema
controlling_pages_confirmed I uploaded the controlling agreement pages. checkbox Yes See schema
facts_reviewed I reviewed the packet and understand PostalForm's role. checkbox Yes See schema

Compound fields use nested objects keyed by subfield ID. Evaluate group and field visibility before deciding which fields are active. Conditional requirements, validation rules, recipient rules, attachment formats and compliance policies are preserved in the complete schema below.

Complete workflow schema

{
  "schema_version": 1,
  "workflow_version": 1,
  "slug": "solar-contract-cancellation",
  "name": "Cancel a Recent Solar Contract",
  "description": "Create and mail a signed cancellation notice for a recent residential solar contract. Upload the contract pages with the cancellation instructions, review the finished packet, and send it by Certified Mail.",
  "agent_summary": "Screen a recent residential solar purchase, lease, PPA, or related financing agreement for the supported FTC or contract-stated mail cancellation lane; collect one signer, exact seller cancellation recipient, controlling contract pages, and structured agreement facts; then generate a Certified Mail packet. Do not use after installation starts or for disputes, fraud, loan invalidation, liens, checks, notarization, originals, portal-only submission, in-person delivery, physical returns, or multiple required signers.",
  "form_summary": "Answer a few questions about your contract and cancellation deadline. PostalForm creates your notice, adds the supporting contract pages, and mails the packet by Certified Mail so you have a tracking record.",
  "data_collected": [
    "Cancellation-right lane, agreement date, deadline, transaction location, amount, and eligibility confirmations",
    "Buyer name, return address, property address, contact details, and signature",
    "Seller or cancellation department, exact contract mailing address, agreement number, and agreement type",
    "Controlling contract pages showing the cancellation right, deadline, signer requirements, and recipient address"
  ],
  "topics": [
    "solar",
    "consumer contracts",
    "cooling-off rights",
    "cancellation letters",
    "certified mail"
  ],
  "category": "solar_contract_cancellation",
  "publish_state": "published",
  "aliases": [
    "solar-cancellation-letter",
    "cancel-solar-contract",
    "solar-contract-cooling-off",
    "cancel-solar-purchase-by-mail",
    "solar-rescission-notice",
    "solar-cancellation-certified-mail"
  ],
  "llms": true,
  "indexable": true,
  "certified_mail": "required",
  "recipient": {
    "mode": "user"
  },
  "compliance_policy": {
    "id": "solar_contract_cooling_off",
    "version": 1,
    "recheckStages": [
      "preview",
      "approval",
      "checkout",
      "payment",
      "fulfillment",
      "machine"
    ]
  },
  "checkout_flow": "forms_order",
  "published_at": "2026-07-18",
  "updated_at": "2026-07-18",
  "groups": [
    {
      "id": "eligibility",
      "label": "Cancellation right and timing",
      "description": "Choose the narrow right you are relying on. The signed agreement and applicable law control.",
      "depends_on": []
    },
    {
      "id": "federal_lane",
      "label": "FTC Cooling-Off Rule facts",
      "description": "Confirm the transaction facts used by the federal three-business-day lane.",
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "FTC Cooling-Off Rule"
      },
      "depends_on": [
        "cancellation_lane"
      ]
    },
    {
      "id": "contract_lane",
      "label": "Contract cancellation right",
      "description": "Use the signed agreement's exact deadline, method, signer, and address requirements.",
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "Contract cancellation right"
      },
      "depends_on": [
        "cancellation_lane"
      ]
    },
    {
      "id": "scope",
      "label": "Supported launch scope",
      "description": "Fail closed when installation, extra signers, or another mandatory submission step makes this packet incomplete.",
      "depends_on": []
    },
    {
      "id": "buyer",
      "label": "Buyer and property",
      "description": "Enter the signer and the property covered by the agreement.",
      "depends_on": []
    },
    {
      "id": "agreement",
      "label": "Agreement details",
      "description": "Add the identifiers the seller needs to match the cancellation request.",
      "depends_on": []
    },
    {
      "id": "recipient",
      "label": "Cancellation recipient",
      "description": "Use the exact recipient and address in the controlling agreement.",
      "depends_on": []
    },
    {
      "id": "review",
      "label": "Upload, sign, and review",
      "description": "Attach the controlling pages, sign the notice, and confirm the packet matches the agreement.",
      "depends_on": []
    }
  ],
  "fields": [
    {
      "id": "cancellation_lane",
      "label": "Cancellation right you are relying on",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "eligibility",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "FTC Cooling-Off Rule",
        "Contract cancellation right"
      ],
      "compound": null
    },
    {
      "id": "agreement_signed_date",
      "label": "Agreement signed date",
      "type": "date",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "eligibility",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "transaction_location",
      "label": "Where the in-person sale happened",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "federal_lane",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "FTC Cooling-Off Rule"
      },
      "depends_on": [
        "cancellation_lane"
      ],
      "options": [
        "Customer residence",
        "Workplace",
        "Temporary sales location",
        "Seller's regular place of business",
        "Online or telephone only",
        "Another location"
      ],
      "compound": null
    },
    {
      "id": "agreement_total",
      "label": "Total agreement amount",
      "type": "text",
      "required": true,
      "meta_class": "money",
      "ui_width": null,
      "group_id": "federal_lane",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "FTC Cooling-Off Rule"
      },
      "depends_on": [
        "cancellation_lane"
      ],
      "compound": null
    },
    {
      "id": "salesperson_physically_present",
      "label": "Was a salesperson physically present for the solicitation and sale?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "federal_lane",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "FTC Cooling-Off Rule"
      },
      "depends_on": [
        "cancellation_lane"
      ],
      "options": [
        "Yes",
        "No"
      ],
      "compound": null
    },
    {
      "id": "personal_household_use",
      "label": "Was the solar agreement primarily for personal, family, or household use?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "federal_lane",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "FTC Cooling-Off Rule"
      },
      "depends_on": [
        "cancellation_lane"
      ],
      "options": [
        "Yes",
        "No"
      ],
      "compound": null
    },
    {
      "id": "emergency_work_requested",
      "label": "Did you request immediate work for a personal emergency?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "federal_lane",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "FTC Cooling-Off Rule"
      },
      "depends_on": [
        "cancellation_lane"
      ],
      "options": [
        "No",
        "Yes"
      ],
      "compound": null
    },
    {
      "id": "contract_has_written_cancellation_right",
      "label": "Does the signed agreement explicitly give you a cancellation right that is still open?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "contract_lane",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "Contract cancellation right"
      },
      "depends_on": [
        "cancellation_lane"
      ],
      "options": [
        "Yes",
        "No",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "contract_deadline",
      "label": "Cancellation deadline printed in the agreement",
      "type": "date",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "contract_lane",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "Contract cancellation right"
      },
      "depends_on": [
        "cancellation_lane"
      ],
      "compound": null
    },
    {
      "id": "contract_accepts_mail",
      "label": "Does the agreement accept mailed written notice at the address you will enter?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "contract_lane",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "cancellation_lane",
        "operator": "equals",
        "value": "Contract cancellation right"
      },
      "depends_on": [
        "cancellation_lane"
      ],
      "options": [
        "Yes",
        "No",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "installation_status",
      "label": "Installation status",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "scope",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "Not started",
        "Site visit or preliminary work only",
        "Installation started",
        "Installation completed"
      ],
      "compound": null
    },
    {
      "id": "required_signer_count",
      "label": "How many people must sign the cancellation notice?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "scope",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "One",
        "More than one",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "requires_original",
      "label": "Does the agreement require an original document rather than a printed copy?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "scope",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No",
        "Yes",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "requires_notary",
      "label": "Does the agreement require notarization?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "scope",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No",
        "Yes",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "requires_in_person",
      "label": "Does the agreement require in-person delivery?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "scope",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No",
        "Yes",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "requires_portal_only",
      "label": "Does the agreement require a portal-only or online-only submission?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "scope",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No",
        "Yes",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "requires_physical_return",
      "label": "Does cancellation require returning equipment, documents, or another physical item?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "scope",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No",
        "Yes",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "requires_seller_form",
      "label": "Does the agreement require a separate seller-provided cancellation form?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "scope",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No",
        "Yes",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "sender_name",
      "label": "Your full legal name",
      "type": "text",
      "required": true,
      "meta_class": "name",
      "ui_width": null,
      "group_id": "buyer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "sender_address",
      "label": "Your mailing address",
      "type": "address",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "buyer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "property_address",
      "label": "Property address covered by the solar agreement",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "buyer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "phone",
      "label": "Phone number",
      "type": "text",
      "required": false,
      "meta_class": "phone",
      "ui_width": null,
      "group_id": "buyer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "email",
      "label": "Email address",
      "type": "text",
      "required": false,
      "meta_class": "email",
      "ui_width": null,
      "group_id": "buyer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "letter_date",
      "label": "Date on the notice",
      "type": "date",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "agreement",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "agreement_or_account_number",
      "label": "Agreement or account number",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "agreement",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "agreement_type",
      "label": "Agreement type",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "agreement",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "Solar purchase",
        "Solar lease",
        "Power purchase agreement (PPA)",
        "Solar purchase with related financing",
        "Other residential solar agreement"
      ],
      "compound": null
    },
    {
      "id": "recipient_name",
      "label": "Solar company and cancellation recipient",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "recipient",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "recipient_address",
      "label": "Exact cancellation mailing address from the agreement",
      "type": "address",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "recipient",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "signature",
      "label": "Signature",
      "type": "signature",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "review",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "controlling_pages_confirmed",
      "label": "I uploaded the controlling agreement pages.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "review",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "facts_reviewed",
      "label": "I reviewed the packet and understand PostalForm's role.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "review",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    }
  ],
  "attachments": [
    {
      "id": "controlling_contract_pages",
      "label": "Controlling solar agreement pages",
      "required": true,
      "instructions": "Upload copies of the pages showing the cancellation right or notice, deadline, required signer(s), accepted method, and exact cancellation address. Do not upload originals.",
      "allowed_types": [
        "pdf",
        "png",
        "jpg",
        "jpeg"
      ],
      "max_files": 10,
      "max_size_mb": 12
    }
  ],
  "attachments_max_total_size_mb": 12,
  "machine_submission": {
    "payload_property": "form",
    "create_paths": {
      "x402": "/api/machine/orders",
      "mpp": "/api/machine/mpp/orders"
    }
  }
}

Preview, payment and retries

Validation does not mail the document. For a human checkout, use MCP postalform.create_form_order_draft and present the returned preview, total and checkout URL. Machine API clients must handle the returned MPP or x402 challenge only within owner-approved spending authority. Preserve request_id and the exact payload for retries; changing the content requires a new request ID. After an uncertain payment, retrieve order status before creating another order. Provider handoff is not USPS delivery.

Ready to get started?

Upload your PDF and we will handle printing and mailing.

Resources