Use the cancellation and refund API to initiate cancellations or refunds on a given order.
You can only cancel an order or items (unshipped) fully or partially.
Orders can be canceled after they are moved out of the FB_PROCESSING
state, with an exception of orders in the FB_PROCESSING
state for more than 24 hours. An order can be in the FB_PROCESSING
state for that long due to: 1) the inability to complete the buyer risk check or 2) a sanction on the buyer's account.
curl -X POST \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/{order-id}/cancellations
POST /{order-id}/cancellations HTTP/1.1
Host: graph.facebook.com
/* PHP SDK v5.0.0 */
/* make the API call */
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->post(
'/{order-id}/cancellations',
array (),
'{access-token}'
);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
/* handle the result */
/* make the API call */
FB.api(
"/{order-id}/cancellations",
"POST",
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
Attribute | Description |
---|---|
Type: |
Optional Why the seller is canceling the order; for example, out of stock. |
Type: boolean |
Optional By default, the value is |
Type: array of |
Optional Array of items being canceled. |
Type: string |
Required Unique key per request. |
cancel_reason
objectAttribute | Description |
---|---|
Type: |
Optional Reason for the cancellation. |
Type: string |
Optional Reason for the cancellation, this message may be presented to the user. |
items
Attribute | Description |
---|---|
Type: string |
Required if ID representing the product in the seller's catalog. You must provide |
Type: string |
Required if A Meta-generated ID representing the line item on the order. This value is readable as the |
Type: number |
Required Number of items canceled. |
reason_code
enumValue | Description |
---|---|
|
Cancellation requested by the buyer. |
|
Product is out of stock at fulfillment. |
|
Unable to ship to address provided by the buyer. |
|
Order is suspicious/possible fraud. |
|
Other cancellation reason. |
{ "cancel_reason": { "reason_code": "CUSTOMER_REQUESTED", "reason_description": "Buyer did not need it anymore" }, "restock_items": true, "idempotency_key": "cb090e84-e75a-9a34-45d3-5153bec88b65" }
{ "cancel_reason": { "reason_code": "OUT_OF_STOCK", "reason_description": "Ran out of item" }, "restock_items": false, "items": [ { "retailer_id": "FB_product_1234", "quantity": 1 } ], "idempotency_key": "cb090e84-e75a-9a34-45d3-5153bec88b65" }
If successful:
{ "success": true }
Otherwise, a relevant error message is returned.
You can only refund an order or items (shipped), fully or partially (by quantity or price).
curl -X POST \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/{order-id}/refunds
POST /{order-id}/refunds HTTP/1.1
Host: graph.facebook.com
/* PHP SDK v5.0.0 */
/* make the API call */
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->post(
'/{order-id}/refunds',
array (),
'{access-token}'
);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
/* handle the result */
/* make the API call */
FB.api(
"/{order-id}/refunds",
"POST",
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
Attribute | Description |
---|---|
Type: array of |
Optional For partial refund, specify the item-level breakdown. Not required for a full refund. |
Type: |
Required Reason for the refund. |
Type: string |
Optional Reason for the refund. This message is presented to the user. |
Type: string |
Required Unique key per request. |
Type: |
Optional Amount to be refunded for shipping. |
Type: array of |
Optional Amount to be deducted off of the refund. Commonly used for a return label fee for order returns. |
Type: string |
Optional ID representing the return to which the refund is associated. See Returns API |
deductions
objectAttribute | Description |
---|---|
Type: string |
Required Currently |
Type: |
Required Amount to be deducted for shipping. See |
shipping_refund
objectAttribute | Description |
---|---|
Type: |
Required Amount to be refunded for shipping. See |
refund_item
objectAttribute | Description |
---|---|
Type: string |
Required if ID representing the product in the seller's catalog. You must provide |
Type: string |
Required if A Meta-generated ID representing the line item on the order. This value is readable as the |
Type: |
Required if Amount to refund, before any tax. Can be any value up to the full value of the item. See |
Type: number |
Required if Number of items to be refunded fully. |
currency_amount
objectAttribute | Description |
---|---|
Type: string |
Required Amount in decimal format. Example: |
Type: string |
Required Three digit ISO-4217-3 code for the purchase. Format the currency as a number, followed by the 3-digit ISO currency code (ISO 4217 standards) , with a space between cost and currency. Example: |
refund_reason_code
enumValue | Description |
---|---|
|
Refunded by buyers remorse. |
|
Refunded as goods were delivered damaged. |
|
Product not as described. |
|
Product had quality issues. |
|
Other refund reason. |
|
Wrong product delivered. |
|
Refund issued by the Facebook support team, usually in response of a dispute with the buyer. |
{ "reason_code": "WRONG_ITEM", "idempotency_key": "cb090e84-e75a-9a34-45d3-5153bec88b65" }
{ "items": [ { "retailer_id": "1234", "item_refund_quantity": 1 }, { "retailer_id": "38383838", "item_refund_amount": { "amount": "2.5", "currency": "USD" } } ], "shipping": { "shipping_refund": { "amount": "2.4", "currency": "USD" } }, "deductions": [ { "deduction_type": "RETURN_SHIPPING", "deduction_amount": { "amount": "5.5", "currency": "USD" } } ], "reason_code": "WRONG_ITEM", "idempotency_key": "cb090e84-e75a-9a34-45d3-5153bec88b65" }
If successful:
{ "success": true }
Otherwise, a relevant error message is returned.
If you received an error that this order couldn't be refunded until the customer's payment method had been charged, validate if the payment was captured .
curl -X GET -G \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/{order-id}/cancellations
GET /{order-id}/cancellations HTTP/1.1
Host: graph.facebook.com
/* PHP SDK v5.0.0 */
/* make the API call */
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->get(
'/{order-id}/cancellations',
'{access-token}'
);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
/* handle the result */
/* make the API call */
FB.api(
"/{order-id}/cancellations",
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
If successful:
{ "data": [ { "id": "412737486183265", "items": { "data": [ { "id": "32121321312", "product_id": "2082596341811586", "retailer_id": "FB_product_1234", "quantity": 1 } ] }, "cancel_reason": { "reason_code": "CUSTOMER_REQUESTED", "reason_description": "Buyer did not need it anymore" } } ] }
curl -X GET -G \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/{order-id}/refunds
GET /{order-id}/refunds HTTP/1.1
Host: graph.facebook.com
/* PHP SDK v5.0.0 */
/* make the API call */
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->get(
'/{order-id}/refunds',
'{access-token}'
);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
/* handle the result */
/* make the API call */
FB.api(
"/{order-id}/refunds",
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
Attribute and Type |
---|
Type: array of |
refund_item_object
Attribute | Description | Default Display |
---|---|---|
Type: string |
Refund unique ID. |
Yes |
Type: |
Array of refunded items. |
Yes |
Type: |
Total refund amount. See |
Yes |
Type: number |
Reason for the refund. See |
Yes |
items
objectAttribute and Type |
---|
Type: array of |
item
objectAttribute | Description |
---|---|
Type: string |
Unique ID for order item. |
Type: string |
Unique product ID. |
Type: string |
Unique product ID set by seller. |
Type: object |
Subtotal of refund. |
Type: number |
Optional Item refund quantity, only present if informed when refunding an order with |
refund_subtotal
objectAttribute | Description | Default Display |
---|---|---|
Type: string |
Amount in decimal format. Example: |
Yes |
Type: string |
Three digit ISO-4217-3 code for the purchase. Format the currency as a number, followed by the 3-digit ISO currency code (ISO 4217 standards) , with a space between cost and currency. Example: |
Yes |
refund_amount
objectAttribute | Description | Default Display |
---|---|---|
Type: string |
Amount in decimal format. Example: |
Yes |
Type: string |
Three digit ISO-4217-3 code for the purchase. Format the currency as a number, followed by the 3-digit ISO currency code (ISO 4217 standards) , with a space between cost and currency. Example: |
Yes |
Type: string |
Amount in decimal format with negative sign. Example: |
No |
Type: string |
Amount in decimal format with negative sign. Example: |
No |
Type: string |
Amount in decimal format. Example: |
No |
Type: string |
Amount in decimal format. Example: |
No |
curl -X GET -G \
-d 'fields="id,items{product_id,retailer_id,refund_subtotal,quantity},refund_reason,refund_amount{subtotal,tax,total,amount,currency}"' \
-d 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/{order-id}/refunds
GET /{order-id}/refunds?fields=id%2Citems%7Bproduct_id%2Cretailer_id%2Crefund_subtotal%2Cquantity%7D%2Crefund_reason%2Crefund_amount%7Bsubtotal%2Ctax%2Ctotal%2Camount%2Ccurrency%7D HTTP/1.1
Host: graph.facebook.com
/* PHP SDK v5.0.0 */
/* make the API call */
try {
// Returns a `Facebook\FacebookResponse` object
$response = $fb->get(
'/{order-id}/refunds?fields=id%2Citems%7Bproduct_id%2Cretailer_id%2Crefund_subtotal%2Cquantity%7D%2Crefund_reason%2Crefund_amount%7Bsubtotal%2Ctax%2Ctotal%2Camount%2Ccurrency%7D',
'{access-token}'
);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
echo 'Graph returned an error: ' . $e->getMessage();
exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
echo 'Facebook SDK returned an error: ' . $e->getMessage();
exit;
}
$graphNode = $response->getGraphNode();
/* handle the result */
/* make the API call */
FB.api(
"/{order-id}/refunds",
{
"fields": "id,items{product_id,retailer_id,refund_subtotal,quantity},refund_reason,refund_amount{subtotal,tax,total,amount,currency}"
},
function (response) {
if (response && !response.error) {
/* handle the result */
}
}
);
If successful:
{ "data": [ { "id": "498980194169539", "items": { "data": [ { "id": "486602442073981", "product_id": "2452389501475182", "retailer_id": "FB_shirt_1234", "refund_subtotal": { "amount": "1.00", "currency": "USD" }, "quantity": 1 } ] }, "refund_reason": { "reason_code": "BUYERS_REMORSE" }, "refund_amount": { "subtotal": "1.00", "shipping": "10.00", "tax": "-1.02", "total": "12.02", "amount": "12.02", "currency": "USD" }, } ], "paging": { "cursors": { "before": "QVFIUkdCNjRRQ2tpZAloxbFlZAMnZABN3pYcnB5TzZALYlAzTVo2eF8wM3BraFRRRWNLZAnJwczAtanA0VUE4WnB4dVZAQYUE3OTRZASTBMZAjBWYWxOZAGJJdm9vODRn", "after": "QVFIUkdCNjRRQ2tpZAloxbFlZAMnZABN3pYcnB5TzZALYlAzTVo2eF8wM3BraFRRRWNLZAnJwczAtanA0VUE4WnB4dVZAQYUE3OTRZASTBMZAjBWYWxOZAGJJdm9vODRn" } } }