Create refund with restock_all_items accounting for existing partial refunds
curl --request POST \
--url https://api.fluid.app/api/refunds \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"order_id": 123,
"reason": "<string>",
"amount": 123,
"shipping": 123,
"tax": 123,
"cv": 123,
"qv": 123,
"restock_all_items": true,
"restock_items": [
{
"item_id": 123,
"quantity": 123
}
],
"refund_points": true
}
'import requests
url = "https://api.fluid.app/api/refunds"
payload = {
"order_id": 123,
"reason": "<string>",
"amount": 123,
"shipping": 123,
"tax": 123,
"cv": 123,
"qv": 123,
"restock_all_items": True,
"restock_items": [
{
"item_id": 123,
"quantity": 123
}
],
"refund_points": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
order_id: 123,
reason: '<string>',
amount: 123,
shipping: 123,
tax: 123,
cv: 123,
qv: 123,
restock_all_items: true,
restock_items: [{item_id: 123, quantity: 123}],
refund_points: true
})
};
fetch('https://api.fluid.app/api/refunds', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/refunds",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'order_id' => 123,
'reason' => '<string>',
'amount' => 123,
'shipping' => 123,
'tax' => 123,
'cv' => 123,
'qv' => 123,
'restock_all_items' => true,
'restock_items' => [
[
'item_id' => 123,
'quantity' => 123
]
],
'refund_points' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/refunds"
payload := strings.NewReader("{\n \"order_id\": 123,\n \"reason\": \"<string>\",\n \"amount\": 123,\n \"shipping\": 123,\n \"tax\": 123,\n \"cv\": 123,\n \"qv\": 123,\n \"restock_all_items\": true,\n \"restock_items\": [\n {\n \"item_id\": 123,\n \"quantity\": 123\n }\n ],\n \"refund_points\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fluid.app/api/refunds")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"order_id\": 123,\n \"reason\": \"<string>\",\n \"amount\": 123,\n \"shipping\": 123,\n \"tax\": 123,\n \"cv\": 123,\n \"qv\": 123,\n \"restock_all_items\": true,\n \"restock_items\": [\n {\n \"item_id\": 123,\n \"quantity\": 123\n }\n ],\n \"refund_points\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/refunds")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"order_id\": 123,\n \"reason\": \"<string>\",\n \"amount\": 123,\n \"shipping\": 123,\n \"tax\": 123,\n \"cv\": 123,\n \"qv\": 123,\n \"restock_all_items\": true,\n \"restock_items\": [\n {\n \"item_id\": 123,\n \"quantity\": 123\n }\n ],\n \"refund_points\": true\n}"
response = http.request(request)
puts response.read_body"<string>"{
"message": "<string>",
"refund_status": "pending"
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
Bearer token authentication
Body
ID of the order to refund.
Which portion of the order to refund.
all, tax, shipping, product_price, cv, qv, partial Optional human-readable reason for the refund.
Amount to refund (used with partial/custom types).
Shipping amount to refund.
Tax amount to refund.
CV (commissionable volume) to deduct with the refund.
QV (qualifying volume) to deduct with the refund.
When true, restock every remaining (not-yet-refunded) order item.
Specific items to restock; ignored when restock_all_items is true.
Show child attributes
Show child attributes
When true and the order was paid with a split card+points payment, refund all redeemed points back to the customer. No-op if the order has no points portion or points have already been refunded.
Response
Refund created
Any valid JSON value for provider, integration, theme, metadata, or other dynamic payloads whose keys are not fixed by the API contract.
curl --request POST \
--url https://api.fluid.app/api/refunds \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"order_id": 123,
"reason": "<string>",
"amount": 123,
"shipping": 123,
"tax": 123,
"cv": 123,
"qv": 123,
"restock_all_items": true,
"restock_items": [
{
"item_id": 123,
"quantity": 123
}
],
"refund_points": true
}
'import requests
url = "https://api.fluid.app/api/refunds"
payload = {
"order_id": 123,
"reason": "<string>",
"amount": 123,
"shipping": 123,
"tax": 123,
"cv": 123,
"qv": 123,
"restock_all_items": True,
"restock_items": [
{
"item_id": 123,
"quantity": 123
}
],
"refund_points": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
order_id: 123,
reason: '<string>',
amount: 123,
shipping: 123,
tax: 123,
cv: 123,
qv: 123,
restock_all_items: true,
restock_items: [{item_id: 123, quantity: 123}],
refund_points: true
})
};
fetch('https://api.fluid.app/api/refunds', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/refunds",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'order_id' => 123,
'reason' => '<string>',
'amount' => 123,
'shipping' => 123,
'tax' => 123,
'cv' => 123,
'qv' => 123,
'restock_all_items' => true,
'restock_items' => [
[
'item_id' => 123,
'quantity' => 123
]
],
'refund_points' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/refunds"
payload := strings.NewReader("{\n \"order_id\": 123,\n \"reason\": \"<string>\",\n \"amount\": 123,\n \"shipping\": 123,\n \"tax\": 123,\n \"cv\": 123,\n \"qv\": 123,\n \"restock_all_items\": true,\n \"restock_items\": [\n {\n \"item_id\": 123,\n \"quantity\": 123\n }\n ],\n \"refund_points\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.fluid.app/api/refunds")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"order_id\": 123,\n \"reason\": \"<string>\",\n \"amount\": 123,\n \"shipping\": 123,\n \"tax\": 123,\n \"cv\": 123,\n \"qv\": 123,\n \"restock_all_items\": true,\n \"restock_items\": [\n {\n \"item_id\": 123,\n \"quantity\": 123\n }\n ],\n \"refund_points\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/refunds")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"order_id\": 123,\n \"reason\": \"<string>\",\n \"amount\": 123,\n \"shipping\": 123,\n \"tax\": 123,\n \"cv\": 123,\n \"qv\": 123,\n \"restock_all_items\": true,\n \"restock_items\": [\n {\n \"item_id\": 123,\n \"quantity\": 123\n }\n ],\n \"refund_points\": true\n}"
response = http.request(request)
puts response.read_body"<string>"{
"message": "<string>",
"refund_status": "pending"
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}