Returns

Returns coordinate authorization, merchandise, and buyer value without treating a refund as proof that goods came back. A Return contains frozen order-line identity, policy evaluation, line-level quantities, handoff requirements, progress summaries, completion blockers, and links to its operational and financial effects.

Use the eligibility branch of POST /v1/return-previews to discover returnable fulfilled allocations, then create a Return with POST /v1/returns. Apply receipt, inspection, disposition, and resolution facts to that Return with the individual operation routes or POST /v1/returns/{return_id}/process.

New to this surface? The Returns guide explains the model and points at the right integration; Your first return walks one item from a paid order to a settled refund.

The four statuses#

A Return carries four status fields because the things they describe genuinely come apart. Read the one that answers your question rather than inferring from a neighbor.

FieldQuestion it answersValues
decision_statusDid we say yes?pending, approved, partially_approved, declined
merchandise_statusDid the goods come back?not_required, awaiting_handoff, in_transit, partially_received, received, inspection_required, partially_inspected, inspection_review_required, disposition_required, resolved, exception
resolution_statusDid the buyer get their value?not_selected, pending, partially_fulfilled, requires_action, fulfilled, failed
statusIs the whole thing finished?requested, open, declined, canceled, completed

pending appears in three of these and fulfilled in two, so a bare status value is ambiguous without its field name. merchandise_status is not_required for a returnless refund, where the buyer keeps the goods, and exception when merchandise arrived that Flint cannot attribute to a line.

A Return moves requested to open on decision and open to completed when the last obligation clears. completed is not terminal: /reopen returns it to open so late compensating facts can be recorded.

Completion blockers#

completion_blockers is the authoritative list of what is still owed. Each entry names the Return line it belongs to and, where one exists, the receipt, inspection, disposition, or resolution holding it up. An empty array means nothing is outstanding.

CodeCleared by
decision_pendingDeciding the line
handoff_pendingThe buyer handing merchandise to a carrier
receipt_pendingThe warehouse recording arrival
inspection_pendingAn inspection observation
inspection_review_requiredAn acceptance decision on an inspection line
disposition_requiredA successful disposition
resolution_not_selectedChoosing what the buyer gets
resolution_pendingThe resolution's effects settling
resolution_requires_actionWhatever the resolution is waiting on, usually a buyer payment
resolution_failedRetrying or replacing the failed resolution
merchandise_exceptionVerifying or dispositioning merchandise that arrived unidentified or in excess

Under completion_mode: "automatic" Flint completes the Return when the final blocker clears. Under manual you call /complete, and the call fails while any blocker remains.

Gate downstream work on return.completed or on an empty blocker list, never on a refund succeeding. A resolution can reach a terminal state while merchandise work is still open.

Line quantities#

A Return line carries twelve counters. Use the counters to track the return's quantities and progress.

QuestionRead
How much can I still approve?requested_quantity minus approved_quantity, declined_quantity, and canceled_quantity
How much is still expected back?return_required_quantity minus received_quantity
How much can I still put on a resolution?available_resolution_quantity

available_resolution_quantity is derived. Proposed, pending, action-required, failed, and fulfilled resolutions all reserve capacity. A failed resolution does not release its quantity until it is canceled or corrected, which is what stops a retry and a replacement from both paying out. Canceling an unpaid exchange closes its replacement Order and releases its return credit for a new resolution.

return_required_quantity is the returnless-refund control. Set it to 0 while approving quantity and the buyer keeps the merchandise; the Return still settles the money and still records why.

The remaining counters (handed_off_quantity, inspected_quantity, accepted_quantity, rejected_quantity, dispositioned_quantity, resolved_quantity, review_required_quantity) track progress through the physical steps. Disposition capacity is received_quantity when no inspection is required, and accepted_quantity plus rejected_quantity when one is.

Writes#

Return PATCH routes preserve omitted fields. Send null to clear a nullable scalar that the route exposes, including external_reference_id, buyer_note, and requested_resolution_type.

Child mutations on /line-items return the parent Return rather than the mutated line, because a line change can move the Return's aggregate statuses and blockers. GET on the same path returns the line itself.

Resolution line_items and replacement_line_items are owned arrays. Replace either array through PATCH /v1/return-resolutions/{return_resolution_id} with the resolution's expected_version. Retained members keep their stable child IDs; omitting an array leaves it unchanged.

Writes that change meaning take expected_version from the resource you last read. On a conflict, 409 RETURN_VERSION_CONFLICT carries the current version in its error detail, so you can re-read and retry rather than searching for what changed.

