splitforms.com

Form template · RMA Form Template (Return Form)

RMA Form Template (Return Form)

Updated · plan facts checked against /pricing

An RMA form (return merchandise authorization form) is how a customer asks permission to send a product back before shipping it. This free return form template has 17 fields: order, product and serial number, refund, exchange or repair, reason, condition and photos. Approve a return by replying with its Lead number as the RMA number.

  • 500 free total
  • No PHP · no SDK
  • One POST endpoint
RMA Form Template (Return Form) — copy-paste form template

This template is one of our free HTML form templates. See more form templates by industry. Want owners to register a new product for warranty cover? Use the warranty registration form template.

Overview

Online stores, electronics and equipment sellers, and makers who offer repairs use an RMA form so every return starts as a request they can approve, not a surprise parcel. This template is plain HTML that posts to one splitforms endpoint (https://splitforms.com/api/submit) with a hidden access_key, so it works on a returns page, a help center or a static site with no backend. Each request is emailed to you on every plan with its Lead number, and that number, quoted in your approval reply, becomes the RMA number the customer writes on the box.

No backend code

No server, API route, or SDK — your RMA Form Template (Return Form) posts straight to one endpoint.

Straight to your inbox

Every submission is emailed to you and saved to a searchable dashboard — spam filtered before it reaches you.

Copy-paste ready

It's plain HTML you own — paste the RMA Form Template (Return Form) snippet, swap in your access key, and ship.

Copy and ship

Your RMA Form Template (Return Form), ready to paste.

Plain HTML that posts to the /api/submit endpoint. Replace YOUR_ACCESS_KEY with the key from your dashboard; that's the only edit.

Get your free access key
rma-form.html
<!-- Link here from your shipping email as e.g. /returns?order=1042 to pre-fill the order number -->
<form action="https://splitforms.com/api/submit" method="POST" enctype="multipart/form-data">
  <input type="hidden" name="access_key" value="YOUR_ACCESS_KEY">
  <input type="hidden" name="subject" value="New RMA request">
  <input type="hidden" name="form_loaded_at" id="form_loaded_at">

  <fieldset>
    <legend>Your order</legend>
    <label>Full name <input type="text" name="name" autocomplete="name" required></label>
    <label>Email <input type="email" name="email" autocomplete="email" required></label>
    <label>Phone (optional) <input type="tel" name="phone" autocomplete="tel"></label>
    <label>Order number <input type="text" name="order_number" id="order_number" required></label>
    <label>Purchase or delivery date <input type="date" name="purchase_date" required></label>
  </fieldset>

  <fieldset>
    <legend>The product</legend>
    <label>Product name <input type="text" name="product" required></label>
    <label>SKU or model number (optional) <input type="text" name="sku_or_model"></label>
    <label>Serial number (if the product has one) <input type="text" name="serial_number"></label>
    <label>Quantity to return <input type="number" name="quantity" min="1" max="99" step="1" value="1" required></label>
  </fieldset>

  <fieldset>
    <legend>What would you like?</legend>
    <label><input type="radio" name="return_type" value="Refund" required> Return it for a refund</label>
    <label><input type="radio" name="return_type" value="Exchange"> Exchange it (different size, color or model)</label>
    <label><input type="radio" name="return_type" value="Repair or warranty"> Repair or warranty replacement</label>
    <label>If exchanging, what would you like instead? <input type="text" name="exchange_for"></label>
  </fieldset>

  <fieldset>
    <legend>Why, and what condition is it in?</legend>
    <label>Reason
      <select name="reason" required>
        <option value="">Choose one</option>
        <option>Defective or stopped working</option>
        <option>Damaged in shipping</option>
        <option>Wrong item sent</option>
        <option>Not as described</option>
        <option>Wrong size or fit</option>
        <option>No longer needed</option>
        <option>Other</option>
      </select>
    </label>
    <label>Condition
      <select name="condition" required>
        <option value="">Choose one</option>
        <option>Unopened</option>
        <option>Opened, not used</option>
        <option>Used</option>
        <option>Damaged</option>
      </select>
    </label>
    <p>Do you still have the original packaging?</p>
    <label><input type="radio" name="original_packaging" value="Yes" required> Yes</label>
    <label><input type="radio" name="original_packaging" value="No"> No</label>
    <label>Describe the problem <textarea name="description" rows="4" required></textarea></label>
  </fieldset>

  <!-- Photos are stored on paid plans; the Free plan drops uploaded files -->
  <label>Photos of the item or damage (optional, up to 5)
    <input type="file" name="photos" accept="image/*" multiple>
  </label>

  <label><input type="checkbox" name="wait_for_rma" value="yes" required>
    I will not ship the item until I receive an RMA number and return instructions.</label>

  <!-- honeypot: leave empty -->
  <input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">

  <button type="submit">Request a return</button>
</form>
<script>
  document.getElementById('form_loaded_at').value = Date.now();
  var orderParam = new URLSearchParams(location.search).get('order');
  if (orderParam) document.getElementById('order_number').value = orderParam;
</script>

Field by field

What each field collects.

order_number (pre-filled from ?order=)
Link to the form from your shipping or delivery email with ?order= and the order number, and the script fills it in. The customer can still edit it. This removes the most common reason a return request stalls.
purchase_date
Lets you check the return or warranty window before approving. 'Purchase or delivery date' covers both kinds of policy.
serial_number (optional)
Essential for electronics and anything under warranty: it confirms the unit is yours and which batch it came from. Leave it optional so people returning a sweater aren't blocked.
return_type (radio, required)
Refund, exchange or repair are three different jobs. Each goes to a different person or process, and the exchange_for field captures what to send instead.
reason + condition (selects)
Two fixed lists you can count. Reason tells you why products come back; condition tells you whether the item can be resold, which often decides between a full refund and a partial one.
original_packaging (radio)
Some returns policies depend on it, and it tells your warehouse whether to expect a resaleable box.
photos (file, multiple)
Most useful for damage and 'wrong item' claims, where a photo can settle the request without shipping anything. Needs enctype="multipart/form-data". Stored on paid plans: up to 5 files, 5 MB each.
wait_for_rma (checkbox, required)
The customer agrees not to ship before approval. It is what makes this an authorization form rather than a notice that a box is on its way.

How to add it

How to add this form to your site.

To add a RMA Form Template (Return Form) to your site you need three things: a free splitforms access key, the HTML snippet above, and your key pasted into it. No backend, database, or CAPTCHA library — the form posts to one URL and every submission lands in your inbox and dashboard.

Fit the form to your returns policy

Edit the reason and condition lists, remove repair if you don't offer it, and add your return window to the page text. Swap in your access key and link to the form from your shipping emails with ?order=.

Review and authorize

Each request is emailed to you with a Lead number. Check the order, date and serial number, then reply to approve with the Lead number as the RMA number, the return address and packing instructions, or explain why it is declined.

Match the box when it arrives

Search the dashboard for the RMA number written on the package to pull up the request, then issue the refund, ship the exchange or start the repair.

What's included

What's included.

An RMA step exists so nothing arrives at your door unannounced. Without it, boxes turn up with no order number, no note and no way to tell whether the customer wants a refund, a different size or a repair. With it, you see the request first and decide: approve with return instructions, offer a fix that doesn't need shipping, or decline an item that is outside your return window. This template asks for the details that decision needs (order, product, serial number, what the customer wants, why, and the item's condition) and ends with a checkbox where the customer agrees not to ship until they have an RMA number. The number itself comes free: every submission gets a sequential Lead number, which you can quote back as the RMA number and write on the box label. Approve before anything ships: the Lead number on every request doubles as the RMA number.

  • RMA / return form: 17 fields (name, email, phone, order number, purchase date, product, SKU, serial, quantity, return type, exchange item, reason, condition, packaging, description, photos, ship-after-approval checkbox)
  • Plain HTML with labelled fieldsets — paste it into any site
  • One POST endpoint, no SDK — honeypot and spam scoring, no CAPTCHA
