Skip to contentPostalForm

Content

Credit Card Billing Error & Denied-Dispute Packet API reference

Collect the credit-card charge facts, lane, timeline, designated billing-dispute address, signature, redaction confirmations, and supporting exhibits needed to prepare a mailed billing-error or denied-dispute response packet.

Published Apr 15, 2026 โ€ข Updated Aug 30, 2026

Workflow slug: card-billing-dispute. Workflow version: 2. 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 card-billing-dispute
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": "card-billing-dispute",
    "fields": {
      "lane_initial_notice": false,
      "lane_appeal": false,
      "lane_unsure": false,
      "uncertain_contacted_issuer_or_filed_online": false,
      "uncertain_sent_written_notice": false,
      "uncertain_denial_received": false,
      "credit_card_account_confirmed": false,
      "account_authority_confirmed": false,
      "sender_name": "",
      "sender_email": "",
      "sender_phone": "",
      "issuer_name": "",
      "card_product_name": "",
      "account_last4": "",
      "sender_address": "",
      "statement_date": "",
      "charge_date": "",
      "charge_amount": "",
      "merchant_name": "",
      "contacted_issuer": false,
      "contacted_merchant": false,
      "reason_unauthorized": false,
      "reason_duplicate": false,
      "reason_wrong_amount": false,
      "reason_return_no_credit": false,
      "reason_payment_not_posted": false,
      "reason_canceled_but_charged": false,
      "reason_not_received": false,
      "reason_other": false,
      "issue_summary": "",
      "requested_resolution": "",
      "denial_received": false,
      "denial_date": "",
      "denial_reason_summary": "",
      "denial_document_unavailable_acknowledged": false,
      "post_denial_limits_acknowledged": false,
      "outside_window_acknowledged": false,
      "timeline_event_1": {
        "event_date": "",
        "label": "",
        "description": ""
      },
      "timeline_event_2": {
        "event_date": "",
        "label": "",
        "description": ""
      },
      "timeline_event_3": {
        "event_date": "",
        "label": "",
        "description": ""
      },
      "timeline_event_4": {
        "event_date": "",
        "label": "",
        "description": ""
      },
      "recipient_name": "",
      "recipient_address": "",
      "dispute_address_confirmed": false,
      "documents_redacted_confirmed": false,
      "facts_acknowledged": false,
      "product_limits_acknowledged": false,
      "signature": ""
    },
    "attachments": [
      {
        "id": "statement_page",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      },
      {
        "id": "denial_letter",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      },
      {
        "id": "merchant_or_order_record",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      },
      {
        "id": "cancellation_or_refund_proof",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      },
      {
        "id": "payment_or_credit_proof",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      },
      {
        "id": "correspondence",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      },
      {
        "id": "billing_dispute_address_screenshot",
        "file_name": "<filename>",
        "base64": "<base64 file content>"
      }
    ]
  }
}

Field reference