Idempotency-Key is required on POST /v1/returns/{return_id}/process and optional elsewhere. Replaying the same processing key returns the original result without repeating inventory or money effects.

Processing a Return requires all three scopes: commerce.returns.write, commerce.returns.operations.write, and commerce.returns.resolutions.write. Decisions, receipts, inspections, dispositions, and resolutions are recorded in one request. Refunds, payments, replacement orders, and inventory updates complete asynchronously. expected_version is optional on the process route and checked only when sent.

When you send your own Return email, link the buyer to the Return with POST /v1/returns/{return_id}/access-links. The url it returns opens the Return and its order in your Flint-hosted customer account without a sign-in, for 30 days or 10 opens. The url is a bearer credential: Flint returns it only in that response and in a retry with the same Idempotency-Key. The route needs commerce.returns.read, and refuses a merchant_hosted customer account and a Return whose order has no customer_id. See Link the buyer to their order.

cURL
curl -X POST https://api.withflintpay.com/v1/returns/ret_01J5Z8N3QK4W7Y2RB6TPVXHC9D/access-links \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: return-link-ret_01J5Z8N3QK4W7Y2RB6TPVXHC9D"

Buyer portal sessions#

A Return read with a portal session is narrower than the same Return read with a merchant key. supported_actions is trimmed to at most ["cancel"], and completion_blockers keeps the blockers a buyer can personally clear (handoff_pending, resolution_not_selected, resolution_requires_action, resolution_failed). A resolution_pending blocker is also included when the Return is in progress, the buyer owes a balance, and the named resolution can collect it in checkout. Other pending blockers and merchant-private fields are removed.

The Return object#

Every field on a return, as returned by retrieve and carried by the endpoints below.

Attributes

buyer_actionsarray of objectRequired

What the buyer can do with the return, in this order: withdraw, ship_items, then pay_balance. A buyer's read or change through a customer session on /v1/me, or in Flint's buyer account, lists all three every time; merchant reads and webhooks get an empty list. ship_items is required while handoff_requirements is not empty, due by the earliest expires_at there. pay_balance is required while a resolution waits for the buyer's payment.

canceled_atstring

RFC3339 timestamp.

completed_atstring

RFC3339 timestamp.

completed_byobject
completion_blockersarray of objectRequired
completion_modeenum
  • manual
  • automatic
created_atstringRequired

RFC3339 timestamp.

customerobject or null
customer_idstring
decision_atstring

RFC3339 timestamp.

decision_statusenumRequired
  • pending
  • approved
  • partially_approved
  • declined
disposition_countintegerRequired
external_reference_idstring

Caller-owned identifier for this resource in an external system.

financial_summaryobjectRequired
handoff_requirementsarray of objectRequired
initiated_byenumRequired
  • buyer
  • merchant
  • integration
  • system
inspection_countintegerRequired
line_itemsarray of objectRequired
merchandise_statusenumRequired
  • not_required
  • awaiting_handoff
  • in_transit
  • partially_received
  • received
  • inspection_required
  • partially_inspected
  • inspection_review_required
  • disposition_required
  • resolved
  • exception
metadatamap of stringRequired
orderobject or null
order_idstringRequired
policy_evaluationobject
receipt_countintegerRequired
resolution_countintegerRequired
resolution_statusenumRequired
  • not_selected
  • pending
  • partially_fulfilled
  • requires_action
  • fulfilled
  • failed
return_idstringRequired
return_numberstringRequired
shipment_countinteger
statusenumRequired
  • requested
  • open
  • completed
  • declined
  • canceled
supported_actionsarray of stringRequired
updated_atstringRequired

RFC3339 timestamp.

versionintegerRequired
JSON
{
  "customer_id": "cus_01K1CUSTOMER00000000000",
  "line_items": [
    {
      "fulfillment_id": "ful_01K1FULFILLMENT000000000",
      "return_line_item_id": "retli_01K1LINE000000000000000",
      "return_reason_id": "rrsn_01K1REASON000000000000"
    }
  ],
  "order_id": "ord_01K1ORDER000000000000000",
  "return_id": "ret_01K1RETURN000000000000000"
}

Create return preview#

POST/v1/return-previews

Requires scope commerce.return_policies.write or commerce.return_reasons.write or commerce.returns.operations.write or commerce.returns.read or commerce.returns.resolutions.write or commerce.returns.write

Preview return eligibility or resolution amounts without creating a Return or reserving quantity. Set mode to eligibility or resolution and send the matching input object.