What's included with the RMA Form Template (Return Form)

Where submissions go

Where submissions go.

Reply-to is wired to the visitor's email, so one tap on Reply answers them directly — while the built-in honeypot and automatic spam scoring filter out bots before they reach you. Every submission is emailed to your inbox and can forward to a webhook or Slack the moment a visitor hits send.

  • Reply-to wired to the visitor's email — reply straight from your inbox
  • Honeypot and automatic spam scoring filter bots, no CAPTCHA friction
  • Live dashboard, CSV export, and signed webhooks on paid plans
Spam-filtered submissions from the RMA Form Template (Return Form)

How SplitForms works

What happens after someone submits your form?

splitforms receives the submission, filters spam, saves it to your dashboard and emails you — then, on paid plans, sends it on to your webhooks and integrations. No backend infrastructure to build.

A SplitForms contact form submission launching straight to your inbox

Add your endpoint

Point your form to your unique SplitForms endpoint. That's it.

HTML form pointing at a SplitForms submit endpoint

Receive submissions

We instantly capture and organize every submission in your inbox.

Submissions inbox with searchable leads and status pills

Route anywhere

Send data to email, spreadsheets, CRMs, webhooks, and 7,000+ apps.

Generic integration tiles for email, sheets, chat, CRM, automate, and webhook

