Skip to main content

Send Disposition Data

Call /v1/return/disposition/{return-id} after your warehouse has inspected the returned items and decided what to do with them. The condition and outcome data Pinch receives here is the single highest-value training signal for the abuse-detection model — it's the only way Pinch can confirm whether the customer actually returned what they claimed, in the condition they claimed.

If you're on Shopify with Aftership for returns, this data syncs automatically. For custom integrations or other warehouse systems, send it via this API.

Request​

POST /v1/return/disposition/{return-id} HTTP/1.1
Host: api.pinch.ai
Authorization: {api-key}
Content-Type: application/json

The {return-id} in the path is your providerReturnId from the original /v1/return call.

Body​

FieldTypeRequiredDescription
itemDispositionsarrayyesOne entry per inspected item. See below.

Item disposition entry​

FieldTypeRequiredDescription
identifierTypestringyesUPC, EAN, JAN, SKU, SerialNo.
identifierstringyesThe actual identifier value. Must match an item on the original return.
returnedItemConditionstringyesCondition of the item as received. Enum below.
dispositionOutcomestringyesWhat you did with the item. Enum below.
returnMethodobjectno{ "returnMethod": "PICKUP" | "DROPOFF" | "IN_STORE" }.
refundModeobjectno{ "refundMode": "CASH" | "STORE_CREDIT" | "ORIGINAL_PAYMENT" | "EXCHANGE" }.
warehouseIdentifierstringnoYour warehouse ID for the inspection location.
storeIdentifierstringnoFor in-store returns, the receiving store ID.
imagesarray of stringsnoURLs of photos taken during inspection. Useful for disputes.
inspectionNotestringnoFree-text inspector comment. Pinch reads these to refine the model.

returnedItemCondition enum​

ValueMeaning
NEWItem came back unused, original packaging intact, salable as new.
OPEN_BOXPackaging opened but item appears unused.
LIGHTLY_USEDVisible signs of use; not new but functional and refurbishable.
HEAVILY_USEDSignificant wear; only salvageable for parts or liquidation.
EMPTY_BOXBox arrived without the item inside. Strong abuse signal.
COUNTERFEIT_ITEMReturned item is a knockoff or different from what was shipped. Strong abuse signal.
DAMAGED_ITEMItem arrived damaged (could be carrier damage, not abuse).
LOST_ITEMReturn shipment lost in transit.

dispositionOutcome enum​

ValueMeaning
RESTOCKItem returned to sellable inventory at full price.
RESTOCK - SALE/CLEARANCERestocked but discounted (open-box, lightly used).
RECYCLEDisposed of through a recycling stream.
REFURBISHSent to a refurb partner for repair before resale.
DONATEDonated to a charity partner.
LIQUIDATESold to a wholesale liquidator.
REMOVE_OTHERSDisposed of for non-abuse reasons.
REMOVE_SUSPECT_ABUSEDisposed of because the return was an abuse case (empty box, counterfeit, etc.).

REMOVE_SUSPECT_ABUSE paired with EMPTY_BOX, COUNTERFEIT_ITEM, or repeated HEAVILY_USED from the same customer is the strongest signal Pinch uses to confirm abuse.

Example request​

curl "https://api.pinch.ai/v1/return/disposition/WETIIO2PG" \
-H "Authorization: $PINCH_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"itemDispositions": [
{
"identifierType": "SKU",
"identifier": "TF-2157TF72-100",
"returnedItemCondition": "LIGHTLY_USED",
"dispositionOutcome": "RESTOCK - SALE/CLEARANCE",
"returnMethod": { "returnMethod": "PICKUP" },
"refundMode": { "refundMode": "ORIGINAL_PAYMENT" },
"warehouseIdentifier": "wh-east-1",
"images": ["https://yourcdn.com/inspections/img-001.jpg"]
},
{
"identifierType": "SKU",
"identifier": "TF-5121TF72-100",
"returnedItemCondition": "EMPTY_BOX",
"dispositionOutcome": "REMOVE_SUSPECT_ABUSE",
"warehouseIdentifier": "wh-east-1",
"inspectionNote": "Box weight matched empty packaging; no item present.",
"images": ["https://yourcdn.com/inspections/img-002.jpg"]
}
]
}'

Response​

200 OK with a confirmation envelope:

{
"providerReturnId": "WETIIO2PG",
"pinchReturnId": "pret_3f8a1c",
"dispositionsRecorded": 2,
"modelImpact": "queued"
}
FieldDescription
dispositionsRecordedCount of items accepted in the payload.
modelImpactqueued if the disposition is being incorporated into the model; applied if effects are immediate.

This endpoint doesn't return a decision — disposition is reporting, not gating.

When to send​

There are three reasonable patterns:

PatternWhenTrade-off
Per-item, real-timeAs each warehouse inspector clears an itemHighest data freshness; needs warehouse system integration
Per-return, on completionAfter all items on a return are inspectedSimpler; usually a few hours after the return is received
Batch uploadDaily or weekly CSV via the dashboardEasiest; lower data freshness

If your warehouse system can webhook out on inspection completion, the per-return pattern is the right starting point.

CSV upload alternative​

If you can't hit the API directly, the dashboard's Integrations → Warehouse System → Upload Disposition Data page accepts a CSV with the same schema. Download the template, fill it out, upload. Schedule it weekly via cron until you can ship API integration.

Errors​

HTTPCodeMeaning
400invalid_requestRequired field missing
404return_not_foundThe {return-id} in the path doesn't exist
422unknown_enum_valuereturnedItemCondition or dispositionOutcome not in the enum
422item_not_on_returnidentifier doesn't match any item on the original return

See also​