Request body

Send exactly one of these

eligibilityobjectRequired
modeenumRequired
  • eligibility

Response · 200

dataone ofRequired
metaobject
request_idstring
curl -X POST https://api.withflintpay.com/v1/return-previews \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "eligibility"
  }'

List returns#

GET/v1/returns

Requires scope commerce.return_policies.write or commerce.return_reasons.write or commerce.returns.operations.write or commerce.returns.read or commerce.returns.resolutions.write or commerce.returns.write

List Returns for the merchant, filtered by order, customer, status, decision, merchandise, resolution, or creation window. Filter by idempotency_key to recover a create whose response never arrived.

Query parameters

created_afterstring

RFC3339 created after filter.

created_beforestring

RFC3339 created before filter.

customer_idstring

Filter by customer id.

decision_statusarray of enum

Filter by decision status.

  • pending
  • approved
  • partially_approved
  • declined
external_reference_idstring

Exact-match filter on the caller-owned external reference ID.

merchandise_statusarray of enum

Filter by merchandise status.

  • not_required
  • awaiting_handoff
  • in_transit
  • partially_received
  • received
  • inspection_required
  • partially_inspected
  • inspection_review_required
  • disposition_required
  • resolved
  • exception
order_idstring

Filter by order id.

page_sizeinteger

Page size. Defaults to 20 and is capped at 100.

page_tokenstring

Opaque cursor returned by the previous page.

querystring

Search by return ID, return number, external reference ID, the order's number, or the buyer's email.

receiving_location_idstring

Filter by receiving location id.

resolution_statusarray of enum

Filter by resolution status.

  • not_selected
  • pending
  • partially_fulfilled
  • requires_action
  • fulfilled
  • failed
resolution_typearray of enum

Filter by resolution type.

  • refund
  • exchange
  • replacement
  • no_monetary_action
  • correction
return_numberstring

Filter by return number.

return_reason_idstring

Filter by return reason id.

statusarray of enum

Filter by status.

  • requested
  • open
  • completed
  • declined
  • canceled
updated_afterstring

RFC3339 updated after filter.

updated_beforestring

RFC3339 updated before filter.

work_typearray of enum

Filter by work type. Matches only returns that are still requested or open.

  • decision
  • handoff
  • receipt
  • inspection
  • disposition
  • resolution
  • exception

Response · 200

dataarray of objectRequired
metaobject
next_page_tokenstring
request_idstring
curl https://api.withflintpay.com/v1/returns \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY"

Create return#

POST/v1/returnsIdempotent

Requires scope commerce.returns.write

Create a requested Return. When no policy matches, the Return remains available for merchant review rather than failing creation.

Request body

external_reference_idstring

Caller-owned identifier for this resource in an external system.

line_itemsarray of objectRequired
metadatamap of string
order_idstringRequired

Response · 201

dataobjectRequired
metaobject
request_idstring
curl -X POST https://api.withflintpay.com/v1/returns \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "line_items": [
      {
        "order_line_item_id": "",
        "requested_quantity": 0,
        "return_reason_id": ""
      }
    ],
    "order_id": ""
  }'

Get return#

GET/v1/returns/{return_id}

Requires scope commerce.return_policies.write or commerce.return_reasons.write or commerce.returns.operations.write or commerce.returns.read or commerce.returns.resolutions.write or commerce.returns.write

Retrieve a Return with its line items, policy evaluation, financial summary, and completion blockers. Supports expand for the order, the customer, and each line item's reason and fulfillment.

Path parameters

return_idstringRequired

Flint return id.

Query parameters

expandarray of enum

Supported expansions: customer, line_items.fulfillment, line_items.return_reason, order. Expanded relationships are returned only when explicitly requested and authorized. Limits: at most 10 unique expand paths per request; path depth at most 2. To-many expansions are capped at 20 related objects per path. Repeat expand, for example expand=customer&expand=line_items.fulfillment, or pass one comma-separated value.

  • customer
  • line_items.fulfillment
  • line_items.return_reason
  • order

Response · 200

Same response as Create return.

curl https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY"
JSON
{
  "data": {
    "customer_id": "cus_01K1CUSTOMER00000000000",
    "line_items": [
      {
        "fulfillment_id": "ful_01K1FULFILLMENT000000000",
        "return_line_item_id": "retli_01K1LINE000000000000000",
        "return_reason_id": "rrsn_01K1REASON000000000000"
      }
    ],
    "order_id": "ord_01K1ORDER000000000000000",
    "return_id": "ret_01K1RETURN000000000000000"
  },
  "request_id": "req_123"
}

