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
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 | 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 |
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.