Skip to content

Returns (RMA) — Overview

An RMA Order (Return Merchandise Authorization) represents a customer's return request. It drives the full return lifecycle: from creation, through acceptance, warehouse receiving, inspection, and financial resolution. RMA orders aggregate one or more return lines (product + quantity + reason), sender and delivery contacts, and resolution metadata.


RMA Order Flow


RMA Order State Machine


Processing Status

StatusDescription
NEWRMA order created but not yet submitted. Can be freely edited or cancelled.
REQUESTEDRMA order submitted for review. Awaiting acceptance or rejection.
ACCEPTEDRMA order accepted. Ready for fulfillment (customer can ship items back).
PROCESSINGItems are being received and inspected at the warehouse.
REJECTEDRMA order rejected. Terminal state.
CANCELEDRMA order cancelled. Terminal state.
COMPLETERMA order fully processed. All inspections and resolutions done. Terminal state.
ON_HOLDRMA order temporarily paused. Can be resumed.
ANOMALYAn anomaly was detected during processing. Requires manual intervention.
DELETEDRMA order soft-deleted. Terminal state.

Delivery Status

Tracks the physical return shipment from the customer back to the warehouse.

StatusDescription
PENDINGNo shipment initiated yet.
HANDLEDReturn shipment has been handed off to the carrier.
PROCESSINGReturn shipment is being processed by the carrier.
DELIVERINGReturn shipment is in transit.
DELIVEREDReturn shipment delivered to the warehouse.
DELIVERED_TO_SENDERReturn shipment was returned to the sender (customer).
CANCELEDReturn shipment cancelled.
ERRORAn error occurred during return shipping.

Financial Status

Tracks the financial resolution (refund, voucher, etc.) for the RMA order.

StatusDescription
PENDINGFinancial resolution is pending.
REFUNDEDFull refund has been processed.
PARTIALLY_REFUNDEDPartial refund has been processed.
REFUND_REJECTEDRefund request was rejected.
CANCELEDFinancial resolution cancelled.
NONENo financial resolution applicable.
EXECUTION_ERRORAn error occurred while executing the financial resolution.

Fulfillment Status

Tracks the warehouse fulfillment process for the return.

StatusDescription
PENDINGFulfillment not yet started.
IN_PROGRESSFulfillment is in progress (items being received/inspected).
ERRORAn error occurred during fulfillment.
CANCELEDFulfillment cancelled.
COMPLETEFulfillment complete. All items received and inspected.

Expected Resolution

Defines what the customer expects as resolution for the return.

ValueDescription
NONENo resolution expected.
VOUCHERStore credit / voucher.
REPLACEProduct replacement.
REFUNDMonetary refund.

Return Reasons

ValueDescription
WRONG_ITEMWrong item was received.
NOT_RECEIVEDItem was not received.
SIZE_PROBLEMSize does not fit.
COLOR_PROBLEMColor does not match expectations.
DEFECTIVEItem is defective (manufacturing fault).
DAMAGED_PRODUCTItem was damaged during shipping or handling.
UNSATISFIEDCustomer is generally unsatisfied with the product.
ITEMS_NOT_SOLDItems were not sold (B2B returns).

Product States

ValueDescription
BRAND_NEW_WITH_LABELProduct is brand new with original labels attached.
BRAND_NEW_WITHOUT_LABELProduct is brand new but labels have been removed.
WOREProduct has been worn or used.
DAMAGEDProduct is damaged.
DEFECTIVEProduct has a manufacturing defect.

Line States

ValueDescription
FULFILLEDLine has been fully processed.
PARTIALLY_FULFILLEDLine has been partially processed.
PENDINGLine has not yet been processed.

GraphQL Types

RmaOrderType

graphql
type RmaOrderType {
  id: ID!
  organization: Organization!
  configurationId: String!
  location: Location!
  lines: [RmaOrderLine!]!
  linkedOrders: [RmaOrderLinkedOrder]
  shipments: [RmaShipment]
  financialResolutions: [RmaFinancialResolutionRequest]
  externalId: String
  externalReference: String
  returnNumber: Int!
  returnReference: String!
  returnSlipUrl: String
  currency: String
  applyReturnFee: Boolean!
  deliveryContact: RmaContact!
  sender: RmaContact!
  owner: RmaContact
  billingContact: RmaContact
  receivedAt: DateTime!
  issuedAt: DateTime!
  expectedResolution: RmaOrderExpectedResolution!
  processingStatus: RmaOrderProcessingStatus!
  deliveryStatus: RmaOrderDeliveryStatus
  financialStatus: RmaOrderFinancialStatus
  fulfillmentStatus: RmaOrderFulfillmentStatus
  comment: String
  autoGenerateFinancialResolution: Boolean!
  autoExecuteFinancialResolution: Boolean!
  retainedAmountForShipping: Float!
}

Operations

OperationTypeDescription
rmaOrderQueryFetch a single RMA order by ID or external ID
rmaOrderCreateMutationCreate a new RMA order
rmaOrderSubmitMutationSubmit an RMA order for review
rmaOrderAcceptMutationAccept an RMA order
rmaOrderRejectMutationReject an RMA order
rmaOrderCancelMutationCancel an RMA order
rmaOrderStartFulfillmentMutationStart fulfillment processing
rmaOrderCompleteProcessingMutationMark processing as complete
rmaOrderRequestFulfillmentMutationRequest fulfillment for the return
rmaConfigurationCreateMutationCreate an RMA configuration
rmaConfigurationUpdateMutationUpdate an RMA configuration

Best Practices

TIP

Always set expectedResolution to match your business intent. This drives downstream automation for financial resolution and replacement order creation.

WARNING

Once an RMA order reaches PROCESSING status, it cannot be cancelled. Ensure the return is valid before accepting it.

  • Use autoGenerateFinancialResolution to automatically create refund or voucher requests when the return is completed. This reduces manual work for high-volume merchants.
  • Use autoExecuteFinancialResolution with caution — it will automatically execute the refund without manual review. Only enable this for trusted return flows.
  • Set retainedAmountForShipping to deduct return shipping costs from the refund amount when applicable.
  • Link original orders via linkedOrders to maintain traceability between the original sale and the return.
  • Use the return portal (rmaConfiguration.portalIsActive) to let customers self-serve their returns. Configure authorizationDelay to enforce your return policy window.
  • Track all four status dimensions — processing, delivery, financial, and fulfillment — to get a complete picture of each return's lifecycle.

HappyColis API Documentation