Update return#

PATCH/v1/returns/{return_id}Idempotent

Requires scope commerce.returns.write

Update caller-owned fields on a Return. Only external_reference_id and metadata are writable; every other change goes through a decision, operation, or resolution command.

Path parameters

return_idstringRequired

Flint return id.

Request body

external_reference_idstring or null

Caller-owned identifier for this resource in an external system.

metadatamap of string or null

Caller-owned metadata. Omit this field to leave metadata unchanged. Send an object to merge by key, set a key to null to remove it, or set metadata to null to clear all metadata. An empty object makes no change. Empty strings are stored. Keys starting with flint_ are reserved and cannot be written through the public API.

Response · 200

Same response as Create return.

curl -X PATCH https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "external_reference_id": "",
    "metadata": {}
  }'
curl -X POST https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/cancel \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "buyer_request"
  }'
curl -X POST https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/complete \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "expected_version": 0,
    "reason": "manual_completion",
    "reason_message": ""
  }'

Decide return#

POST/v1/returns/{return_id}/decideIdempotent

Requires scope commerce.returns.write

Record per-line Return decisions atomically. Each line selects policy_evaluation or explicit decision semantics.

Path parameters

return_idstringRequired

Flint return id.

Request body

completion_modeenum

Omit to use the completion mode established by all matched return policies. Required when the policies disagree or do not establish a mode.

  • manual
  • automatic
expected_versioninteger
line_itemsarray of one ofRequired

Response · 200

Same response as Create return.

curl -X POST https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/decide \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "line_items": [
      {
        "approved_quantity": 0,
        "decision_basis": "policy_evaluation",
        "return_line_item_id": ""
      }
    ]
  }'

List return line items#

GET/v1/returns/{return_id}/line-items

Requires scope commerce.return_policies.write or commerce.return_reasons.write or commerce.returns.operations.write or commerce.returns.read or commerce.returns.resolutions.write or commerce.returns.write

List the line items on a Return with their quantity counters, eligibility, frozen display identity, and return value.

Path parameters

return_idstringRequired

Flint return id.

Query parameters

fulfillment_idstring

Filter by fulfillment id.

merchandise_statusarray of enum

Filter by merchandise status.

  • not_required
  • awaiting_handoff
  • in_transit
  • partially_received
  • received
  • inspection_required
  • partially_inspected
  • inspection_review_required
  • disposition_required
  • resolved
  • exception
order_line_item_idstring

Filter by order line item id.

page_sizeinteger

Page size. Defaults to 20 and is capped at 100.

page_tokenstring

Opaque cursor returned by the previous page.

resolution_statusarray of enum

Filter by resolution status.

  • not_selected
  • pending
  • partially_fulfilled
  • requires_action
  • fulfilled
  • failed
return_reason_idstring

Filter by return reason id.

statusarray of enum

Filter by status.

  • requested
  • open
  • completed
  • declined
  • canceled

Response · 200

dataarray of objectRequired
metaobject
next_page_tokenstring
request_idstring
curl https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/line-items \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY"

Add return line item#

POST/v1/returns/{return_id}/line-itemsIdempotent

Requires scope commerce.returns.write

Add a line item to a requested Return. The response is the updated Return, not the new line.

Path parameters

return_idstringRequired

Flint return id.

Request body

expected_versioninteger
line_itemobjectRequired

Response · 200

Same response as Create return.

curl -X POST https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/line-items \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "line_item": {
      "order_line_item_id": "",
      "requested_quantity": 0,
      "return_reason_id": ""
    }
  }'

Get return line item#

GET/v1/returns/{return_id}/line-items/{return_line_item_id}

Requires scope commerce.return_policies.write or commerce.return_reasons.write or commerce.returns.operations.write or commerce.returns.read or commerce.returns.resolutions.write or commerce.returns.write

Retrieve one Return line item, including its quantity counters and the reason the buyer selected.

Path parameters

return_idstringRequired

Flint return id.

return_line_item_idstringRequired

Flint return line item id.

Response · 200

dataobjectRequired
metaobject
request_idstring
curl https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/line-items/retli_01K0P7W6A4N9F3J2T8Q5R1C6XM \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY"

Update return line item#

PATCH/v1/returns/{return_id}/line-items/{return_line_item_id}Idempotent

Requires scope commerce.returns.write

