Skip to contentPostalForm

Content

Security Deposit Recovery Packet API reference

Prepare a tenant-authored, principal-only security deposit recovery packet for an ended private residential tenancy in California, Texas, New York, Florida, or Illinois. Require surrendered possession, no active case or deadline, no physical enclosure, verified recipients, and review acknowledgements. Accept PDFs and images as evidence. Do not claim penalties, multiplied damages, interest, fees, legal entitlement, deadline compliance, court filing, or guaranteed recovery.

Published Aug 22, 2026

Workflow slug: security-deposit-demand-packets. Workflow version: 3. 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 security-deposit-demand-packets
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": "security-deposit-demand-packets",
    "fields": {
      "relationship_to_tenancy": "",
      "rental_scope": "",
      "tenancy_ended": "",
      "possession_surrendered": "",
      "active_case_or_deadline": "",
      "physical_item_enclosure": "",
      "rental_state": "",
      "reason_no_deposit_returned": false,
      "reason_partial_return": false,
      "reason_late_return": false,
      "reason_no_itemized_statement": false,
      "reason_excessive_deductions": false,
      "reason_normal_wear": false,
      "reason_preexisting_damage": false,
      "reason_other": false,
      "tenant_name": "",
      "sender_email": "",
      "tenant_phone": "",
      "tenant_address": "",
      "co_tenants": "",
      "rental_address_line1": "",
      "rental_address_line2": "",
      "rental_city_state_zip": {
        "city": "",
        "state": "",
        "zip": ""
      },
      "lease_start_date": "",
      "lease_end_date": "",
      "move_out_date": "",
      "keys_returned_date": "",
      "forwarding_address_previously_provided": false,
      "forwarding_address_provided_date": "",
      "landlord_name": "",
      "landlord_company_name": "",
      "landlord_address_line1": "",
      "landlord_address_line2": "",
      "landlord_city_state_zip": {
        "city": "",
        "state": "",
        "zip": ""
      },
      "deposit_amount": "",
      "amount_returned": "",
      "date_returned": "",
      "itemized_statement_status": "",
      "itemized_statement_received_date": "",
      "deductions_summary": "",
      "requested_amount": "",
      "custom_facts": "",
      "return_instructions": "",
      "tenant_signature": "",
      "include_property_manager_copy": false,
      "include_registered_agent_copy": false,
      "property_manager_name": "",
      "property_manager_company_name": "",
      "property_manager_address_line1": "",
      "property_manager_address_line2": "",
      "property_manager_city_state_zip": {
        "city": "",
        "state": "",
        "zip": ""
      },
      "registered_agent_name": "",
      "registered_agent_company_name": "",
      "registered_agent_address_line1": "",
      "registered_agent_address_line2": "",
      "registered_agent_city_state_zip": {
        "city": "",
        "state": "",
        "zip": ""
      },
      "review_before_mailing_acknowledged": false,
      "not_legal_advice_acknowledged": false,
      "recipient_details_acknowledged": false,
      "principal_only_acknowledged": false,
      "state_rule_limits_acknowledged": false
    },
    "attachments": [
      {
        "id": "lease_or_agreement",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      }
    ]
  }
}

Field reference