Field ID Label Type Required when active Choices
lane_initial_notice I need to send my first written dispute checkbox Yes See schema
lane_appeal My dispute was denied checkbox Yes See schema
lane_unsure Help me pick โ€” answer 3 quick questions checkbox Yes See schema
uncertain_contacted_issuer_or_filed_online Have you already called the issuer or filed online? checkbox Yes See schema
uncertain_sent_written_notice Have you already sent a written notice by mail? checkbox Yes See schema
uncertain_denial_received Did the issuer already deny the dispute? checkbox Yes See schema
credit_card_account_confirmed This is a consumer credit-card account, not a debit card, bank transfer, check, or business card. checkbox Yes See schema
account_authority_confirmed I am the cardholder or am authorized to send this notice for the account. checkbox Yes See schema
sender_name Full name text Yes See schema
sender_email Email text Yes See schema
sender_phone Phone (optional) text No See schema
issuer_name Card issuer text Yes See schema
card_product_name Card product or nickname (optional) text No See schema
account_last4 Last 4 digits of your card text Yes See schema
sender_address Your mailing address address Yes See schema
statement_date Statement date showing the charge date Yes See schema
charge_date Charge date date Yes See schema
charge_amount Charge amount text Yes See schema
merchant_name Merchant name text Yes See schema
contacted_issuer Have you already contacted the issuer? checkbox Yes See schema
contacted_merchant Have you already contacted the merchant? checkbox Yes See schema
reason_unauthorized I did not authorize this charge checkbox Yes See schema
reason_duplicate I was charged twice checkbox Yes See schema
reason_wrong_amount The amount or date is wrong checkbox Yes See schema
reason_return_no_credit I returned it but never got the credit checkbox Yes See schema
reason_payment_not_posted I paid but the payment or credit never posted checkbox Yes See schema
reason_canceled_but_charged I canceled, but they charged me anyway checkbox Yes See schema
reason_not_received I never received what I paid for checkbox Yes See schema
reason_other Other checkbox Yes See schema
issue_summary What happened? textarea Yes See schema
requested_resolution What result are you asking for? textarea Yes See schema
denial_received Did the issuer already deny the dispute? checkbox Yes See schema
denial_date Denial date date Yes See schema
denial_reason_summary What reason did the issuer give? textarea Yes See schema
denial_document_unavailable_acknowledged I do not have a copy of the issuer denial to attach. checkbox No See schema
post_denial_limits_acknowledged I understand this packet requests reconsideration, a written explanation, and available investigation records; it does not promise a universal statutory appeal right. checkbox Yes See schema
outside_window_acknowledged If my first written notice is more than 60 days after the statement date, I still want to mail it and am not relying on PostalForm to preserve a deadline. checkbox No See schema
timeline_event_1 Timeline event 1 compound Yes See schema
timeline_event_2 Timeline event 2 (optional) compound No See schema
timeline_event_3 Timeline event 3 (optional) compound No See schema
timeline_event_4 Timeline event 4 (optional) compound No See schema
recipient_name Billing-dispute / billing-inquiries recipient text Yes See schema
recipient_address Billing-dispute address address Yes See schema
dispute_address_confirmed I confirmed this is the issuer address designated for billing errors or billing inquiries, not a payment address. checkbox Yes See schema
documents_redacted_confirmed Every upload is a copy, and I redacted full card numbers, security codes, unrelated account numbers, and unrelated sensitive details. checkbox Yes See schema
facts_acknowledged I reviewed the dates, amount, merchant, account ending, requested result, and factual statements for accuracy. checkbox Yes See schema
product_limits_acknowledged I understand PostalForm prepares and mails the packet but does not give legal advice, decide whether a charge is a billing error, preserve a deadline, or guarantee reimbursement or a response. checkbox Yes See schema
signature Sign the dispute letter signature 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": 2,
  "slug": "card-billing-dispute",
  "name": "Credit Card Billing Error & Denied-Dispute Packet",
  "description": "Build a first written credit-card billing-error notice or a careful response after an issuer denial, then mail the complete evidence packet to the designated billing-dispute address with Certified Mail tracking.",
  "agent_summary": "Collect the credit-card charge facts, lane, timeline, designated billing-dispute address, signature, redaction confirmations, and supporting exhibits needed to prepare a mailed billing-error or denied-dispute response packet.",
  "form_summary": "Use this guided workflow to organize a credit-card billing-error packet with a cover sheet, signed letter, timeline, exhibit index, and supporting exhibits before mailing.",
  "data_collected": [
    "Consumer contact information and mailing address",
    "Card issuer, account last 4, merchant, amount, and statement date",
    "Dispute reason, prior process status, and denial details when applicable",
    "Timeline events, billing-dispute recipient address, and supporting exhibits"
  ],
  "topics": [
    "appeals",
    "consumer",
    "credit cards",
    "billing disputes"
  ],
  "category": "card_billing_dispute",
  "publish_state": "published",
  "llms": true,
  "indexable": true,
  "certified_mail": "required",
  "recipient": {
    "mode": "user"
  },
  "compliance_policy": {
    "id": "card_billing_dispute_packet",
    "version": 1,
    "recheckStages": [
      "preview",
      "approval",
      "checkout",
      "payment",
      "fulfillment",
      "machine"
    ]
  },
  "pricing": {
    "minimumTotalCents": 2495,
    "currency": "USD",
    "description": "$24.95 minimum total including required Certified Mail; optional receipt services are priced at checkout.",
    "additiveMailServices": [
      "certified_return_receipt"
    ]
  },
  "checkout_flow": "forms_order",
  "published_at": "2026-04-15",
  "updated_at": "2026-08-30",
  "groups": [
    {
      "id": "entry",
      "label": "Entry and lane",
      "description": "Choose whether you are sending the first written notice or responding after the issuer denied the dispute.",
      "depends_on": []
    },
    {
      "id": "consumer",
      "label": "Consumer and card details",
      "description": "Identify yourself, the card, and the charge you are disputing.",
      "depends_on": []
    },
    {
      "id": "reason_process",
      "label": "Reason and prior process",
      "description": "Explain the billing problem and whether the issuer already denied the dispute.",
      "depends_on": []
    },
    {
      "id": "timeline",
      "label": "Timeline",
      "description": "Build a simple timeline so the reviewer can follow what happened without guessing.",
      "depends_on": []
    },
    {
      "id": "recipient",
      "label": "Billing-dispute address and uploads",
      "description": "Enter the billing-dispute address from the statement or agreement, then upload the statement page and supporting exhibits.",
      "depends_on": []
    },
    {
      "id": "review",
      "label": "Review, redaction, and signature",
      "description": "Confirm the packet limits, verify your copies are redacted, and sign the letter before preview.",
      "depends_on": []
    }
  ],
  "fields": [
    {
      "id": "lane_initial_notice",
      "label": "I need to send my first written dispute",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "entry",
      "choice_group": "lane_selection",
      "choice_label": "Which best describes your situation?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "lane_appeal",
      "label": "My dispute was denied",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "entry",
      "choice_group": "lane_selection",
      "choice_label": "Which best describes your situation?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "lane_unsure",
      "label": "Help me pick โ€” answer 3 quick questions",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "entry",
      "choice_group": "lane_selection",
      "choice_label": "Which best describes your situation?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "uncertain_contacted_issuer_or_filed_online",
      "label": "Have you already called the issuer or filed online?",
      "type": "checkbox",
      "required": true,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "entry",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "lane_unsure",
        "operator": "truthy"
      },
      "depends_on": [
        "lane_unsure"
      ],
      "compound": null
    },
    {
      "id": "uncertain_sent_written_notice",
      "label": "Have you already sent a written notice by mail?",
      "type": "checkbox",
      "required": true,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "entry",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "lane_unsure",
        "operator": "truthy"
      },
      "depends_on": [
        "lane_unsure"
      ],
      "compound": null
    },
    {
      "id": "uncertain_denial_received",
      "label": "Did the issuer already deny the dispute?",
      "type": "checkbox",
      "required": true,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "entry",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "lane_unsure",
        "operator": "truthy"
      },
      "depends_on": [
        "lane_unsure"
      ],
      "compound": null
    },
    {
      "id": "credit_card_account_confirmed",
      "label": "This is a consumer credit-card account, not a debit card, bank transfer, check, or business card.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "entry",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "account_authority_confirmed",
      "label": "I am the cardholder or am authorized to send this notice for the account.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "entry",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "sender_name",
      "label": "Full name",
      "type": "text",
      "required": true,
      "meta_class": "name",
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "sender_email",
      "label": "Email",
      "type": "text",
      "required": true,
      "meta_class": "email",
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "sender_phone",
      "label": "Phone (optional)",
      "type": "text",
      "required": false,
      "meta_class": "phone",
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "issuer_name",
      "label": "Card issuer",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "card_product_name",
      "label": "Card product or nickname (optional)",
      "type": "text",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "account_last4",
      "label": "Last 4 digits of your card",
      "type": "text",
      "required": true,
      "meta_class": "last4_digits",
      "ui_width": null,
      "group_id": "consumer",
      "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": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "statement_date",
      "label": "Statement date showing the charge",
      "type": "date",
      "required": true,
      "meta_class": "date",
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "charge_date",
      "label": "Charge date",
      "type": "date",
      "required": true,
      "meta_class": "date",
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "charge_amount",
      "label": "Charge amount",
      "type": "text",
      "required": true,
      "meta_class": "currency",
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "merchant_name",
      "label": "Merchant name",
      "type": "text",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "contacted_issuer",
      "label": "Have you already contacted the issuer?",
      "type": "checkbox",
      "required": true,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "contacted_merchant",
      "label": "Have you already contacted the merchant?",
      "type": "checkbox",
      "required": true,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "consumer",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "reason_unauthorized",
        "operator": "falsy"
      },
      "depends_on": [
        "reason_unauthorized"
      ],
      "compound": null
    },
    {
      "id": "reason_unauthorized",
      "label": "I did not authorize this charge",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": "billing_reason",
      "choice_label": "Why are you disputing this charge?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_duplicate",
      "label": "I was charged twice",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": "billing_reason",
      "choice_label": "Why are you disputing this charge?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_wrong_amount",
      "label": "The amount or date is wrong",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": "billing_reason",
      "choice_label": "Why are you disputing this charge?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_return_no_credit",
      "label": "I returned it but never got the credit",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": "billing_reason",
      "choice_label": "Why are you disputing this charge?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_payment_not_posted",
      "label": "I paid but the payment or credit never posted",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": "billing_reason",
      "choice_label": "Why are you disputing this charge?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_canceled_but_charged",
      "label": "I canceled, but they charged me anyway",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": "billing_reason",
      "choice_label": "Why are you disputing this charge?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_not_received",
      "label": "I never received what I paid for",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": "billing_reason",
      "choice_label": "Why are you disputing this charge?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "reason_other",
      "label": "Other",
      "type": "checkbox",
      "required": true,
      "meta_class": "radio",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": "billing_reason",
      "choice_label": "Why are you disputing this charge?",
      "depends_on": [],
      "compound": null
    },
    {
      "id": "issue_summary",
      "label": "What happened?",
      "type": "textarea",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "requested_resolution",
      "label": "What result are you asking for?",
      "type": "textarea",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "denial_received",
      "label": "Did the issuer already deny the dispute?",
      "type": "checkbox",
      "required": true,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "lane_initial_notice",
        "operator": "falsy"
      },
      "depends_on": [
        "lane_initial_notice"
      ],
      "compound": null
    },
    {
      "id": "denial_date",
      "label": "Denial date",
      "type": "date",
      "required": true,
      "meta_class": "date",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "denial_received",
        "operator": "truthy"
      },
      "depends_on": [
        "denial_received"
      ],
      "compound": null
    },
    {
      "id": "denial_reason_summary",
      "label": "What reason did the issuer give?",
      "type": "textarea",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "denial_received",
        "operator": "truthy"
      },
      "depends_on": [
        "denial_received"
      ],
      "compound": null
    },
    {
      "id": "denial_document_unavailable_acknowledged",
      "label": "I do not have a copy of the issuer denial to attach.",
      "type": "checkbox",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "denial_received",
        "operator": "truthy"
      },
      "depends_on": [
        "denial_received"
      ],
      "compound": null
    },
    {
      "id": "post_denial_limits_acknowledged",
      "label": "I understand this packet requests reconsideration, a written explanation, and available investigation records; it does not promise a universal statutory appeal right.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "denial_received",
        "operator": "truthy"
      },
      "depends_on": [
        "denial_received"
      ],
      "compound": null
    },
    {
      "id": "outside_window_acknowledged",
      "label": "If my first written notice is more than 60 days after the statement date, I still want to mail it and am not relying on PostalForm to preserve a deadline.",
      "type": "checkbox",
      "required": false,
      "meta_class": "yes_no",
      "ui_width": null,
      "group_id": "reason_process",
      "choice_group": null,
      "choice_label": null,
      "visibility": {
        "fieldId": "lane_appeal",
        "operator": "falsy"
      },
      "depends_on": [
        "lane_appeal"
      ],
      "compound": null
    },
    {
      "id": "timeline_event_1",
      "label": "Timeline event 1",
      "type": "compound",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "timeline",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": {
        "join_with": null,
        "subfields": [
          {
            "id": "event_date",
            "label": "Date",
            "meta_class": "date",
            "required": true
          },
          {
            "id": "label",
            "label": "Event",
            "meta_class": null,
            "required": true
          },
          {
            "id": "description",
            "label": "Optional details",
            "meta_class": null
          }
        ]
      }
    },
    {
      "id": "timeline_event_2",
      "label": "Timeline event 2 (optional)",
      "type": "compound",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "timeline",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": {
        "join_with": null,
        "subfields": [
          {
            "id": "event_date",
            "label": "Date",
            "meta_class": "date"
          },
          {
            "id": "label",
            "label": "Event",
            "meta_class": null
          },
          {
            "id": "description",
            "label": "Optional details",
            "meta_class": null
          }
        ]
      }
    },
    {
      "id": "timeline_event_3",
      "label": "Timeline event 3 (optional)",
      "type": "compound",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "timeline",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": {
        "join_with": null,
        "subfields": [
          {
            "id": "event_date",
            "label": "Date",
            "meta_class": "date"
          },
          {
            "id": "label",
            "label": "Event",
            "meta_class": null
          },
          {
            "id": "description",
            "label": "Optional details",
            "meta_class": null
          }
        ]
      }
    },
    {
      "id": "timeline_event_4",
      "label": "Timeline event 4 (optional)",
      "type": "compound",
      "required": false,
      "meta_class": null,
      "ui_width": null,
      "group_id": "timeline",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": {
        "join_with": null,
        "subfields": [
          {
            "id": "event_date",
            "label": "Date",
            "meta_class": "date"
          },
          {
            "id": "label",
            "label": "Event",
            "meta_class": null
          },
          {
            "id": "description",
            "label": "Optional details",
            "meta_class": null
          }
        ]
      }
    },
    {
      "id": "recipient_name",
      "label": "Billing-dispute / billing-inquiries 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": "Billing-dispute address",
      "type": "address",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "recipient",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "dispute_address_confirmed",
      "label": "I confirmed this is the issuer address designated for billing errors or billing inquiries, not a payment address.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "review",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "documents_redacted_confirmed",
      "label": "Every upload is a copy, and I redacted full card numbers, security codes, unrelated account numbers, and unrelated sensitive details.",
      "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_acknowledged",
      "label": "I reviewed the dates, amount, merchant, account ending, requested result, and factual statements for accuracy.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "review",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "product_limits_acknowledged",
      "label": "I understand PostalForm prepares and mails the packet but does not give legal advice, decide whether a charge is a billing error, preserve a deadline, or guarantee reimbursement or a response.",
      "type": "checkbox",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "review",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    },
    {
      "id": "signature",
      "label": "Sign the dispute letter",
      "type": "signature",
      "required": true,
      "meta_class": null,
      "ui_width": null,
      "group_id": "review",
      "choice_group": null,
      "choice_label": null,
      "depends_on": [],
      "compound": null
    }
  ],
  "attachments": [
    {
      "id": "statement_page",
      "label": "Statement page showing the charge",
      "required": true,
      "instructions": "Upload a redacted copy of the statement page showing when the disputed charge first appeared. Never include a full card number or security code.",
      "allowed_types": [
        "pdf",
        "jpg",
        "jpeg",
        "png"
      ],
      "max_files": 1,
      "max_size_mb": 12
    },
    {
      "id": "denial_letter",
      "label": "Prior denial letter or email (if you have it)",
      "required": false,
      "instructions": "Upload a redacted copy of the issuer denial letter or email for a denied-dispute response. If you do not have it, use the workflow confirmation instead.",
      "allowed_types": [
        "pdf",
        "jpg",
        "jpeg",
        "png"
      ],
      "max_files": 2,
      "max_size_mb": 12
    },
    {
      "id": "merchant_or_order_record",
      "label": "Merchant receipt or order record",
      "required": false,
      "instructions": "Receipt, invoice, order confirmation, or service record connected to the charge.",
      "allowed_types": [
        "pdf",
        "jpg",
        "jpeg",
        "png"
      ],
      "max_files": 4,
      "max_size_mb": 12
    },
    {
      "id": "cancellation_or_refund_proof",
      "label": "Cancellation, return, or refund proof",
      "required": false,
      "instructions": "Cancellation confirmation, return authorization, return receipt, or refund confirmation.",
      "allowed_types": [
        "pdf",
        "jpg",
        "jpeg",
        "png"
      ],
      "max_files": 6,
      "max_size_mb": 12
    },
    {
      "id": "payment_or_credit_proof",
      "label": "Payment or credit proof",
      "required": false,
      "instructions": "Proof that a payment, credit, or correction should have posted but did not.",
      "allowed_types": [
        "pdf",
        "jpg",
        "jpeg",
        "png"
      ],
      "max_files": 6,
      "max_size_mb": 12
    },
    {
      "id": "correspondence",
      "label": "Supporting correspondence",
      "required": false,
      "instructions": "Emails, chat transcripts, or messages with the merchant or issuer.",
      "allowed_types": [
        "pdf",
        "jpg",
        "jpeg",
        "png"
      ],
      "max_files": 10,
      "max_size_mb": 12
    },
    {
      "id": "billing_dispute_address_screenshot",
      "label": "Screenshot of the billing-dispute address area (optional)",
      "required": false,
      "instructions": "Upload the part of the statement or agreement that shows the billing-dispute, billing inquiries, or errors address.",
      "allowed_types": [
        "pdf",
        "jpg",
        "jpeg",
        "png"
      ],
      "max_files": 2,
      "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