No credit card required. Set up in under 60 seconds.

Connect & automate

Where can submissions go besides email?

On paid plans, submissions can also go to Slack, Discord, Google Sheets, Notion, Airtable, Zapier or any signed webhook — and splitforms works on the platforms you build on, from WordPress and Shopify to Next.js. With Stripe connected, your forms can take payments too.

Connect your SplitForms form to Slack, Google Sheets, Mailchimp, Zapier and more
NewTake payments on your formsDeposits, bookings, order forms — submitters check out through Stripe and the money goes straight to your Stripe account. Included on every paid plan.See payment forms →Need time slots? Online booking →

Setup guides for the stacks you use

Questions

Frequently asked questions.

View all FAQs
Can exchanges, refunds and repairs go to different people?

Yes, on paid plans. Notification routing sends each request to a different address based on a field value, so return_type = 'Repair or warranty' can go to your service team while refunds and exchanges go to customer support. On the Free plan all requests go to the form's notification address.

Can RMA requests go straight into Slack or our help desk?

On paid plans, add a webhook. Slack and Discord URLs get a formatted message; any other URL gets a signed JSON payload with every field, including order_number and serial_number, so a returns or ticketing tool can pick it up without retyping.

Can the customer get an automatic confirmation with their request number?

Yes, with the auto-reply on a paid plan; its template can include {{ lead_number }}. Word it as a request number and say returns ship only after approval, so customers don't post the item before you have reviewed it.

How do I see which products are returned most?

On paid plans, export the CSV and count rows by product and reason. Because both are separate columns, you can see in a few minutes whether one model keeps coming back as 'Defective' or one size as 'Wrong size or fit'.

What is an RMA form?

An RMA (return merchandise authorization) form is a request a customer submits before sending a product back. It identifies the order and product, says whether they want a refund, exchange or repair, and explains why. The seller reviews it and replies with an RMA number and instructions, or declines. 'Return form' usually means the same thing.

How do I create RMA numbers?

Use the Lead number splitforms gives every submission on every plan. It is sequential, shown in your notification email and searchable in the dashboard, so when a box arrives marked with it you can find the request in one search. Tell customers it is their RMA number only once you approve the return.

What is the difference between an RMA form and a refund request form?

An RMA form asks permission to send a product back, for a refund, an exchange or a repair. A refund request form asks for money back and also covers cases with nothing to return, such as a duplicate charge. Many returns use both: approve the RMA, then refund once the item arrives.

Simple pricing

How much does splitforms cost?

Free gives you 500 submissions for $0 — no card, no time limit. Pro is $5/month for 5,000 submissions a month, and Annual is $49/year for 15,000 a month with every Pro feature.

Free

$0— 500 submissions
 

No card, no time limit

Best for testing

For side projects and indie devs.

  • 500 free submissions
  • Unlimited forms
  • Email notifications included
  • Smart spam filtering
  • Submissions dashboard
  • Redirect after submit
  • MCP server included

Annual

$49/ year
About $4.08 per month, billed yearly
Best value

Every Pro feature with triple the volume — $0.27 per 1,000 at full use.

  • 15,000 submissions per month
  • Unlimited forms
  • Everything in Pro
  • File uploads with 5 GB storage
  • 3 team seats
  • Priority email support

No credit card required on Free • Cancel anytime • Full pricing and FAQ