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
Fill out form
Complete the guided fields online.
Preview PDF
Review the generated PDF before mailing.
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.