Field ID Label Type Required when active Choices
relationship_to_tenancy Your relationship to the tenancy select Yes Tenant or co-tenant, Landlord or property manager, Another person or unsure
rental_scope Rental type select Yes Private residential rental, Commercial rental, Public, subsidized, regulated, or cooperative housing, Transient lodging, Deposit-replacement product, Another type or unsure
tenancy_ended Has the tenancy ended? select Yes Yes, No, Unsure
possession_surrendered Was possession surrendered, including keys where applicable? select Yes Yes, No, Unsure
active_case_or_deadline Is there an active lawsuit, eviction, bankruptcy, arbitration, attorney-managed matter, or court deadline? select Yes No, Yes, Unsure
physical_item_enclosure Does the mailing need keys, a check, cash, a money order, or another physical item enclosed? select Yes No, Yes, Unsure
rental_state Rental state select Yes California, Texas, New York, Florida, Illinois
reason_no_deposit_returned No deposit has been returned checkbox No See schema
reason_partial_return Only part of the deposit was returned checkbox No See schema
reason_late_return The deposit or accounting appears late checkbox No See schema
reason_no_itemized_statement No itemized deduction statement was provided checkbox No See schema
reason_excessive_deductions Deductions appear excessive or unsupported checkbox No See schema
reason_normal_wear Charges appear to include normal wear and tear checkbox No See schema
reason_preexisting_damage Charges appear to include pre-existing damage checkbox No See schema
reason_other Other deposit dispute facts checkbox No See schema
tenant_name Tenant full name text Yes See schema
sender_email Tenant email text Yes See schema
tenant_phone Tenant phone (optional) text No See schema
tenant_address Forwarding address address Yes See schema
co_tenants Other tenant names (optional) text No See schema
rental_address_line1 Rental address line 1 text Yes See schema
rental_address_line2 Rental address line 2 (optional) text No See schema
rental_city_state_zip Rental city, state, ZIP compound Yes See schema
lease_start_date Lease start date (optional) date No See schema
lease_end_date Lease end date (optional) date No See schema
move_out_date Move-out or surrender date date Yes See schema
keys_returned_date Keys returned date (optional) date No See schema
forwarding_address_previously_provided I previously gave the landlord my forwarding address checkbox No See schema
forwarding_address_provided_date Date forwarding address was provided (optional) date No See schema
landlord_name Landlord or owner name text Yes See schema
landlord_company_name Landlord company (optional) text No See schema
landlord_address_line1 Landlord address line 1 text Yes See schema
landlord_address_line2 Landlord address line 2 (optional) text No See schema
landlord_city_state_zip Landlord city, state, ZIP compound Yes See schema
deposit_amount Security deposit paid text Yes See schema
amount_returned Amount returned so far text Yes See schema
date_returned Date any deposit was returned (optional) date No See schema
itemized_statement_status Itemized statement status select Yes No itemized statement received, Itemized statement received, Only a partial or unclear explanation received, Not sure
itemized_statement_received_date Date itemized statement was received (optional) date No See schema
deductions_summary What deductions or itemization did you receive? (optional) textarea No See schema
requested_amount Amount demanded text Yes See schema
custom_facts Short factual explanation textarea Yes See schema
return_instructions Payment or response instructions (optional) textarea No See schema
tenant_signature Signature signature No See schema
include_property_manager_copy Send a separate copy to the property manager checkbox No See schema
include_registered_agent_copy Send a separate copy to a registered agent checkbox No See schema
property_manager_name Property manager name text Yes See schema
property_manager_company_name Property management company (optional) text No See schema
property_manager_address_line1 Property manager address line 1 text Yes See schema
property_manager_address_line2 Property manager address line 2 (optional) text No See schema
property_manager_city_state_zip Property manager city, state, ZIP compound Yes See schema
registered_agent_name Registered agent name text Yes See schema
registered_agent_company_name Registered agent company (optional) text No See schema
registered_agent_address_line1 Registered agent address line 1 text Yes See schema
registered_agent_address_line2 Registered agent address line 2 (optional) text No See schema
registered_agent_city_state_zip Registered agent city, state, ZIP compound Yes See schema
review_before_mailing_acknowledged I will review the generated packet and attachments before mailing. checkbox Yes See schema
not_legal_advice_acknowledged I understand PostalForm is not a law firm and does not provide legal advice. checkbox Yes See schema
recipient_details_acknowledged I confirmed the mailing recipients and addresses are the ones I want to use. checkbox Yes See schema
principal_only_acknowledged I limited the requested amount to security deposit principal still withheld, without penalties, multiplied damages, interest, fees, or unrelated amounts. checkbox Yes See schema
state_rule_limits_acknowledged I understand the cited state summary is a starting point and local, lease, housing-program, and case-specific rules may differ. 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": 3,
  "slug": "security-deposit-demand-packets",
  "name": "Security Deposit Recovery Packet",
  "description": "Prepare a state-aware residential security deposit recovery demand, organize supporting evidence, review the complete packet, and mail separate copies by Certified Mail.",
  "agent_summary": "Prepare a tenant-authored, principal-only security deposit recovery packet for an ended private residential tenancy in California, Texas, New York, Florida, or Illinois. Require surrendered possession, no active case or deadline, no physical enclosure, verified recipients, and review acknowledgements. Accept PDFs and images as evidence. Do not claim penalties, multiplied damages, interest, fees, legal entitlement, deadline compliance, court filing, or guaranteed recovery.",
  "form_summary": "Use this workflow after an ordinary private residential tenancy has ended and possession has been surrendered. PostalForm checks the supported scope and principal-only amount, generates a cited demand letter, facts and timing summary, and exhibit index, appends your evidence, and prepares one or more reviewed Certified Mail pieces.",
  "data_collected": [
    "Tenant contact details and forwarding address",
    "Rental property address, move-out date, and deposit facts",
    "Landlord, property manager, or registered agent mailing details",
    "Deposit amount, amount returned, disputed deductions, demand amount, and response instructions",
    "Optional lease, photos, move-out records, correspondence, itemized statements, receipts, and other evidence"
  ],
  "topics": [
    "renters",
    "housing",
    "security deposits",
    "demand letters",
    "consumer"
  ],
  "category": "security_deposit_demand_packets",
  "publish_state": "published",
  "aliases": [
    "security-deposit-demand-letter",
    "security-deposit-letter",
    "get-security-deposit-back",
    "landlord-kept-my-deposit",
    "security-deposit-demand-letter-certified-mail"
  ],
  "llms": true,
  "indexable": true,
  "certified_mail": "required",
  "recipient": {
    "mode": "user"
  },
  "multi_recipient": {
    "enabled": true,
    "mode": "field_mappings",
    "minimum": 1,
    "recipients": [
      {
        "id": "landlord",
        "role": "landlord",
        "label": "Landlord / owner",
        "nameFieldId": "landlord_name",
        "companyNameFieldId": "landlord_company_name",
        "address": {
          "line1FieldId": "landlord_address_line1",
          "line2FieldId": "landlord_address_line2",
          "cityStateZipFieldId": "landlord_city_state_zip"
        }
      },
      {
        "id": "property_manager",
        "role": "property_manager",
        "label": "Property manager",
        "visibility": {
          "fieldId": "include_property_manager_copy",
          "operator": "truthy"
        },
        "nameFieldId": "property_manager_name",
        "companyNameFieldId": "property_manager_company_name",
        "address": {
          "line1FieldId": "property_manager_address_line1",
          "line2FieldId": "property_manager_address_line2",
          "cityStateZipFieldId": "property_manager_city_state_zip"
        }
      },
      {
        "id": "registered_agent",
        "role": "registered_agent",
        "label": "Registered agent",
        "visibility": {
          "fieldId": "include_registered_agent_copy",
          "operator": "truthy"
        },
        "nameFieldId": "registered_agent_name",
        "companyNameFieldId": "registered_agent_company_name",
        "address": {
          "line1FieldId": "registered_agent_address_line1",
          "line2FieldId": "registered_agent_address_line2",
          "cityStateZipFieldId": "registered_agent_city_state_zip"
        }
      }
    ]
  },
  "compliance_policy": {
    "id": "security_deposit_recovery_packet",
    "version": 1,
    "recheckStages": [
      "preview",
      "approval",
      "checkout",
      "payment",
      "fulfillment",
      "machine"
    ]
  },
  "checkout_flow": "forms_order",
  "published_at": "2026-08-22",
  "updated_at": "2026-08-22",
  "groups": [
    {
      "id": "eligibility",
      "label": "Supported recovery scope",
      "description": "Confirm this is your own ended private residential tenancy, possession was surrendered, and no urgent legal proceeding or physical enclosure is involved.",
      "depends_on": []
    },
    {
      "id": "state_and_issue",
      "label": "State and issue",
      "description": "Choose the rental state and what happened with the security deposit.",
      "depends_on": []
    },
    {
      "id": "tenant",
      "label": "Tenant details",
      "description": "Provide the tenant information and forwarding address that should appear in the demand packet.",
      "depends_on": []
    },
    {
      "id": "rental",
      "label": "Rental property",
      "description": "Identify the rental property and move-out timing.",
      "depends_on": []
    },
    {
      "id": "landlord",
      "label": "Landlord recipient",
      "description": "Enter the landlord or owner mailing address for the packet.",
      "depends_on": []
    },
    {
      "id": "deposit",
      "label": "Deposit facts",
      "description": "Summarize the deposit, any amount returned, and the deduction or itemization details.",
      "depends_on": []
    },
    {
      "id": "demand",
      "label": "Demand details",
      "description": "Add the amount demanded, factual summary, response instructions, and signature.",
      "depends_on": []
    },
    {
      "id": "property_manager",
      "label": "Property manager copy",
      "description": "Add a separate Certified Mail piece to the property manager if you have a reliable mailing address.",
      "visibility": {
        "fieldId": "include_property_manager_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_property_manager_copy"
      ]
    },
    {
      "id": "registered_agent",
      "label": "Registered agent copy",
      "description": "Add a separate Certified Mail piece to a registered agent if your records call for it.",
      "visibility": {
        "fieldId": "include_registered_agent_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_registered_agent_copy"
      ]
    },
    {
      "id": "acknowledgements",
      "label": "Review acknowledgements",
      "description": "Confirm the packet is ready for review and mailing.",
      "depends_on": []
    }
  ],
  "fields": [
    {
      "id": "relationship_to_tenancy",
      "label": "Your relationship to the tenancy",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "eligibility",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "Tenant or co-tenant",
        "Landlord or property manager",
        "Another person or unsure"
      ],
      "compound": null
    },
    {
      "id": "rental_scope",
      "label": "Rental type",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "eligibility",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "Private residential rental",
        "Commercial rental",
        "Public, subsidized, regulated, or cooperative housing",
        "Transient lodging",
        "Deposit-replacement product",
        "Another type or unsure"
      ],
      "compound": null
    },
    {
      "id": "tenancy_ended",
      "label": "Has the tenancy ended?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "eligibility",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "Yes",
        "No",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "possession_surrendered",
      "label": "Was possession surrendered, including keys where applicable?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "eligibility",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "Yes",
        "No",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "active_case_or_deadline",
      "label": "Is there an active lawsuit, eviction, bankruptcy, arbitration, attorney-managed matter, or court deadline?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "eligibility",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No",
        "Yes",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "physical_item_enclosure",
      "label": "Does the mailing need keys, a check, cash, a money order, or another physical item enclosed?",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "eligibility",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No",
        "Yes",
        "Unsure"
      ],
      "compound": null
    },
    {
      "id": "rental_state",
      "label": "Rental state",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "state_and_issue",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "California",
        "Texas",
        "New York",
        "Florida",
        "Illinois"
      ],
      "compound": null
    },
    {
      "id": "reason_no_deposit_returned",
      "label": "No deposit has been returned",
      "type": "checkbox",
      "required": false,
      "meta_class": "multi_select",
      "ui_width": null,
      "group_id": "state_and_issue",
      "choice_group": "demand_reasons",
      "choice_label": "What went wrong with your deposit? Select all that apply.",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_partial_return",
      "label": "Only part of the deposit was returned",
      "type": "checkbox",
      "required": false,
      "meta_class": "multi_select",
      "ui_width": null,
      "group_id": "state_and_issue",
      "choice_group": "demand_reasons",
      "choice_label": "What went wrong with your deposit? Select all that apply.",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_late_return",
      "label": "The deposit or accounting appears late",
      "type": "checkbox",
      "required": false,
      "meta_class": "multi_select",
      "ui_width": null,
      "group_id": "state_and_issue",
      "choice_group": "demand_reasons",
      "choice_label": "What went wrong with your deposit? Select all that apply.",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_no_itemized_statement",
      "label": "No itemized deduction statement was provided",
      "type": "checkbox",
      "required": false,
      "meta_class": "multi_select",
      "ui_width": null,
      "group_id": "state_and_issue",
      "choice_group": "demand_reasons",
      "choice_label": "What went wrong with your deposit? Select all that apply.",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_excessive_deductions",
      "label": "Deductions appear excessive or unsupported",
      "type": "checkbox",
      "required": false,
      "meta_class": "multi_select",
      "ui_width": null,
      "group_id": "state_and_issue",
      "choice_group": "demand_reasons",
      "choice_label": "What went wrong with your deposit? Select all that apply.",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_normal_wear",
      "label": "Charges appear to include normal wear and tear",
      "type": "checkbox",
      "required": false,
      "meta_class": "multi_select",
      "ui_width": null,
      "group_id": "state_and_issue",
      "choice_group": "demand_reasons",
      "choice_label": "What went wrong with your deposit? Select all that apply.",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_preexisting_damage",
      "label": "Charges appear to include pre-existing damage",
      "type": "checkbox",
      "required": false,
      "meta_class": "multi_select",
      "ui_width": null,
      "group_id": "state_and_issue",
      "choice_group": "demand_reasons",
      "choice_label": "What went wrong with your deposit? Select all that apply.",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_other",
      "label": "Other deposit dispute facts",
      "type": "checkbox",
      "required": false,
      "meta_class": "multi_select",
      "ui_width": null,
      "group_id": "state_and_issue",
      "choice_group": "demand_reasons",
      "choice_label": "What went wrong with your deposit? Select all that apply.",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "tenant_name",
      "label": "Tenant full name",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "tenant",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "sender_email",
      "label": "Tenant email",
      "type": "text",
      "required": true,
      "meta_class": "email",
      "ui_width": "half",
      "group_id": "tenant",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "tenant_phone",
      "label": "Tenant phone (optional)",
      "type": "text",
      "required": false,
      "meta_class": "phone",
      "ui_width": "half",
      "group_id": "tenant",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "tenant_address",
      "label": "Forwarding address",
      "type": "address",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "tenant",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "co_tenants",
      "label": "Other tenant names (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "tenant",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "rental_address_line1",
      "label": "Rental address line 1",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "rental_address_line2",
      "label": "Rental address line 2 (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "rental_city_state_zip",
      "label": "Rental city, state, ZIP",
      "type": "compound",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": {
        "join_with": null,
        "subfields": [
          {
            "id": "city",
            "label": "City",
            "meta_class": "city",
            "required": true
          },
          {
            "id": "state",
            "label": "State",
            "meta_class": "state",
            "required": true
          },
          {
            "id": "zip",
            "label": "ZIP",
            "meta_class": "zip",
            "required": true
          }
        ]
      }
    },
    {
      "id": "lease_start_date",
      "label": "Lease start date (optional)",
      "type": "date",
      "required": false,
      "meta_class": "date",
      "ui_width": "half",
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "lease_end_date",
      "label": "Lease end date (optional)",
      "type": "date",
      "required": false,
      "meta_class": "date",
      "ui_width": "half",
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "move_out_date",
      "label": "Move-out or surrender date",
      "type": "date",
      "required": true,
      "meta_class": "date",
      "ui_width": "half",
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "keys_returned_date",
      "label": "Keys returned date (optional)",
      "type": "date",
      "required": false,
      "meta_class": "date",
      "ui_width": "half",
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "forwarding_address_previously_provided",
      "label": "I previously gave the landlord my forwarding address",
      "type": "checkbox",
      "required": false,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "forwarding_address_provided_date",
      "label": "Date forwarding address was provided (optional)",
      "type": "date",
      "required": false,
      "meta_class": "date",
      "ui_width": "half",
      "group_id": "rental",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "forwarding_address_previously_provided",
        "operator": "truthy"
      },
      "depends_on": [
        "forwarding_address_previously_provided"
      ],
      "compound": null
    },
    {
      "id": "landlord_name",
      "label": "Landlord or owner name",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "landlord",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "landlord_company_name",
      "label": "Landlord company (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "landlord",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "landlord_address_line1",
      "label": "Landlord address line 1",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "landlord",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "landlord_address_line2",
      "label": "Landlord address line 2 (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "landlord",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "landlord_city_state_zip",
      "label": "Landlord city, state, ZIP",
      "type": "compound",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "landlord",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": {
        "join_with": null,
        "subfields": [
          {
            "id": "city",
            "label": "City",
            "meta_class": "city",
            "required": true
          },
          {
            "id": "state",
            "label": "State",
            "meta_class": "state",
            "required": true
          },
          {
            "id": "zip",
            "label": "ZIP",
            "meta_class": "zip",
            "required": true
          }
        ]
      }
    },
    {
      "id": "deposit_amount",
      "label": "Security deposit paid",
      "type": "text",
      "required": true,
      "meta_class": "currency",
      "ui_width": "half",
      "group_id": "deposit",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "amount_returned",
      "label": "Amount returned so far",
      "type": "text",
      "required": true,
      "meta_class": "currency",
      "ui_width": "half",
      "group_id": "deposit",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "date_returned",
      "label": "Date any deposit was returned (optional)",
      "type": "date",
      "required": false,
      "meta_class": "date",
      "ui_width": "half",
      "group_id": "deposit",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "reason_partial_return",
        "operator": "truthy"
      },
      "depends_on": [
        "reason_partial_return"
      ],
      "compound": null
    },
    {
      "id": "itemized_statement_status",
      "label": "Itemized statement status",
      "type": "select",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "deposit",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "options": [
        "No itemized statement received",
        "Itemized statement received",
        "Only a partial or unclear explanation received",
        "Not sure"
      ],
      "compound": null
    },
    {
      "id": "itemized_statement_received_date",
      "label": "Date itemized statement was received (optional)",
      "type": "date",
      "required": false,
      "meta_class": "date",
      "ui_width": "half",
      "group_id": "deposit",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "itemized_statement_status",
        "operator": "not_equals",
        "value": "No itemized statement received"
      },
      "depends_on": [
        "itemized_statement_status"
      ],
      "compound": null
    },
    {
      "id": "deductions_summary",
      "label": "What deductions or itemization did you receive? (optional)",
      "type": "textarea",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "deposit",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "itemized_statement_status",
        "operator": "not_equals",
        "value": "No itemized statement received"
      },
      "depends_on": [
        "itemized_statement_status"
      ],
      "compound": null
    },
    {
      "id": "requested_amount",
      "label": "Amount demanded",
      "type": "text",
      "required": true,
      "meta_class": "currency",
      "ui_width": "half",
      "group_id": "demand",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "custom_facts",
      "label": "Short factual explanation",
      "type": "textarea",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "demand",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "return_instructions",
      "label": "Payment or response instructions (optional)",
      "type": "textarea",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "demand",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "tenant_signature",
      "label": "Signature",
      "type": "signature",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "demand",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "include_property_manager_copy",
      "label": "Send a separate copy to the property manager",
      "type": "checkbox",
      "required": false,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "demand",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "include_registered_agent_copy",
      "label": "Send a separate copy to a registered agent",
      "type": "checkbox",
      "required": false,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "demand",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "property_manager_name",
      "label": "Property manager name",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "property_manager",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_property_manager_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_property_manager_copy"
      ],
      "compound": null
    },
    {
      "id": "property_manager_company_name",
      "label": "Property management company (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "property_manager",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_property_manager_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_property_manager_copy"
      ],
      "compound": null
    },
    {
      "id": "property_manager_address_line1",
      "label": "Property manager address line 1",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "property_manager",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_property_manager_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_property_manager_copy"
      ],
      "compound": null
    },
    {
      "id": "property_manager_address_line2",
      "label": "Property manager address line 2 (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "property_manager",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_property_manager_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_property_manager_copy"
      ],
      "compound": null
    },
    {
      "id": "property_manager_city_state_zip",
      "label": "Property manager city, state, ZIP",
      "type": "compound",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "property_manager",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_property_manager_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_property_manager_copy"
      ],
      "compound": {
        "join_with": null,
        "subfields": [
          {
            "id": "city",
            "label": "City",
            "meta_class": "city",
            "required": true
          },
          {
            "id": "state",
            "label": "State",
            "meta_class": "state",
            "required": true
          },
          {
            "id": "zip",
            "label": "ZIP",
            "meta_class": "zip",
            "required": true
          }
        ]
      }
    },
    {
      "id": "registered_agent_name",
      "label": "Registered agent name",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "registered_agent",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_registered_agent_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_registered_agent_copy"
      ],
      "compound": null
    },
    {
      "id": "registered_agent_company_name",
      "label": "Registered agent company (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "registered_agent",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_registered_agent_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_registered_agent_copy"
      ],
      "compound": null
    },
    {
      "id": "registered_agent_address_line1",
      "label": "Registered agent address line 1",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "registered_agent",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_registered_agent_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_registered_agent_copy"
      ],
      "compound": null
    },
    {
      "id": "registered_agent_address_line2",
      "label": "Registered agent address line 2 (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": "half",
      "group_id": "registered_agent",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_registered_agent_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_registered_agent_copy"
      ],
      "compound": null
    },
    {
      "id": "registered_agent_city_state_zip",
      "label": "Registered agent city, state, ZIP",
      "type": "compound",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "registered_agent",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "include_registered_agent_copy",
        "operator": "truthy"
      },
      "depends_on": [
        "include_registered_agent_copy"
      ],
      "compound": {
        "join_with": null,
        "subfields": [
          {
            "id": "city",
            "label": "City",
            "meta_class": "city",
            "required": true
          },
          {
            "id": "state",
            "label": "State",
            "meta_class": "state",
            "required": true
          },
          {
            "id": "zip",
            "label": "ZIP",
            "meta_class": "zip",
            "required": true
          }
        ]
      }
    },
    {
      "id": "review_before_mailing_acknowledged",
      "label": "I will review the generated packet and attachments before mailing.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "acknowledgements",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "not_legal_advice_acknowledged",
      "label": "I understand PostalForm is not a law firm and does not provide legal advice.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "acknowledgements",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "recipient_details_acknowledged",
      "label": "I confirmed the mailing recipients and addresses are the ones I want to use.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "acknowledgements",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "principal_only_acknowledged",
      "label": "I limited the requested amount to security deposit principal still withheld, without penalties, multiplied damages, interest, fees, or unrelated amounts.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "acknowledgements",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "state_rule_limits_acknowledged",
      "label": "I understand the cited state summary is a starting point and local, lease, housing-program, and case-specific rules may differ.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "acknowledgements",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    }
  ],
  "attachments": [
    {
      "id": "lease_or_agreement",
      "label": "Lease, move-out records, photos, correspondence, or deduction evidence",
      "required": false,
      "instructions": "Upload supporting PDFs or images you want appended behind the generated security deposit demand packet.",
      "allowed_types": [
        "pdf",
        "png",
        "jpg",
        "jpeg"
      ],
      "max_files": 12,
      "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