Support template
Let customers request a product return without emailing support
Import a Laravel return request form for Filament, collect order details and return reasons, then route requests to your review workflow.
Updated
This Laravel return request form gives customers a clear way to start a product return without emailing support. They provide their order reference, contact address, and reason in one request. Import the template into the Filament panel that runs your application. The field table below shows the information the installed form records for each return.
After a customer submits the form, FilaForms stores the request in your Laravel application's database. The Filament submission dashboard gives reviewers one place to open the original request. Your application can then route it to a queue, ticketing integration, or internal review service. This keeps the customer intake record separate from the refund decision.
Fields in this template (8 fields, 8 required)
Field types used: Text, Date, Email, Select, Radio, Textarea. Every field is editable in the builder after import.
Order Information
| Field | Type | Required | Validation |
|---|---|---|---|
Order Number
order_number
|
Text | Yes |
required |
Purchase Date
purchase_date
|
Date | Yes |
required |
Customer Email
email
|
Yes |
required |
|
Customer Name
customer_name
|
Text | Yes |
required |
Return Details
| Field | Type | Required | Validation |
|---|---|---|---|
Product to Return
product_name
|
Text | Yes |
required |
Reason for Return
return_reason
|
Select, 6 options | Yes |
required |
Condition of Product
product_condition
|
Radio, 4 options | Yes |
required |
Detailed Explanation
explanation
|
Textarea | Yes |
required |
Route return requests into your review workflow
The fields support the first decision a return reviewer needs to make. They identify the order, contact the customer, and understand why the product comes back. That structure avoids vague messages that require a second email before anyone can act. It also gives the reviewer one record to reference when a return moves between support, warehouse, and finance teams.
National Retail Federation and Happy Returns estimated that 16.9% of annual sales in 2024 would be returned. That estimate does not predict your return volume. It explains why a repeatable intake path matters when return requests arrive alongside other support work. A structured submission preserves the customer's original reason while the team checks policy and order history.
The form records the stated reason and product condition. It does not process the refund or verify the order number against your commerce system. Keep those checks in the application service that owns orders, payments, and eligibility rules. That separation prevents a form submission from becoming an approval. It also lets you apply different return windows, restocking rules, and refund methods without changing customer intake.
Use a listener when a request needs to reach another part of your Laravel application immediately. The listener can read the order number, customer email, and return reason from the stored submission. It can then create an internal review task, dispatch a queue job, or pass the values to a ticketing integration your team already uses. The submission dashboard remains the original record, even when another system handles daily work.
<?php
namespace App\Listeners;
use FilaForms\Core\Events\FormSubmitted;
use Illuminate\Support\Facades\Log;
final class RouteReturnRequest
{
public function handle(FormSubmitted $event): void
{
$data = $event->submission->data;
Log::info('Return request submitted', [
'form_id' => $event->form->getKey(),
'order_number' => $data['order_number'] ?? null,
'email' => $data['email'] ?? null,
'return_reason' => $data['return_reason'] ?? null,
]);
}
}
Laravel 12 discovers this listener in app/Listeners automatically. Replace the log call with the boundary that fits your workflow. A queue job works when staff receive many requests. A support integration works when agents need the request beside an existing conversation. An internal service works when your order rules must decide which queue receives the request. Keep the listener narrow. Let the order or returns service make the business decision.
Treat the order number as a customer-provided reference until your application verifies it. Match it against the authenticated customer when your policy requires account ownership. Check the purchase date and fulfilment status before offering return instructions. Check product eligibility before starting a refund. These checks belong after submission because they depend on data that the form should not duplicate.
For a multi-vendor marketplace, add a seller_name select so each return routes to the right vendor instead of one shared inbox. Give the select values that match the vendor identifiers your application already uses. The listener can then use that value to select the vendor queue or notify the assigned merchant. This small change prevents a central team from forwarding each request manually. It also keeps vendors from seeing requests for products they did not sell.
Do not add fields only because a reviewer might want them later. Extra questions make a customer abandon the form or guess at details. Ask for more evidence after an initial review when the return reason needs it. A damaged-item process may need photos. A sizing issue may need only the original order and reason. The imported template gives you the starting intake. Adapt it to the decision your team must make first.
If a customer needs help before deciding to return a product, route them through a separate support flow. A Laravel form builder for Filament keeps that initial question distinct from a formal return request. The distinction matters because troubleshooting can resolve an issue without a shipment or refund. Use the return form when the customer is ready to begin the return process.
When returns need related dashboards, notifications, or conditional follow-up, review the FilaForms features for Laravel applications. Keep the request focused on the customer's first action. Let your Laravel application own the policy, commerce checks, approval, and payment work that follow.
Use this template in your own application
With FilaForms installed, one call creates the form with every field, rule, and setting listed above. Then edit it in the builder.
use FilaForms\Core\Support\FormTemplates;
$form = FormTemplates::createFormFromTemplate('return-request');
Template schema (JSON)
{
"name": "Return Request Form",
"description": "Product return and refund request form",
"icon": "heroicon-o-arrow-left",
"category": "Support",
"popularity": "High",
"sections": [
{
"name": "Order Information",
"fields": [
{
"label": "Order Number",
"type": "text",
"code": "order_number",
"required": true,
"placeholder": "e.g., ORD-12345",
"width": "50"
},
{
"label": "Purchase Date",
"type": "date",
"code": "purchase_date",
"required": true,
"width": "50"
},
{
"label": "Customer Email",
"type": "email",
"code": "email",
"required": true,
"width": "50"
},
{
"label": "Customer Name",
"type": "text",
"code": "customer_name",
"required": true,
"width": "50"
}
]
},
{
"name": "Return Details",
"fields": [
{
"label": "Product to Return",
"type": "text",
"code": "product_name",
"required": true,
"placeholder": "Product name or SKU",
"width": "100"
},
{
"label": "Reason for Return",
"type": "select",
"code": "return_reason",
"required": true,
"options": [
{
"value": "Defective Product"
},
{
"value": "Wrong Item Received"
},
{
"value": "Not as Described"
},
{
"value": "Changed Mind"
},
{
"value": "Size/Fit Issue"
},
{
"value": "Other"
}
],
"width": "100"
},
{
"label": "Condition of Product",
"type": "radio",
"code": "product_condition",
"required": true,
"options": [
{
"value": "New/Unused"
},
{
"value": "Lightly Used"
},
{
"value": "Used"
},
{
"value": "Damaged"
}
],
"width": "100"
},
{
"label": "Detailed Explanation",
"type": "textarea",
"code": "explanation",
"required": true,
"placeholder": "Please provide more details about the return...",
"width": "100"
}
]
}
]
}
Frequently asked questions
- Does this return request form issue a refund?
- No. The form records the stated reason and product condition, but it does not process the refund or verify the order number against your commerce system.
- What happens after a customer submits a return request?
- FilaForms stores the submission in your Laravel application's database and shows it in the Filament submission dashboard. A FormSubmitted listener can route the request to your review workflow.
- Can a multi-vendor marketplace use this return request form?
- Yes. Add a seller_name select so each return routes to the right vendor instead of one shared inbox.
- Can I connect this form to my existing support process?
- Yes. A listener can read the order number, customer email, and return reason from the submission, then send them to a queue, ticketing integration, or internal review service.