Update a requested Return line item. Send null to clear buyer_note or requested_resolution_type. The response is the updated Return.

Path parameters

return_idstringRequired

Flint return id.

return_line_item_idstringRequired

Flint return line item id.

Request body

buyer_notestring or null
expected_versioninteger
requested_quantityinteger

Whole-number quantity; fractional quantities are not supported.

requested_resolution_typeenum or null
  • refund
  • exchange
  • replacement
  • no_monetary_action
  • null
return_reason_idstring

Response · 200

Same response as Create return.

curl -X PATCH https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/line-items/retli_01K0P7W6A4N9F3J2T8Q5R1C6XM \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "buyer_note": "",
    "expected_version": 0,
    "requested_quantity": 0,
    "requested_resolution_type": "refund",
    "return_reason_id": ""
  }'
curl -X DELETE https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/line-items/retli_01K0P7W6A4N9F3J2T8Q5R1C6XM \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY"

Cancel return line item#

POST/v1/returns/{return_id}/line-items/{return_line_item_id}/cancelIdempotent

Requires scope commerce.returns.write

Cancel approved quantity on a Return line item. Quantity already received, inspected, dispositioned, or reserved by a resolution cannot be canceled, and the conflict response names what is blocking it.

Path parameters

return_idstringRequired

Flint return id.

return_line_item_idstringRequired

Flint return line item id.

Request body

expected_versioninteger
handback_quantityintegerRequired

Whole-number quantity; fractional quantities are not supported.

quantityintegerRequired

Whole-number quantity; fractional quantities are not supported.

reasonenumRequired
  • buyer_request
  • merchant_request
  • expired
  • created_in_error
  • other
reason_messagestring

Response · 200

Same response as Create return.

curl -X POST https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/line-items/retli_01K0P7W6A4N9F3J2T8Q5R1C6XM/cancel \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "handback_quantity": 0,
    "quantity": 0,
    "reason": "buyer_request"
  }'

Waive return line inspection#

POST/v1/returns/{return_id}/line-items/{return_line_item_id}/waive-inspectionIdempotent

Requires scope commerce.returns.write

Waive the inspection requirement on a Return line item so received quantity can be dispositioned and resolved without an inspection observation.

Path parameters

return_idstringRequired

Flint return id.

return_line_item_idstringRequired

Flint return line item id.

Request body

expected_versioninteger
reasonenumRequired
  • policy_override
  • trusted_in_store_handoff
  • merchant_review
  • other
reason_messagestring

Response · 200

Same response as Create return.

curl -X POST https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/line-items/retli_01K0P7W6A4N9F3J2T8Q5R1C6XM/waive-inspection \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "policy_override"
  }'

Process existing return#

POST/v1/returns/{return_id}/processIdempotent

Requires scopes commerce.returns.operations.write and commerce.returns.resolutions.write and commerce.returns.write

Record decisions, receipts, inspections, dispositions, and resolutions for an existing requested or open Return in one request. Refunds, payments, replacement orders, and inventory updates complete asynchronously. expected_version is optional and checked only when sent. If the Return has changed since that version, the request fails with RETURN_VERSION_CONFLICT. Requires Idempotency-Key and all three scopes: commerce.returns.write, commerce.returns.operations.write, and commerce.returns.resolutions.write.

Path parameters

return_idstringRequired

Flint return id.

Request body

completion_behaviorenum
  • complete_when_ready
  • leave_open
expected_versioninteger
line_itemsarray of objectRequired
receiptobject

Response · 200

dataobjectRequired
metaobject
request_idstring
curl -X POST https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/process \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "line_items": [
      {
        "return_line_item_id": ""
      }
    ]
  }'

Reopen return#

POST/v1/returns/{return_id}/reopenIdempotent

Requires scope commerce.returns.write

Reopen a completed Return to record late compensating facts. Confirmed money movements are never edited backward, so a monetary fix is a new correction resolution.

Path parameters

return_idstringRequired

Flint return id.

Request body

expected_versioninteger
reasonenumRequired
  • linked_effect_changed
  • correction_required
  • additional_merchandise_received
  • merchant_request
  • other
reason_messagestring

Response · 200

Same response as Create return.

curl -X POST https://api.withflintpay.com/v1/returns/ret_01K0P7W6A4N9F3J2T8Q5R1C6XM/reopen \
  -H "Flint-Version: 2026-09-07" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: a-unique-key" \
  -d '{
    "reason": "linked_effect_changed"
  }'

Was this helpful?