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.

Open this template in the demo builder 8 fields, 8 required. Free demo account, no card.

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

More templates